场景描述

主机负载异常,cpu使用率从16点多之后一直是100%,进去主机top查看内核空间占用CPU百分比在60%以上

问题原因分析

使用top命令查看cpu使用率100%,内核态占60%,平均负载达到120,通过H查看线程情况未发现异常进程<br> 通过whereis top查看top命令路径,通过ls -l /bin/top查看top命令修改日期未发现异常<br> 通过pidstat -W查看上下文切换未发现异常<br> 通过vmstat -s -S M 查看内存详细信息发现inactive占用3.4G,可用内存160M,可用内存较少<br> 通过iostat 查看io使用率较低<br> 通过tail -n 100 /var/log/message未发现相关异常<br> 通过ps -eTo stat,command |sed -n '/^[D,R]/'p 查看此刻处于可运行和不可中断态进程,发现大量php进程<br> 通过journalctl -k查看内核日志,发现文件描述符达到cgroup上限<br> 由此可以判断出cpu使用率百分百的原因是由于php服务持续不断地申请文件描述符,但系统中的文件描述符数量在15:56分时达到上限,此时php服务无法申请到所需资源开始陷入死循环导致cpu使用率100%。<br>

解决方案

通过sysctl -w fs.file-max=999999 临时修改文件描述符数量限制。并建议开发优化代码逻辑,并调整fs.file-max文件描述符数量限制以彻底解决