做网站的都遇到过这种情况——服务器突然卡死,SSH 登录都费劲,更别提网站能不能访问了。
别慌,今天分享一套实战排查思路,帮你快速定位问题进程,对症下药。
登录服务器之后,第一件事敲 top。
这个命令会实时显示当前所有进程的资源占用情况,按 CPU 和内存排序,哪些进程在"吃"你的资源,一眼就能看到。
不过 top 有个缺点:进程多的时候看起来比较乱,不够直观。
如果 top 看不清楚,用 ps 命令更直接:
ps aux --sort=-%cpu | head -30这条命令把所有进程按 CPU 使用率从高到低排序,截取前 30 条。哪个进程占 CPU 最高,直接排在最前面。
想看内存占用排名?换个参数就行:
ps aux --sort=-%mem | head -30两条命令配合用,CPU 和内存的"元凶"基本跑不掉。
拿我自己的测试服务器来说,排查下来"元凶"是 PHP-FPM。
PHP-FPM 是跑 PHP 网站的核心服务,它的问题是——默认配置下最大进程数(pm.max_children)一般设成 50。
一个 FPM 进程大约占 100M 内存,50 个进程就是 5G。如果你的服务器只有 4G 内存,不卡死才怪。
用宝塔面板的:
pm.max_children⚠️ 注意:别调太低!
如果网站访问量不小,进程数太少会导致请求排队,直接报 502 错误。
这个参数要根据实际访问量来调:
步骤 | 操作 | 目的 |
|---|---|---|
1 | top 命令 | 实时查看资源占用全局 |
2 | ps aux --sort=-%cpu/mem | 按 CPU/内存排序定位高占用进程 |
3 | 针对性调优配置 | 根据问题进程调整参数限制资源 |
服务器卡死不可怕,可怕的是不知道问题出在哪。
记住这个排查流程:top 看全局 → ps 排定位 → 针对性调优。大部分资源耗尽问题都能快速找到原因。
像 PHP-FPM 进程泛滥这种问题,改一个参数就能解决,关键是你要先定位到它。