php进程导致服务器cpu占用100%问题追查过程

今天早上,zabbix服务器监控突然发出报警,提示CPU占用过高。
php进程导致服务器cpu占用100%问题追查过程
以下为追查原因的过程,做此记录,方便遇到同样问题的朋友进行排查

查看占用cpu高的进程

使用top命令找出cpu占用过高的进程,如图所示,查找TIME+那列,之前占用过高的时候,时间达到了几十分钟。进程占用cpu高,一般是由于进程长时间占用cpu,又没有主动释放占用。
php进程导致服务器cpu占用100%问题追查过程
接着按下键盘的C键,会出现详细信息,可以使用sudo gdb -p 端口号找到具体出现问题的代码
php进程导致服务器cpu占用100%问题追查过程
分析信息,找出是因为supervisor进程导致CPU占用过高,里面处理的主要任务是消耗lumen的redis队列,队列中主要处理curl请求,在出现问题时,supervisor默认超时时间为30S,分析问题大概就出现在这里,因为大量curl超时堆积,导致进程无法完成退出

解决问题

分析出是因为curl的问题,首页将supervisor超时时间设置为3S,然后在代码逻辑中,设置适当的curl请求超时时间,设置完成后,重新加载supervisor配置文件,cpu占用成功降了下来:
php进程导致服务器cpu占用100%问题追查过程