2013-03-12 4 views
4

J'utilise Nginx + PHP-FPM avec php 5.3.6 et ça marchait bien pendant des semaines. Soudain, chaque enfant PHP-FPM a commencé à prendre trop de mémoire. Au cours des semaines initiales, chaque enfant PHP-FPM prenait 3MB et maintenant quelques enfants prennent 700MB. Quelqu'un peut-il guider à ce sujet?PHP-FPM prenant trop de mémoire

This script I used to get memory usage by child pid 
http://www.pixelbeat.org/scripts/ps_mem.py. 

It could be verified by 'top' method too 

top output:: 
------------------------------ 
------------------------------ 
28419 daemon 20 0 844m 757m 4200 S 0 6.4 0:14.27 php-fpm               

16788 daemon 20 0 700m 614m 4632 S 0 5.2 0:28.34 php-fpm               

29450 daemon 20 0 669m 581m 3548 S 0 4.9 0:08.31 php-fpm               

17881 daemon 20 0 642m 556m 4108 S 0 4.7 0:14.83 php-fpm               

19048 daemon 20 0 642m 555m 4108 S 0 4.7 0:08.86 php-fpm 
11956 daemon 20 0 97612 10m 5476 S 4 0.1 0:39.57 php-fpm               
11993 daemon 20 0 97560 10m 5188 S 4 0.1 0:39.18 php-fpm               
11925 daemon 20 0 97328 10m 5144 D 3 0.1 0:38.68 php-fpm               
11953 daemon 20 0 97748 10m 5172 S 4 0.1 0:38.51 php-fpm 

php-fpm.conf:

/etc/php-fpm/php-fpm.conf 
listen = 127.0.0.1:9000 
user = daemon 
group = daemon 

pm = dynamic 
pm.max_children = 2000 
pm.start_servers = 50 
pm.min_spare_servers = 40 
pm.max_spare_servers = 90 
pm.max_requests = 10000 

suivants sont les plus entrées de débogage:

pmap ::

pmap 28419 
0000000000b52000  96K rw--- [ anon ] 
0000000001a49000 1668K rw--- [ anon ] 
0000000001bea000 208K rw--- [ anon ] 
0000000001c1e000 770476K rw--- [ anon ] 

strace ::

strace -p 28419 
Process 28419 attached - interrupt to quit 
restart_syscall(<... resuming interrupted call ...>) = 0 
recvfrom(4, 0x1bda1d0, 8196, 64, 0, 0) = -1 EAGAIN (Resource temporarily unavailable) 
poll([{fd=4, events=POLLIN}], 1, 5000) = 0 (Timeout) 
recvfrom(4, 0x1bda1d0, 8196, 64, 0, 0) = -1 EAGAIN (Resource temporarily unavailable) 
poll([{fd=4, events=POLLIN}], 1, 5000^C <unfinished ...> 
+0

peut être un commentaire trop ignorant - une chance que vos scripts PHP ont commencé à manger trop de mémoire - en chargeant trop de données par exemple? –

+0

Votre site est-il occupé? Quel est le nombre de demandes par minute? Cela pourrait causer une fuite de mémoire dans l'une de vos bibliothèques php, ce qui est courant en php. :) –

+0

Avez-vous vérifié votre slowlog? C'est défini dans votre fichier de configuration php-fpm. –

Répondre

6

Essayez d'abaisser pm.max_requests à 1000, puis de l'abaisser si nécessaire. Cela va tuer les processus enfants après 1000 demandes. Il y a beaucoup de variables à considérer quand php-fpm monopolise des ressources. Je l'utilise depuis un certain temps et je n'ai pas vu ce niveau de consommation de mémoire. Ma conjecture serait un problème de code, ou un script d'élimination.

+0

à droite. C'est l'outil principal pour lutter contre les fuites de mémoire des bibliothèques tierces. –

+3

assurez-vous de lire ceci! http://linuxbsdos.com/2015/02/17/how-to-reduce-php-fpm-php5-fpm-ram-usage-by-about-50/ – orszaczky

Questions connexes