看过凌晨两点机房跳动的红色告警的人,大概都有过那种“脑子一片空白”的瞬间。监控面板上一排排变红的数字,钉钉/企业微信群里连绵不绝的艾特,再加上测试同事的一句“网站打不开了?”——多数故障的起点,其实是运维本人先“CPU过载”。我干运维这行十来年,处理过大大小小几百起线上事故,想跟你分享一个特别朴素的道理:告警本身不可怕,可怕的是没有一套按部就班的排查流程。 这份Linux故障排查“作战地图”,就是我这些年被炸出来的经验总结,希望它能帮你从“看见告警就心惊肉跳”进化成“收到告警先按流程走一遍”。
1. 深夜告警的“黄金三分钟”:先看态势,不要急着登录服务器
1.1 告警不都是“火警”,先花一分钟判断真伪和级别
深夜收到告警,很多新手的第一反应是赶紧ssh登录服务器,然后一连串命令敲下去:free -g、top、df -h,敲完也不知道问题到底在哪。这里我想提醒你一个反直觉的操作:接到告警后的第一件事,不是登录,而是看监控面板的时间轴和告警详情。
告警到达时,你先问自己三个问题:第一,这个告警持续多久了?是刚刚发生还是已经持续了半个小时?第二,告警的级别是什么?是ERROR还是WARNING?第三,监控面板上的曲线是在持续上涨,还是已经出现了转折点?我遇到过不少次,告警发出来的时候系统其实已经自我恢复了,或者只是监控项配置不合理导致的偶发抖动。如果这个时候你手忙脚乱连上去跑命令,反而可能踩到真正的雷。
我自己的习惯是手机上看一眼监控App的趋势图,确认是断崖式暴跌还是缓慢攀升。断崖式暴跌往往出现在网络分区、进程挂掉等场景,需要立刻介入;缓慢攀升则可能是流量自然上涨或内存泄漏,可以多观察几分钟。
1.2 搞清“谁在报警”比“怎么处理”更重要
运维圈有句话叫“告警风暴比故障本身更可怕”。尤其是Zabbix这类监控系统,一个底层基础设施出问题,经常会连带触发几十条主机、服务、依赖关系的告警。举个真实的例子:某次凌晨vSphere宿主机证书过期,结果一晚上涌进来四五十条“Zabbix agent unreachable”和“HTTP服务超时”的告警,实际根子全在证书上。
所以收到告警千万别陷入“逐条消灭”的陷阱。正确的打开方式是:先找到告警的根因入口,看有没有共同的父节点。如果是数据库挂了,那依赖数据库的所有应用告警都是它的子节点;如果是网络交换机端口故障,那该端口下的所有主机和虚拟机告警全是连带告警。我们的目标是找到那棵“告警树的根”,而不是修剪每一片树叶。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 看懂 load average 背后的三重含义:你的系统到底是不是真的“累”了
2.1 load average 不等于 CPU 使用率
看到服务器负载告警,大家第一反应就是去看 top 输出里的 load average。这里我先泼一盆冷水:load average 高,并不意味着 CPU 就一定忙。在Linux里面,load average 统计的是处于可运行状态(R状态)和不可中断睡眠状态(D状态)的进程平均数量。也就是说,它涵盖了等待CPU调度的进程,也涵盖了等待I/O(磁盘、网络)的进程。
这就产生了一个非常经典的误判场景:大量进程阻塞在磁盘I/O上,CPU本身闲置率很高,但 load average 可能飙到四五十甚至上百。如果你按照“CPU超载”的思路去排查,加配置、扩容,结果方向完全跑偏,问题自然解决不了。
2.2 用 vmstat 快速拆解负载构成
要拆解 load average 到底是谁撑起来的,我建议你养成一个肌肉记忆:登录服务器后,先执行 vmstat 1 5,输出如下:
bash复制procs ----
