CPU 100%,PHP-FPM日志顯示 child xxx exited with code 0 after xxxx 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自動啟動

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM