
问题场景:CPU 突然打满,网站响应变慢
电商网站服务器 CPU 占用率过高怎么办?本指南帮助你快速定位 Nginx、PHP-FPM 和 MySQL 的性能瓶颈,并提供可落地的解决方案。如果你遇到 CPU 飙升到 90% 以上、网站响应变慢的问题,按照本文的排查流程可以高效解决。
第一步:快速确认 CPU 负载来源
当发现 CPU 占用率异常时,先确认负载的具体来源:
top -bn1 | head -20
ps aux --sort=-%cpu | head -20
uptime
通过 top 命令查看 %Cpu(s) 指标:
– us(user):用户空间进程消耗的 CPU,通常是 PHP 等应用进程
– sy(system):内核空间消耗的 CPU
– wa(iowait):等待 I/O 的时间
关键判断:如果 us 过高(>70%),重点排查 PHP-FPM;如果 wa 过高(>40%),检查磁盘性能或数据库查询。

第二步:Nginx 层排查与优化
Nginx 作为反向代理,通常 CPU 占用不高,但配置不当也可能成为瓶颈。
2.1 检查 Nginx 状态
ps aux | grep nginx
netstat -an | grep :80 | wc -l
tail -100 /var/log/nginx/error.log
2.2 优化 Nginx 配置
遭遇高并发攻击流量时,Nginx 优化和 WAF 防护需要配合进行,可参考 CC 攻击防护完整指南:WAF 规则、限速与源站应急配置 同步部署限速规则。
worker_processes auto;
worker_rlimit_nofile 65535;
events {
worker_connections 4096;
multi_accept on;
use epoll;
}
http {
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m;
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
gzip on;
}
确保静态资源由 Nginx 直接处理:
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 7d;
access_log off;
}
第三步:PHP-FPM 深度排查与调优
对于 PHP 电商网站,PHP-FPM 通常是 CPU 占用的主要原因。
3.1 查看 PHP-FPM 状态
ps aux | grep php-fpm | wc -l
tail -100 /var/log/php-fpm/slow.log
慢日志显示哪个脚本执行慢、调用了哪些函数、数据库查询耗时。
3.2 优化 PHP-FPM 配置
pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
pm.max_requests = 500
request_terminate_timeout = 60s
request_slowlog_timeout = 5s
计算建议:8GB 内存服务器,单个进程约 80MB,pm.max_children 建议设置为 50-70。
3.3 代码层优化
- 减少数据库查询次数,使用缓存
- 避免在循环中查询数据库
- 开启 PHP OPcache 提升性能
opcache.enable=1
opcache.memory_consumption=256
opcache.max_accelerated_files=10000

第四步:MySQL 性能分析与优化
数据库查询往往是 CPU 打满的根本原因。
4.1 查看 MySQL 负载
mysql -e "SHOW PROCESSLIST;"
tail -100 /var/log/mysql/slow.log
4.2 开启慢查询日志
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 2;
分析慢查询,添加索引优化:
ALTER TABLE orders ADD INDEX idx_customer_status (customer_id, status);
4.3 优化 MySQL 配置
[mysqld]
max_connections = 500
innodb_buffer_pool_size = 4G
innodb_buffer_pool_instances = 8
innodb_log_file_size = 512M
tmp_table_size = 256M
max_heap_table_size = 256M
4.4 使用 EXPLAIN 分析
EXPLAIN SELECT * FROM orders WHERE customer_id = 12345;
重点关注:type 是否为 ALL(全表扫描)、key 是否使用索引、rows 扫描行数。

第五步:综合排查流程
- 监控告警:设置 CPU 阈值告警(80% 持续 5 分钟)
- 快速定位:使用
top、ps确定占用 CPU 的进程 - 日志分析:查看 Nginx、PHP-FPM、MySQL 日志;若发现磁盘 IO 等待(
wa)持续偏高,可参考 VPS 服务器磁盘 IO 抖动处理:存储基线测试与主机性能治理 做存储层排查 - 实施优化:调整配置或优化代码
- 验证效果:监控优化后的 CPU 使用率
推荐监控工具
- htop:直观的进程监控
- iotop:监控磁盘 I/O
- nethogs:监控网络带宽(网络数据传输能力)
- PMM:MySQL 性能监控
常见问题解决方案
问题 1:PHP-FPM 进程数过多
解决方案:
1. 根据内存重新计算 pm.max_children
2. 检查慢请求
3. 使用 pm = ondemand 模式
问题 2:MySQL 查询导致高负载
解决方案:
1. 分析慢查询日志,添加索引
2. 优化查询语句
3. 增加 innodb_buffer_pool_size
问题 3:Nginx 转发过多请求
解决方案:
1. 确保静态资源直接处理
2. 开启 Nginx 缓存
3. 使用 CDN(内容分发网络)加速
总结与下一步行动建议
通过系统化的排查流程,你可以快速定位电商网站 CPU 打满的根因。本文涵盖了从 Nginx 到 PHP-FPM 再到 MySQL 的完整链路。
核心建议:
1. 建立监控体系,设置实时告警(建议阈值:CPU 80% 持续 5 分钟)
2. 每周审查慢日志,识别性能瓶颈
3. 提前规划服务器扩容,避免高峰期资源不足;可参考 VPS 与独立服务器分层部署指南:数据库分离与缓存架构 制定分层扩容方案
4. 代码发布前进行性能审查,避免低效查询上线
推荐工具:
– htop:直观的进程监控,支持颜色区分 CPU/内存占用
– iotop:监控磁盘 I/O,识别读写瓶颈
– PMM(Percona Monitoring and Management):MySQL 性能监控与可视化
如果你需要更深入的服务器优化服务,可以考虑专业的运维支持。对于稳定性要求较高的电商场景,建议选择配备完善监控工具的 VPS(虚拟专用服务器)方案,确保能够实时掌握服务器状态。
总结:服务器 CPU 优化需要持续监控和迭代改进。建议先从监控告警入手,再针对瓶颈实施优化,最后验证效果。更多关于服务器性能优化的实践,可参考 CC 攻击防护完整指南:WAF 规则、限速与源站应急配置 和 跨境业务 DNS(域名系统)解析慢优化:权威 DNS、TTL 与多线路服务器调度。如果你需要稳定的服务器环境,Hostease 提供的 VPS(虚拟专用服务器)方案配备完善的监控工具,适合电商等对稳定性要求较高的场景。