sathew 2024-01-13 17:44 采纳率: 0%
浏览 3

PHP-fpm占用cpu超高,怀疑是代码问题。请指正!

#VPS运行有一年多了,偶尔发现php-fpm 占用CPU 忽高忽低,经常!100%,之前一般保持在30-40左右。不知道什么原因,也比较菜,听他们的查了下。
我是这么做的:

  1. 通过 top 查找占 cpu 100% 的进程 id, 通过 ll /proc/PID/fd,查看进程在那个文件操作。
  2. 再通过 strace -p pid 查跑满 cpu 的进程 id 发现如图:

img

  • 问下AI这么回答的:/tmp/.ZendSem.pXhZSd 是 PHP 使用的一个Zend Semaphore的文件锁,根据显示它已经被删除,但是有一个PHP-FPM的进程仍然持有一个到这个文件的打开文件描述符。这可能会导致额外的内存占用,因为在Unix系统中,即使删除了文件,只要有进程仍然打开该文件,相关的数据实際上不会从磁盘上清除。

我想问下知道的大仙怎么解决这个问题-。 好担心服务器爆炸- -

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2024-01-13 20:41
    关注

    【以下回答由 GPT 生成】

    由于问题涉及到PHP-FPM的高CPU占用和与Zend Semaphore相关的文件锁被删除但仍有一个PHP-FPM进程持有打开文件描述符的情况,这可能是一个比较复杂的问题。以下是一些可能的解决方案和建议:
    
    1. 检查代码逻辑
       - 首先,检查您的代码逻辑是否存在一些可能导致CPU占用过高的问题,例如无限循环、死锁或大量的递归调用。通过代码审查和性能测试来确定是否存在这些问题。
    
    2. 优化数据库查询
       - 如果您的应用程序涉及到数据库查询,那么可能是由于数据库查询导致了CPU占用过高的问题。优化数据库查询,使用索引、减少不必要的查询,可以有效地降低CPU占用。
    
    3. 检查Zend Semaphore相关问题
       - 关于Zend Semaphore相关的文件锁被删除但仍有一个PHP-FPM进程持有打开文件描述符的情况,可以尝试升级PHP版本、Zend模块版本或者查看Zend配置文件参数,确保Zend Semaphore的相关配置正确。
    
    4. 检查PHP-FPM配置
       - 检查PHP-FPM的配置文件,确保进程管理器(pm)相关参数的设置合理,例如最大子进程数(max_children)、空闲进程数(min_spare_servers、max_spare_servers)等,避免过多或过少的进程导致CPU占用过高。
    
    5. 使用工具进行性能分析
       - 可以使用工具如xhprof、Xdebug等对PHP应用进行性能分析,找出性能瓶颈所在,进一步优化代码逻辑和性能。
    
    如果您对以上解决方案有疑问,建议您寻求专业的系统管理员或开发人员帮助,以确保服务器稳定性和安全性。
    

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 1月13日

悬赏问题

  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥20 测距传感器数据手册i2c