服务器 CPU 占用 100%?教你揪出元凶进程
服务器CPU飙到100%时,整个业务都会卡顿甚至中断。
别慌,下面教你怎么用最简单的方法找到那个“吃CPU”的进程。
不管你是用命令行还是宝塔面板,都能跟着做。
排查前的准备
你需要先登录服务器。
如果使用SSH,需要知道服务器的IP、用户名和密码(或密钥)。
如果装了宝塔面板,直接用浏览器打开面板网址,输入账号密码就行。
另外,建议先开一个临时维护窗口,避免误操作影响在线业务。
第一步:用top命令快速定位高CPU进程
登录SSH后,输入命令:
top
你会看到一个动态列表。
默认按CPU使用率排序,所以CPU占用最高的进程会排在最上面。
重点看 %CPU 这一列,数值接近100%的就是元凶。
记下它的PID(进程ID),比如 12345。
如果不小心退出了top,按 q 键。
第二步:用ps命令查看进程详情
top只显示瞬间状态,要确认进程的详细信息和父进程,用ps命令更稳妥:
ps aux --sort=-%cpu | head -10
这个命令会列出CPU占用前10的进程。
输出中包含用户、CPU%、内存%、启动时间、命令等。
如果看到类似 python /tmp/malicious.py 或 xmrig 这样的陌生进程,很可能是挖矿病毒。
你也可以通过 ps -ef | grep 12345 查看具体启动参数。
第三步:宝塔面板的可视化排查
如果你用的是宝塔面板,操作更直观:
- 登录宝塔面板,点击左侧菜单“仪表盘”。
- 在仪表盘右上方找到“CPU使用率”或“负载状态”,点击“详细”。
- 在弹窗里选择“进程管理器”,按CPU排序查看。
- 点击进程行右侧的“查看详情”可以看完整命令行。
- 如果需要结束进程,直接点击“结束进程”按钮(慎重,先确认是不是关键进程)。
宝塔面板的进程管理器还能看到进程的启动用户和网络连接,有助于判断是否是异常进程。
常见问题与避坑
问:top里看到进程是python/php/java,但不知道怎么对应业务? 建议先查看启动参数:ps -ef | grep 进程名。如果是熟悉的业务进程(如nginx、php-fpm),可能是流量突增或代码Bug导致CPU高,应该联系开发优化。如果是陌生路径下的脚本,很有可能是恶意程序。
问:误杀了系统关键进程怎么办? 结束进程前,先用 kill -15 进程ID 发送软中断信号,如果进程是正常服务,它不会立即退出。如果它立刻没了,说明可能不是系统核心进程(系统进程一般不会轻易被kill)。如果误杀了,尝试用 systemctl restart 服务名 重启。
问:为什么结束进程后CPU又瞬间冲高? 可能是该进程受守护进程或定时任务自动拉起。你需要找到它的启动源头:检查 /etc/init.d/、/etc/systemd/system/、/var/spool/cron/ 以及 /etc/crontab。如果是挖矿病毒,建议先隔离服务器,再彻底清理。
验证方法:执行上述定位步骤后,结束疑似进程,观察 top 或宝塔面板的CPU曲线,如果恢复正常,说明找对了。如果反复出现,继续按上面“自动拉起”的问题排查。之后建议用 htop 或 bmon 等工具辅助监控,但日常用 top 和 ps 就足够了。