当服务器卡成狗:Linux 系统满载时的快速排障指南
大家好,我是33blog的运维老司机。上周五凌晨2点,我正睡得香甜,突然被一阵急促的报警短信惊醒——公司生产服务器CPU负载直接飙到了800%!这种场景相信各位运维同仁都不陌生,今天我就来分享几个压箱底的排查技巧。
第一反应:别慌,先看整体情况
遇到系统满载时,新手容易手忙脚乱直接杀进程。我的经验是先用top
命令看全局:
top -c
加-c
参数可以显示完整命令,特别有用。这时候重点看:
- CPU占用前五的进程(%CPU列)
- 内存占用大户(RES列)
- 运行时间异常的进程(TIME+列)
进阶排查:这些命令更好用
如果top
看不太明白,我常用这套组合拳:
# 按CPU排序
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head -n 10
# 按内存排序
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head -n 10
有一次排查Java应用内存泄漏,就是靠这个发现有个Tomcat进程吃了16G内存,而正常情况下应该不超过4G。
深挖元凶:线程级分析
遇到多线程应用(比如Java)时,普通命令可能看不出问题。这时候要祭出大杀器:
# 查看指定进程的线程
top -H -p [PID]
# 或者用这个更直观
ps -eLf | grep [进程名]
记得去年有个Go服务CPU爆满,就是用top -H
发现有个goroutine卡死在死循环里。
实战中的血泪教训
说几个我踩过的坑:
- 不要直接
kill -9
!先尝试kill -15
给进程优雅退出的机会 - MySQL吃满CPU时,先看
show processlist
而不是直接重启 - 用
strace -p [PID]
追踪系统调用前,记得评估性能影响
预防胜于治疗
最后分享我的防护措施:
- 配置监控告警(推荐Prometheus+Alertmanager)
- 关键服务设置cgroup限制
- 定期做压力测试,知道系统瓶颈在哪
希望这些经验对你有帮助。下次服务器再抽风时,记得深呼吸,然后优雅地敲出这些命令~ 大家有什么排查妙招,欢迎在评论区交流!
运维的老哥太真实了,凌晨两点被叫起来处理问题简直就是家常便饭😭
这文章写得太实用了!top -c这个参数之前真不知道,学到了学到了
建议新手一定要记下来这些命令,关键时刻真的救急
血泪教训那几条太对了,之前直接kill -9搞出过大事
top -H这个查线程的用法太实用了,Java程序出问题再也不怕了
看大佬的文章就想起第一次处理CPU爆满时的窘境,手忙脚乱的