![负载较高时出现间歇性错误 404。(nginx/php/apc/mysql)](https://linux22.com/image/567804/%E8%B4%9F%E8%BD%BD%E8%BE%83%E9%AB%98%E6%97%B6%E5%87%BA%E7%8E%B0%E9%97%B4%E6%AD%87%E6%80%A7%E9%94%99%E8%AF%AF%20404%E3%80%82%EF%BC%88nginx%2Fphp%2Fapc%2Fmysql%EF%BC%89.png)
我有一个 4 核 CPU VPS,内存为 4GB。它运行的是 Ubuntu 10.04,带有 nginx/0.7.65、PHP 5.3.2 和 MySQL。我使用 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