服务器突然变慢、CPU飙到100%、内存被吃光——是哪个进程在作怪?进程管理是运维排障的基本功。学会看进程、揪出资源黑洞、处理失控进程,你就能快速定位和解决”服务器卡了”的问题。本文教你这套技能。
一、top:资源监控的瑞士军刀
top
进入top后,关键信息:
- 顶部负载(load average):三个数字是1/5/15分钟的平均负载,超过CPU核心数说明繁忙;
- %CPU / %MEM列:按占用排序,一眼看出谁在吃资源(top里按
P按CPU排序、M按内存排序); - %st(steal):被宿主机偷走的CPU,持续大于0说明VPS被超售(参考虚拟化篇);
- PID:进程号,后面kill要用。
二、htop:更好用的top
apt install htop -y
htop
htop是top的增强版:彩色界面、可视化的CPU/内存条、能用方向键选进程、直接按F9结束进程、支持鼠标。强烈推荐装上,比top直观得多。
三、ps:精确查找进程
ps aux | grep nginx # 查找特定进程
ps aux --sort=-%cpu | head # 按CPU占用排序前几名
ps aux --sort=-%mem | head # 按内存占用排序
ps适合脚本里精确查找、或者快速定位某个程序的进程和PID。
四、kill:结束进程
kill PID # 温和地请求进程退出(发TERM信号)
kill -9 PID # 强制杀死(进程卡死、温和方式无效时)
killall nginx # 按名字杀死所有同名进程
pkill -f "关键词" # 按命令行关键词杀
建议先用普通kill(给进程机会正常清理退出),不行再用 kill -9 强杀。数据库等进程强杀可能导致数据问题,谨慎。
五、实战:CPU飙到100%怎么办?
top或htop,按CPU排序,找出占用最高的进程和PID;- 判断这个进程是什么:正常业务突然吃CPU?可能是流量大、慢查询、死循环;陌生进程?可能是被入侵挖矿(参考入侵应急篇);
- 是业务进程:排查为什么吃CPU(看日志、查数据库慢查询、看是不是被攻击);
- 是可疑进程:立即警惕入侵,按应急流程处理;
- 临时救急:可kill掉失控进程恢复服务,但要找到根因防复发。
六、实战:内存被吃光(OOM)
内存耗尽时,系统会触发OOM killer杀掉进程(参考swap篇):
free -h # 看内存和swap使用
dmesg | grep -i "out of memory" # 查是否发生过OOM,杀了谁
ps aux --sort=-%mem | head # 找内存大户
处理:优化吃内存的进程(如调小数据库缓冲、限制程序内存)、开适量swap兜底、或升级内存(长期依赖swap说明内存真不够)。
七、进阶:查进程的更多信息
ls -l /proc/PID/exe # 进程对应的程序文件路径(揪木马用)
ls -l /proc/PID/cwd # 进程工作目录
cat /proc/PID/cmdline # 完整启动命令
lsof -p PID # 进程打开的文件和连接
这些在排查可疑进程、定位程序来源时很有用。
结论
进程管理排障流程:top/htop看谁吃资源 → ps精确定位 → 判断是业务还是异常 → 找根因(日志/慢查询/攻击)→ 必要时kill救急。CPU飙高查是不是被入侵挖矿、内存耗尽查OOM。这套技能让你面对”服务器卡了”能冷静定位而非重启了事。配合监控告警,资源异常还能提前知道。在你的服务器上装个htop,平时多看看进程,熟悉了排障就快。