服务器CPU占用100%快速定位进程
出现CPU100%时,先检查,别急着重启
当服务器CPU占用飙到100%,网页打不开、SSH响应慢,很多新手第一反应是重启。
但重启只能暂时释放资源,不解决问题。
你应该先登录服务器,快速定位是哪个进程在吃CPU。
本文假设你已通过SSH连接服务器,或者能登录宝塔后台。
用 top 命令瞬间揪出CPU杀手
登录服务器后,输入命令:
top -c
参数 -c 可以显示进程的完整命令行。
进入交互界面后,按一下键盘的 P(大写),进程会自动按CPU使用率从高到低排序。
重点关注第一屏的几个进程,看看哪个进程的 %CPU 列接近100%。
记住它的 PID 和 COMMAND。
按 q 退出。
如果 top 界面一闪而过,可以用 top -b -n 1 | head -20 将结果打印出来。
用 ps 命令获取更详细的进程信息
找到PID后,用 ps 命令补充查看:
ps -p 1234 -o pid,user,%cpu,cmd --sort=-%cpu
把 1234 换成实际PID。
也可以直接用下面这条命令直接列出CPU占用前5的进程:
ps aux --sort=-%cpu | head -6
输出中能看到进程所属用户、CPU占用百分比、启动命令等。
如果看到不明进程如 xmrig、minerd 等,几乎可以确定是挖矿病毒。
宝塔面板用户:在后台直接查看
如果你用宝塔面板,操作更直观:登录宝塔后台 -> 左侧菜单“监控” -> 顶部“进程管理”。
页面会列出所有进程,默认按CPU排序。
点击某个进程可以查看详细路径和启动参数,甚至直接结束进程。注意:结束进程前先确认是不是重要服务。
另外,宝塔的“终端”功能也可以直接执行上面说的命令,不用单独开SSH。
避坑提醒:这些进程不要轻易杀掉
CPU 100%不一定是坏事,可能是正常业务高峰。
常见的不能乱杀的进程:
- MySQL/mariadb:数据库服务,杀掉会导致网站全崩。
- php-fpm:PHP进程,高占用可能是并发请求多,先检查慢查询或页面死循环。
- nginx/httpd:Web服务器,杀掉直接断网。
- sshd:SSH服务,杀掉你就断连了。
建议先观察一会儿,如果某个进程CPU一直高,记录PID后用 strace -p PID 跟踪系统调用,或查看 /var/log 下的相关日志。
确定是恶意进程(如挖矿、木马)再 kill。
常见问题解答
Q: top 里看不到高占用进程,但CPU还是100%怎么办?
A: 可能是进程频率太高,导致 top 抓不到。按下 H 键开启线程模式,或者用 htop(需要安装:yum install htop -y)实时刷新。
Q: 怎么杀死进程?
A: 先温和结束:kill PID;不行再用强制:kill -9 PID。注意 -9 会立即终止进程,可能丢失数据。
Q: 杀掉之后CPU降下来,但过几分钟又100%了?
A: 很可能是守护进程或定时任务自动重启了恶意程序。检查 crontab:crontab -l,以及 /etc/cron* 下的任务。同时用 netstat -anp 检查可疑连接。
验证问题是否彻底解决
执行下面命令确认:
top -b -n 1 | grep Cpu
看 %Cpu(s) 行的 us 和 sy 之和是否降到正常范围(通常低于50%)。
再用 uptime 查看负载,free -h 检查内存。
最后打开网站或API测试一下,业务正常即可。
如果你正在处理服务器CPU占用100%快速定位进程的任务,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分。