直接用 Linux 原生命令可分别监控 Nginx worker 和 PHP-FPM 子进程的 CPU 与内存:Nginx 用 ps -o pid,%cpu,rss,comm -C nginx | grep worker,PHP-FPM 用 ps -ylC php-fpm --sort:rss 及 awk 计算平均内存,并结合 lsof、/proc/PID/status 等定位异常。

直接看每个 worker 和 php-fpm 子进程的 CPU 与内存占用,不依赖图形界面或复杂平台,用 Linux 原生命令组合就能做到。关键是分清两类进程:Nginx 的 worker 进程 和 PHP-FPM 的 pool 子进程,它们各自独立调度、资源隔离,需分开查。
查 Nginx worker 进程的 CPU 和内存
所有 worker 都是普通 Linux 进程,名称为 nginx: worker process:
- 列出全部 worker 及其 RSS(常驻内存)和 CPU 使用率:
ps -o pid,%cpu,rss,comm -C nginx | grep worker - 按 CPU 占用从高到低排序:
ps -o pid,%cpu,rss,comm -C nginx | grep worker | sort -k2 -nr - 持续观察某个高负载 worker 的实时变化(替换
PID):top -p PID -d 1
查 PHP-FPM 子进程的 CPU 和内存
PHP-FPM 的子进程默认名为 php-fpm:(注意末尾有空格),不同 pool 可能显示为 php-fpm: pool www 等:
- 按内存使用量(RSS)降序列出所有 php-fpm 进程:
ps -ylC php-fpm --sort:rss - 只看 RSS 和命令列,并算出平均内存(单位 MB):
ps --no-headers -o "rss,cmd" -C php-fpm | awk '{sum += $1} END {printf "%.0fM\n", sum/NR/1024}' - 查单个进程的详细资源(如 PID 12345):
ps -p 12345 -o pid,%cpu,%mem,rss,vsz,etime,comm
对比分析异常进程的实用技巧
光看数字不够,要结合上下文判断是否真有问题:
立即学习“PHP免费学习笔记(深入)”;
- 如果某个 worker 的 %CPU 持续 >85%,且
lsof -p PID | wc -l显示连接数远高于其他 worker(比如差 3 倍以上),可能是长连接卡住或后端阻塞 - 如果某个 php-fpm 进程 RSS 达到 80MB 以上(远超平均值 11–24MB),同时
etime(运行秒数)很长,可能有内存泄漏或大文件未释放 - 用
sudo cat /proc/PID/status | grep -E 'VmRSS|Threads'查更细的内存映射和线程数,辅助定位
简单定时检查脚本思路
不用上 Prometheus 也能做基础巡检。例如每 2 分钟执行一次:
- 检查 nginx worker 数是否等于
worker_processes配置值 - 取 CPU 最高的 worker,若连续 3 次 >90%,发邮件告警
- 对 php-fpm 执行
ps -ylC php-fpm --sort:rss | tail -5,若最大 RSS 超过 60MB 就记录



















