系统负载排查:从告警到定位

张工

· 阅读 1069

分享
系统负载排查

系统负载排查:从告警到定位

收到告警说服务器负载过高,如何快速定位问题?本文分享一套系统化的排查流程,从告警到根因定位,帮你高效处理线上故障。

第一步:确认影响范围

先看监控大盘:哪些服务受影响?是单机还是集群所有机器?是刚发生的还是持续恶化?确认影响范围后,评估是否需要紧急处理(如切流量、扩容)还是可以从容排查。

第二步:查看系统整体状况

uptime:查看load average。1分钟/5分钟/15分钟的平均负载。如果1分钟远大于15分钟,说明负载在上升中。

top:按1查看每个CPU核心的使用率。按M排序查看内存占用最高的进程。关注 %Cpu(s) 中的 us/sy/wa/hi/si。

free -h:查看内存使用。关注 available 和 swap 使用情况。

iostat -x 1:查看磁盘IO。%util接近100%说明磁盘饱和。

第三步:定位具体进程

top -c -d 1:实时查看进程CPU和内存使用,找到异常进程。

pidstat -u 1 5:查看每个进程的CPU使用率变化趋势。

iotop:查看哪些进程在做IO操作。

ss -antp | awk '{print $6}' | sort | uniq -c:查看网络连接状态分布。大量ESTABLISHED可能是正常流量,大量TIME_WAIT可能需要调优内核参数。

第四步:深入分析

如果是Java进程CPU高:jstack PID 导出线程栈,找到CPU最高的线程在做什么(通常是GC、死循环、正则回溯)。

如果是内存泄漏:jmap -histo PID 查看对象分布,找到占用内存最多的对象类型。

如果是IO瓶颈:lsof -p PID 查看进程打开了哪些文件,strace -p PID -e trace=file 跟踪文件操作。

第五步:处理和复盘

定位到根因后,根据情况处理:重启服务(临时)、扩容(缓解)、修复bug(根治)。事后一定要做复盘:问题原因是什么?如何预防?监控告警是否需要完善?形成Runbook文档。