Php-fpm:随时间推移的 CPU 使用率异常

Php-fpm: abnormal cpu usage over time

提问人:Sbraaa 提问时间:11/2/2023 更新时间:11/2/2023 访问量:72

问:

我在 Ubuntu 18.04.3 LTS VM (VM Ware vSphere Hypervisor) 上运行 apache (2.4.29) + php-fpm (php 7.2) + memcached,具有 16 个 vcore (2Ghz) 和 16GB RAM。

Mysql 5.7 在单独的服务器上和 php-fpm 设置为:

pm = 动态 pm.max_children = 256 pm.start_servers = 110 pm.min_spare_servers = 32 pm.max_spare_servers = 150

(这是相当过度配置的)

最大 RAM 使用率低于 15%(约 2.5GB)

自 3 个月以来,我一直在与一种奇怪的行为作斗争:全局 cpu 使用率随着时间的推移而增加,执行相同的过程(主要是 php-fpm),直到使用率超过 100%(有时为 150%),导致服务器变得不可用(并在 vsphere 仪表板上生成大量警报事件!

这种行为通常需要 3/4 天:第一天一切正常,CPU 使用率低于 40%,然后第二天它增加了 10/20%,直到第三天或第四天超过 100%,唯一的解决方案是重新启动 VM。

我看到的是每天php-fpm进程请求更多的cpu!

连接的用户数量每天都是一样的,而且每分钟的请求量每天都不会改变。用顶部看,我看到的进程数总是相同(大约 450 个),没有僵尸。无内存泄漏(始终低于活动使用量的 15%)。

我首先检查Mysql作为瓶颈源,但Mysql响应速度很快,并且托管它的VM始终低于全局CPU使用率的30%。

然后我仔细分析了每个可用的日志(apache 访问和错误日志以及 php-fpm 日志),寻找一些奇怪的东西,但我没有发现任何奇怪的东西:总是相同的路由!没有DOS攻击或请求过载的痕迹。

查找系统日志(系统日志、消息等)一无所获。

自从我看到这个问题以来,我从未更新过操作系统(这是相当更新的):vmware 工具已更新,并且没有进行任何 php 源变体。

我尝试重新启动单个服务(php-fpm、apache、memcached)以找到这种荒谬行为的根源,但似乎唯一的解决方案是重新启动 VM。

看来泄漏的资源是CPU!

我试图联系托管 VM 的提供商,但(显然)他们没有检测到节点上的任何问题。矛盾的是,每 3 天重新启动一次 VM 就足够了,而且没有问题......荒谬!

任何建议将不胜感激!

谢谢

php apache memcached ubuntu-18.04

评论

0赞 apokryfos 11/2/2023
您可以尝试将 pm.max_requests 配置选项设置为确保进程每隔几个小时回收一次,看看是否有帮助。
0赞 Sbraaa 11/2/2023
谢谢,我怀疑这可能是一个可能的解决方案。阻止我更早执行此操作的原因是未检测到内存泄漏。如果我不介意,此选项的主要优点是防止内存泄漏
0赞 Wilson Hauck 11/3/2023
请发布完整的 TEXT php-fpm 配置文件以供分析。您只有 16 个内核,并且可能正在“过度驱动”列出的值的进程。
0赞 Wilson Hauck 11/3/2023
请提供其他数据库信息请求。操作系统、版本?MySQL主机服务器上是否有任何SSD或NVME设备?在 justpaste.it 上发布 TEXT 数据并分享链接。从您的 SSH 登录根目录中,文本结果如下: A) 从 information_schema.tables 中选择 COUNT(*);B) 显示全球状态;至少 24 小时后正常运行时间 C) 显示全局变量;D) 显示完整的流程列表;E) 状态;不是 SHOW STATUS,只是 STATUS;G) 显示发动机 INNODB 状态;用于服务器工作负载调优分析,以提供性能调优建议。
0赞 Wilson Hauck 11/3/2023
在 justpaste.it 上发布 TEXT 数据并分享链接。其他非常有用的操作系统信息包括 - please, htop 1st page, if available, TERMINATE, top -b -n 1 for most active apps, top -b -n 1 -H for details about your mysql threads memory and cpu usage, ulimit -a for list of limits, iostat -xm 5 3 for IOPS by device & core/cpu count, df -h for Used - Free space by device, df -i 用于按设备的 inode 信息,free -h 用于 Used - free Mem: 和 Swap:,cat /proc/meminfo 包含 VMallocUused,用于服务器工作负载调优分析以提供建议。

答: 暂无答案