排查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字段,查看里面的任务列表,有没有奇怪的任务。
- 用WP-CLI(如果已安装)跑
- 自定义PHP应用的后台脚本:检查你的自定义应用有没有常驻后台的脚本、或者定时任务(比如用
nohup启动的脚本),有没有逻辑漏洞导致资源无法释放。
3. 启用PHP慢日志和错误日志
有时候CPU高是因为某些脚本一直在「慢运行」,但单个进程CPU占比不高,top看不出来。你可以修改PHP-FPM的配置,启用慢日志:
- 编辑
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 - 重启PHP-FPM:
service php7.0-fpm restart(如果容器允许操作,或者通过Azure门户重启应用) - 过几个小时查看
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
相关产品推荐
相关产品推荐

