服务器老是卡死内存CPU跑满?三步排查法帮你定位问题
做网站的都遇到过这种情况——服务器突然卡死,SSH 登录都费劲,更别提网站能不能访问了。
别慌,今天分享一套实战排查思路,帮你快速定位问题进程,对症下药。
第一步:top 命令看全局
登录服务器之后,第一件事敲 top。
这个命令会实时显示当前所有进程的资源占用情况,按 CPU 和内存排序,哪些进程在"吃"你的资源,一眼就能看到。
不过 top 有个缺点:进程多的时候看起来比较乱,不够直观。
第二步:ps 命令精准排序
如果 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 内存,不卡死才怪。
怎么调?
用宝塔面板的:
- 打开「软件商店」→ 找到已安装的 PHP → 点「设置」
- 找到 FPM 配置文件
- 找到参数
pm.max_children - 把默认值 50 改成 10(或者其他合理值)
⚠️ 注意:别调太低!
如果网站访问量不小,进程数太少会导致请求排队,直接报 502 错误。
这个参数要根据实际访问量来调:
- 访问量大的站 → 保持较大值或适当增加
- 测试服务器/低流量站 → 可以调低到 10 甚至更低
- 核心原则:内存够用 + 不报 502
排查思路总结
| 步骤 | 操作 | 目的 |
|---|---|---|
| 1 | top 命令 |
实时查看资源占用全局 |
| 2 | ps aux --sort=-%cpu/mem |
按 CPU/内存排序定位高占用进程 |
| 3 | 针对性调优配置 | 根据问题进程调整参数限制资源 |
写在最后
服务器卡死不可怕,可怕的是不知道问题出在哪。
记住这个排查流程:top 看全局 → ps 排定位 → 针对性调优。大部分资源耗尽问题都能快速找到原因。
像 PHP-FPM 进程泛滥这种问题,改一个参数就能解决,关键是你要先定位到它。
程序员老狼 | 聊城变量网络科技有限公司
十几年全栈开发经验,专注网站、客服系统、自动化方案
有问题随时交流,微信:llike620
十年开发经验程序员,独立开发《唯一客服系统》
一款基于Golang+Vue开发的在线客服系统,软件著作权编号:2021SR1462600。一套可私有化部署的网站在线客服系统,编译后的二进制文件可直接使用无需搭开发环境,下载zip解压即可,仅依赖MySQL数据库,是一个开箱即用的全渠道在线客服系统,致力于帮助广大开发者/公司快速部署整合私有化客服功能。
开源地址:唯一客服(开源学习版)
官网地址:唯一客服官网
浙公网安备 33010602011771号