Периодическая ошибка 404 при высоких нагрузках. (nginx/php/apc/mysql)

Периодическая ошибка 404 при высоких нагрузках. (nginx/php/apc/mysql)

У меня есть 4-ядерный VPS с 4 ГБ оперативной памяти. Он работает под управлением Ubuntu 10.04 с nginx/0.7.65, PHP 5.3.2 и MySQL. Я использую php5-fpm для связи с nginx. У меня также есть php5-apc, дополняющий кэширование php.

Эта система управляет четырьмя сайтами и показывает около 2,5 миллионов просмотров страниц в день.

Введение в проблему - Сайты периодически показывают ошибку 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.confhttps://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

Связанный контент