2 votes

Erreur 404 intermittente lors de charges élevées. (nginx/php/apc/mysql)

J'ai un serveur virtuel à 4 cœurs de processeur avec 4 Go de mémoire vive. Il fonctionne sous Ubuntu 10.04 avec nginx/0.7.65, PHP 5.3.2 et MySQL. J'utilise php5-fpm pour la communication avec nginx. J'ai aussi php5-apc pour compléter le cache de php.

Ce système gère quatre sites et affiche environ 2,5 millions de pages vues par jour.

Introduction au problème - Les sites affichent par intermittence l'erreur 404 lors du chargement d'une page. Cela se produit potentiellement sur chaque page, et je peux m'asseoir là et rafraîchir encore et encore et cela se produira en moyenne une fois toutes les sept à dix fois.

Ce que j'ai essayé - Mettre à jour Ubuntu et nginx, jouer avec les configurations de php et nginx. Ce problème a été reproduit sur Ubuntu 11.10 et nginx/1.0.5.

Journaux remarquables - Nginx error.log et access.log ne montrent rien d'extraordinaire, mais signalent l'émission d'un 404. php5-fpm.log affiche :
Nov 20 21:47:45.640003 [ERROR] [pool www] unable to retrieve process activity of one or more child(ren). Will try again later.
mais je ne suis pas convaincu que cela soit lié à ce problème, car je l'ai déjà vu dans des configurations précédentes.

Configurations (liens vers des images pour économiser de l'espace) - * Paramètres APC, notez Fragmentation : 0% et le nombre de caches pleins est de 0. http://i.imgur.com/fV8hU.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/*;
}
  • configuration typique du site incluse dans nginx.conf http://i.imgur.com/9Vmhj.png
  • mon php5-fpm.conf est par défaut, sauf pm.max_children = 30 de pm.max_children = 10.
  • ma configuration php5 est par défaut, les seules modifications sont liées à sendmail/postfix
  • ulimit -n montre 1024

Ce qui aide - Le seul soulagement que j'ai eu à ce sujet est de déplacer l'un des deux sites les plus occupés vers son propre VPS. Évidemment, j'aimerais avoir tous les sites sur un seul VPS, car le système a plus que des ressources suffisantes. Est-ce que je me heurte à une limite de fichiers ouverts quelque part ? Je soupçonne que cela peut avoir quelque chose à voir avec quelque chose lié à php.

Je suis convaincu que c'est un problème de configuration quelque part. Je ne suis pas sûr de ce que cela peut être, et j'ai passé 48 heures à essayer de faire des recherches avant de poster cette question.

0voto

Roman Points 3815

La mise à jour vers PHP >=5.3.4 devrait vous aider, car il semble que vous ayez été victime de ce bug : https://bugs.php.net/bug.php?id=53028

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X