• CPU 100%,PHPFPM日志显示 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自动启动

  • 相关阅读:
    配置ssh免密登录
    idea打开项目定位到选择项目的位置
    MySQL decimal、numeric数据类型介绍
    C++ string::size_type类型
    Java Oracle存储过程问题
    PLSQL Developer简单使用教程
    ed2k如何下载
    老毛桃U盘启动盘制作工具安装教程
    Hibernate current_session_context_class的事务说明
    java openSession和getCurrentSession的比较
  • 原文地址:https://www.cnblogs.com/lbnnbs/p/15960670.html
Copyright © 2020-2023  润新知