較高負載期間出現間歇性錯誤 404。 (nginx/php/apc/mysql)

較高負載期間出現間歇性錯誤 404。 (nginx/php/apc/mysql)

我有一個 4 cpu 核心 VPS,4 GB 記憶體。它運行的是 nginx/0.7.65、PHP 5.3.2 和 MySQL 的 Ubuntu 10.04。我使用 php5-fpm 與 nginx 進行通訊。我還有 php5-apc 與 php 快取相輔相成。

該系統運行四個站點,每天顯示約 250 萬次頁面瀏覽量。

問題簡介 - 載入頁面時,網站會間歇性地顯示 404 錯誤。它可能會發生在每個頁面上,我可以坐在那裡一遍又一遍地刷新,平均每七到十次就會發生一次。

我嘗試過的 - 更新 Ubuntu 和 nginx,使用 php 和 nginx 配置。此問題已在 Ubuntu 11.10 和 nginx/1.0.5 上重現。

值得注意的日誌 - Nginx error.log 和 access.log 沒有顯示任何異常,但在發出 404 時會報告。 php5-fpm.log 顯示:
Nov 20 21:47:45.640003 [ERROR] [pool www] unable to retrieve process activity of one or more child(ren). Will try again later.
但我不相信這與此問題相關,正如我在先前的設定中看到的那樣。

配置(連結到圖像以節省空間)- * APC 設置,注意碎片:0% 且快取滿計數為 0。https://i.stack.imgur.com/i0TrK.png * nginx.conf

user www-data;
worker_processes  4;

error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
    use epoll;
# multi_accept on;
}
http {
include       /etc/nginx/mime.types;
server_names_hash_bucket_size 64;
access_log off;  #/var/log/nginx/access.log;

sendfile        on;
#tcp_nopush     on;

keepalive_timeout  0;
#keepalive_timeout  65;
tcp_nodelay        on;

gzip  on;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
  • 典型站點配置包含在 nginx.conf 中https://i.stack.imgur.com/I3Y4N.png
  • 我的 php5-fpm.conf 是預設的,除了 pm.max_children = 30 和 pm.max_children = 10。
  • 我的 php5 配置是預設的,僅編輯與 sendmail/postfix 相關
  • ulimit -n 顯示 1024

有什麼幫助 - 我從中得到的唯一緩解就是將兩個較繁忙的站點之一移至其自己的 VPS。顯然,我希望將所有網站放在一個 vps 上,因為系統擁有足夠的資源。我是否在某處達到了開啟文件限制?我懷疑它可能與 php 相關的東西有關。

非常有信心這是某個地方的配置問題。但不太確定它可能是什麼,並且在發布此問題之前花了 48 小時嘗試研究。

答案1

升級到 PHP >=5.3.4 應該會有所幫助,因為看來您已經被這個錯誤所困擾:https://bugs.php.net/bug.php?id=53028

相關內容