服务器CPU占用率持续100%,负载飙升。排查发现Nginx-UI站点检查器每30秒高频请求,导致作为phpMyAdmin依赖自动安装的Apache2进程被占满。通过卸载Apache2及phpMyAdmin或降低检查频率,CPU恢复正常。
问题现象
今天晚上发现服务器 CPU 占用率持续 100%,负载从正常的 1-2 飙升到 13-17,系统响应缓慢。
%Cpu(s): 99.3 us, 0.7 sy, 0.0 id
load average: 13.29, 10.42, 6.01
排查过程
1. 查看高 CPU 进程
使用 top 命令查看占用 CPU 最高的进程:
top -bn1 | head -20
# 或者按 CPU 排序
ps aux --sort=-%cpu | head -15
结果发现多个 apache2 进程占满 CPU:
www-data 4117589 98.9% apache2 -DFOREGROUND
www-data 4117590 98.7% apache2 -DFOREGROUND
www-data 4117566 67.6% apache2 -DFOREGROUND
...
2. 检查访问日志
查看 Nginx 访问日志,发现大量来自本地的请求:
tail -50 /var/log/nginx/access.log | grep "127.0.0.1"
127.0.0.1 "GET / HTTP/1.1" 200 "Nginx-UI Site Checker/1.0"
127.0.0.1 "GET / HTTP/1.1" 200 "Nginx-UI Enhanced Checker/2.0"
127.0.0.1 "GET / HTTP/1.1" 200 "Nginx-UI Site Checker/1.0"
...
同一秒内有 10+ 条请求,每 30 秒一次。
3. 分析原因
检查后发现:
- Nginx-UI 站点检查器每 30 秒检查所有站点
- 请求被代理到后端的 Apache2(端口 9080)
- Apache2 进程数有限,被频繁请求占满
4. 追溯 Apache2 来源
检查 Apache2 安装历史:
# 检查安装时间
ls -la /var/log/apache2/
# 检查依赖关系
dpkg -l | grep apache
发现 Apache2 是安装 phpMyAdmin 时作为依赖自动安装的(libapache2-mod-php8.3)。
解决方案
方案一:停止 Apache2 服务
sudo systemctl stop apache2
sudo systemctl disable apache2
方案二:完全卸载(推荐)
如果不需要 phpMyAdmin 和 Apache2,可以完全卸载:
# 停止服务
sudo systemctl stop apache2
sudo systemctl disable apache2
# 卸载 phpMyAdmin
sudo apt remove --purge phpmyadmin -y
# 卸载 Apache2 PHP 模块
sudo apt remove --purge libapache2-mod-php8.3 -y
# 卸载 Apache2
sudo apt remove --purge apache2 apache2-bin apache2-data apache2-utils -y
# 清理残留
sudo apt autoremove --purge -y
# 删除链接
sudo rm -f /var/www/html/phpmyadmin
方案三:调整 Nginx-UI 检查频率
如果需要保留站点检查功能,可以在 Nginx-UI 界面中:
- 打开 Nginx-UI(默认端口 9000)
- 找到「站点监控」或「Site Checker」设置
- 将检查间隔从 30 秒改为 5-10 分钟
验证结果
卸载后 CPU 占用率恢复正常:
top -bn1 | head -5
%Cpu(s): 0.8 us, 0.8 sy, 98.5 id
load average: 0.81, 0.63, 1.59
总结
本次 CPU 100% 问题的根本原因是:
- 安装 phpMyAdmin 时自动安装了 Apache2
- Nginx-UI 站点检查频率过高(每 30 秒)
- Apache2 进程被大量本地请求占满
解决方法:卸载不需要的 phpMyAdmin 和 Apache2,或降低 Nginx-UI 检查频率。
排查 CPU 问题常用命令
| 命令 | 作用 |
|---|---|
top |
实时查看 CPU 使用率 |
htop |
更友好的进程查看(需安装) |
ps aux --sort=-%cpu |
按 CPU 排序显示进程 |
ss -tlnp |
查看端口监听情况 |
tail -f /var/log/nginx/access.log |
实时查看访问日志 |
systemctl status 服务名 |
查看服务状态 |
预防措施
- 安装软件时注意依赖关系,避免安装不需要的服务
- 定期检查系统运行的服务:
systemctl list-units --type=service --state=running - 监控工具的检查频率不要设置太高
- 使用
nginx+php-fpm替代 Apache 处理 PHP

暂无评论
要发表评论,您必须先 登录