You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

排查Azure WebApp(Linux)高CPU使用率异常问题

排查Azure WebApp(Linux)PHP7.0容器CPU缓慢上升问题

看起来你遇到的是那种「无明显诱因」的CPU缓慢爬升问题——重置后正常,然后慢慢涨,还和请求量没关系,这种情况通常不是前台请求直接导致的,大概率是后台进程、配置不合理或者隐性的资源泄漏问题。结合你的环境(PHP7.0、Apache、WordPress+自定义PHP应用),给你几个针对性的排查方向:

1. 深挖PHP-FPM的进程状态

Linux版Azure WebApp的PHP容器默认是Apache+PHP-FPM组合,有时候单个进程CPU占比不高,但进程数量持续增长会累积出高CPU。你可以通过以下命令排查:

  • 查看当前PHP-FPM进程数:ps aux | grep php-fpm | wc -l,隔10分钟再跑一次,如果数字一直在涨,说明进程没被正常回收。
  • 查看PHP-FPM的配置文件(通常在/etc/php/7.0/fpm/pool.d/www.conf),重点关注这几个参数:
    • pm:进程管理模式(dynamic/ondemand/static),如果是dynamic,检查pm.max_children、pm.start_servers、pm.min_spare_servers、pm.max_spare_servers是否合理——比如2核实例的话,max_children建议不超过20,避免进程过多抢占CPU。
    • pm.process_idle_timeout:如果是ondemand模式,闲置进程超时回收时间,设置太短会频繁创建进程,太长会导致闲置进程占资源。

2. 排查隐藏的后台任务

既然CPU和请求量无关,大概率是后台在跑东西:

  • WordPress Cron任务:WordPress的Cron靠前台请求触发,如果有异常任务(比如死循环的自定义Cron、插件自带的重复任务),会不断占用资源。你可以:
    • 用WP-CLI(如果已安装)跑wp cron event list,查看有没有重复执行的异常事件;
    • 临时禁用所有插件,看CPU是否还会上升,排查是不是插件导致的;
    • 直接去数据库的wp_options表,找到cron字段,查看里面的任务列表,有没有奇怪的任务。
  • 自定义PHP应用的后台脚本:检查你的自定义应用有没有常驻后台的脚本、或者定时任务(比如用nohup启动的脚本),有没有逻辑漏洞导致资源无法释放。

3. 启用PHP慢日志和错误日志

有时候CPU高是因为某些脚本一直在「慢运行」,但单个进程CPU占比不高,top看不出来。你可以修改PHP-FPM的配置,启用慢日志:

  1. 编辑www.conf,添加/修改:
    php_admin_value[error_log] = /var/log/php/error.log
    php_admin_value[slowlog] = /var/log/php/slow.log
    php_admin_value[request_slowlog_timeout] = 5s
    
  2. 重启PHP-FPM:service php7.0-fpm restart(如果容器允许操作,或者通过Azure门户重启应用)
  3. 过几个小时查看slow.log,里面会记录运行超过5秒的脚本,这些很可能是CPU累积的元凶。

4. 检查Apache的MPM配置

Apache的多进程模块(MPM)如果配置不合理,也会导致进程累积。你可以:

  • 查看当前启用的MPM:apache2ctl -M | grep mpm,通常是prefork或者event模式;
  • 查看MPM的配置参数(比如/etc/apache2/mods-available/mpm_prefork.conf),重点看MaxRequestWorkers、MaxConnectionsPerChild——如果MaxConnectionsPerChild设为0,进程永远不会重启,可能会累积内存/CPU泄漏,建议设为1000左右,让进程定期重启。

5. 利用Azure自带的诊断工具

Azure WebApp本身有更强大的诊断能力,比你自己用top看更全面:

  • 登录Azure门户,进入你的WebApp,打开诊断和解决问题,搜索「CPU高」相关的排查工具,里面可以查看进程的CPU使用趋势、甚至单个进程的详细资源占用;
  • 打开Application Logging (Filesystem),把日志级别设为Verbose,这样可以捕获到更多Apache和PHP的运行日志,方便排查隐性错误。

最后提一句:PHP7.0已经停止官方支持很久了,里面可能存在一些已知的内存泄漏或CPU相关的bug,如果排查下来找不到具体原因,升级到PHP7.4+(至少是仍在安全支持的版本)可能会直接解决问题。

内容的提问来源于stack exchange,提问作者John Caprez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:25:12