在IDC运维日常工作中,CPU负载告警是最常见的问题之一。面对top命令里飙升的%us和%sy,新手运维往往不知所措。本文分享一套标准化的CPU排查流程,帮你快速定位根因。
第一步:快速确认负载来源
登录服务器后,先用top命令按P排序,查看CPU占用最高的进程。注意区分:
- %us高:用户态进程占用,通常是应用程序bug、死循环或业务量突增
- %sy高:内核态占用,大概率是上下文切换过多、IO等待或系统调用异常
- %wa高:IO等待,这时候CPU其实在等磁盘,不是真的忙
如果看到某个Java进程占了200%CPU,别急着kill——先用jstack <pid>抓线程栈,看是不是GC频繁或者线程死锁。
第二步:深挖进程细节
找到可疑进程后,用ps -Lfp <pid>看线程级CPU占用,找到最忙的线程ID。再用strace -p <pid> -c统计系统调用耗时,看是哪个syscall拖慢了系统。
对于Web服务器,建议配合netstat -an | grep :80 | wc -l看连接数,有时候是CC攻击导致的请求风暴。这时候不要只盯着CPU,先看网络连接和访问日志。
第三步:优化建议
CPU优化不是一味地加核数。我们在IDC实践中总结了几条经验:
- 把CPU绑定到特定NUMA节点,避免跨节点内存访问延迟
- 调整进程nice值,让核心业务进程优先获得CPU资源
- 禁用不必要的内核调试和审计功能
- 定期清理僵尸进程和孤儿进程,用
ps -ef | grep defunct检查
最后提醒:CPU负载100%不一定是坏事——只要业务响应正常,说明CPU资源被充分利用了。真正需要告警的是持续高负载伴随响应超时,这才是真的有问题。
评论