J'ai un serveur 64 bits mais seulement 256 Mo de RAM. Donc, je suis passé au serveur nginx avec fast-cgi pour me connecter à PHP. J'ai PHP 5.3.6 en cours d'exécution.
Le problème est qu'après tous les deux ou trois jours lorsque j'essaie d'accéder à n'importe quelle page PHP, j'obtiens une erreur interne du serveur. La seule solution consiste à redémarrer php-fpm manuellement. Cela signifie que j'aurais dû définir des paramètres incorrects, ce qui provoque son étranglement. Ci-dessous, j'ai énuméré les configs pertinentes.
/etc/php-fpm.conf: -
include=/etc/php-fpm.d/*.conf
log_level = error
;emergency_restart_threshold = 0
;emergency_restart_interval = 0
;process_control_timeout = 0
/etc/php-fpm.d/www.conf: -
[www]
pm = dynamic
pm.max_children = 10
pm.start_servers = 3
pm.min_spare_servers = 2
pm.max_spare_servers = 5
pm.max_requests = 500
/etc/nginx/php.conf: -
location ~ \.php {
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
fastcgi_pass unix:---some-location---;
}
Mise à jour 1
Et j'ai quatre processus nginx en cours d'exécution. En moyenne, chaque processus php-fpm prend 35 Mo de RAM (taille de mémoire virtuelle 320 Mo chacun). J'ai également un processus MySql en cours d'exécution.
Update 2
J'ai oublié de coller les journaux.
journal des erreurs php-fpm: -
WARNING: [pool www] seems busy (you may need to increase start_servers, or min/max_spare_servers), spawning 8 children, there are 1 idle, and 7 total children
WARNING: [pool www] server reached max_children setting (10), consider raising it
NOTICE: Terminating ...
php-fpm www.error log: -
PHP Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 122880 bytes) in /home/webadmin/blog.applegrew.com/html/wordpress/wp-content/plugins/jetpack/class.jetpack-signature.php on line 137
PHP Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 122880 bytes) in /home/webadmin/blog.applegrew.com/html/wordpress/wp-content/plugins/jetpack/class.jetpack-signature.php on line 137
PHP Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 122880 bytes) in /home/webadmin/blog.applegrew.com/html/wordpress/wp-content/plugins/jetpack/class.jetpack-signature.php on line 137
la source
free
et je commence. Je divise cette mémoire libre par 35 pour obtenir lemax_children value
. Je n'ai pas compris l'objet du dernier paragraphe.max_children
à 3.free
prenez-vous en compte? Celui de la ligne '- / + buffers / cache' qui est utilisé pour le cache disque, mais en fait gratuit pour les applications?Votre configuration php-fpm semble OK.
Mais le serveur que vous utilisez est quelque peu limité en ressources. Il est évident d'après les journaux que les processus PHP épuisent la mémoire disponible.
Ajout aux suggestions fournies par cyberx86:
Vous pouvez essayer d'éditer le paramètre memory_limit dans le fichier php.ini (voir ici ) (même si je ne suis pas sûr que cela fera beaucoup de bien)
Compte tenu de la petite quantité de mémoire système, je pense que vous devriez sérieusement envisager de passer à un système d'exploitation 32 bits. L'utilisation d'un système d'exploitation x64 vous fait du mal plutôt que d'être bénéfique.
Si vous n'utilisez pas le stockage InnoDB dans votre base de données MySql, vous pouvez également envisager de désactiver InnoDB dans votre my.cnf - cela économisera encore 100 Mo de RAM.
Lowendbox a un excellent tutoriel sur la façon d'optimiser les serveurs pour une configuration à faible mémoire.
la source
Une commande très pratique pour trouver la mémoire prise par php:
Ensuite, vous divisez la RAM que vous souhaitez consacrer à php, et vous avez votre valeur max_children!
En outre, vous pouvez surveiller manuellement (vous devez configurer le statut php du point de terminaison) ou avec Nagios.
la source
awk: fatal: division by zero attempted
ps --no-headers -o "rss,cmd" | grep php5-fpm | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"M") }'
options -C ne fonctionnent pas.