PHP教程

CPU 100%,PHP-FPM日志显示 child xxx exited with code 0 after 7892.500353 seconds from start

本文主要是介绍CPU 100%,PHP-FPM日志显示 child xxx exited with code 0 after 7892.500353 seconds from start,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

服务器出现CPU占用100%,PHP-FPM日志不断显示

child xxx exited on signal 15 (SIGTERM) after xxx seconds from start

child xxx started

child xxx exited with code 0 after 0 seconds from start

说明PHP-FPM进程在不断创建子进程,但一创建就死掉了

还会有提示

seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers)

说明启动的子进程数量已经到底最大值

 

但通过 ps -ef |grep "php-fpm"|grep "pool"|wc -l命令统计php-fpm进程数量,却是0个,说明进程确实都是刚创建就死掉了,而且是瞬时创建的子进程数量都超过了最大值,只不过立马有死掉了

 

因为不停的创建进程,导致了CPU耗尽

 

使用strace在服务器正常的时候开始跟踪php-fpm进程,并记录时间戳

screen -S strace

strace -s 1024 -tt -T -f -o strace.log -p 某个php-fpm子进程的pid

 

机器死掉后重启,查看阿里云系统监控,找到CPU100%的开始时间,查看strace.log,使用行号定位到CPU100%的那段时间

less -N +行号 strace.log

发现有Too many open files的错误,说明是系统的打开文件描述符已经超过上限,PHP-FPM进程不断重启就是因为没有文件描述符可用导致的

ulimit -a #查看各类用户进程限制,发现最大打开文件描述符数量是65535

...
open files                      (-n) 65535
max user processes              (-u) 65535
...

lsof | wc -l #查看当前已打开文件描述符数量,发现已经快到最大值了

589234

lsof |awk '{print $1}' |sort |uniq -c |sort -nr |head -n10 #查看占用文件描述符最多的10个进程

17821 crond

16784 sendmail

16765 maildrop

...

发现是crond和crond相关的邮件发送进程占用了大量文件描述符

查看邮件日志

less /var/log/maillog

发现大量报错

postfix/postdrop[16261]: warning: mail_queue_enter: create file maildrop/756739.16261: No such file or directory

说明邮件无法正常发送,postfix服务出现了邮件投递错误

 

systemctl status postfix #检查postfix服务状态,发现服务没有启动,且是禁用状态

systemctl start postfix #启动服务

lsof | wc -l #检查打开文件描述符数量,发现已经下降,问题解决

systemctl enable postfix #最后设置postfix自动启动

 

这篇关于CPU 100%,PHP-FPM日志显示 child xxx exited with code 0 after 7892.500353 seconds from start的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!