真正实用的多维度Linux巡检脚本需围绕可观测性与可判断性设计:CPU需负载与使用率双校验,内存要联合换页与swap分析,磁盘应分层评估I/O延迟与饱和度,网络须精准统计连接状态与底层错误。

要实现一个真正实用的多维度 Linux 系统性能巡检脚本,关键不是堆砌命令,而是围绕“可观测性”和“可判断性”设计:采集核心指标、设定合理阈值、聚合输出、支持快速定位。下面给出一个轻量但覆盖全面的实践方案。
CPU 负载与使用率双维度校验
仅看 top 或 uptime 的 load average 容易误判——高负载未必代表瓶颈,需结合实际 CPU 使用率和运行队列深度。脚本应同时采集:
-
uptime输出的 1/5/15 分钟 load average(重点对比逻辑 CPU 数:nproc) -
mpstat -P ALL 1 1 | awk '$3 ~ /[0-9.]+/ {sum+=$3} END {print sum/NR}'计算平均用户态 + 系统态使用率 -
vmstat 1 2 | tail -1 | awk '{print $27}'获取当前运行队列长度(r 列),持续 > CPU 核数即存在排队
建议阈值:load > nproc × 1.2 且 run queue > nproc × 1.5,同时 CPU 使用率 90%,才聚焦进程级分析(ps -eo pcpu,pid,args --sort=-pcpu | head -10)。
内存与交换活动联合判断
避免只查 free -h 的“可用内存”误导——Linux 会积极缓存,真正危险的是频繁换页或 OOM 前兆。脚本应关注:
-
free -b | awk 'NR==2{printf "%.1f", ($3+$4)/$2*100}'计算真实“已用内存占比”(used + buff/cache 占总内存比) -
grep -E "pgpgin|pgpgout|pgmajfault" /proc/vmstat | awk '{sum+=$2} END {print sum}'统计自启动以来总页入/页出/主缺页次数,再除以 uptime 秒数得每秒均值 -
swapon --show=NAME,TYPE,SIZE,USED | tail -n +2 | awk '$4>0 {print}'检查是否有 swap 正在被使用(非零 used)
危险信号:swap 使用量 > 0 且 pgpgout/s > 100,或内存占用 > 92% 且 pgmajfault/s > 5 —— 这往往预示内存压力已触发内核回收机制。
磁盘 I/O 延迟与饱和度分层分析
不要只盯 iostat -x 1 1 的 %util;它在多队列设备(NVMe、现代 SSD)上已失效。应转向:
-
iostat -dx 1 1 | awk '$14>10 {print $1, $14}'提取 await(平均 I/O 等待毫秒),> 10ms 对 HDD 是预警,> 1ms 对 NVMe 就需关注 -
cat /sys/block/*/device/model 2>/dev/null | xargs -I{} sh -c 'echo {}; echo $(cat /sys/block/$(basename $(dirname {}))/queue/scheduler)'识别设备类型与调度器,决定后续分析策略 -
iotop -b -n1 -o -P | awk '$6>1000 {print $1,$6,$8,$9}'找出实际产生 >1MB/s I/O 的活跃进程(-o 只显示有 I/O 的进程)
典型问题场景:await 高但 %util 低 → 存储后端响应慢(如网络存储延迟);await 和 %util 都高 → 本地磁盘饱和;await 低但 IOPS 高 → 应用小包随机写密集,需检查应用逻辑。
网络连接与错误统计精准抓取
跳过模糊的 “netstat -s” 全量输出,聚焦高频故障点:
-
ss -s | grep -E "(established|synrecv|timewait)"快速查看 ESTABLISHED 连接数、SYN_RECV 半开连接(防 SYN Flood)、TIME_WAIT 数量 -
netstat -s | grep -A 5 "Tcp:" | grep -E "(retrans|reset|abort)"提取重传、主动断连、异常终止次数,对比 uptime 差值计算每秒比率 -
ethtool -S eth0 2>/dev/null | grep -E "(rx_.*errors|tx_.*errors|dropped)"(替换 eth0 为实际接口)直读网卡驱动层错误计数,比 ifconfig 的 RX/TX errors 更底层、更准
健康基线参考:retransmit/sec
这个脚本不追求大而全,而是每项指标都对应明确的问题假设和下一步动作。把采集、阈值判断、简明提示封装成函数,配合 cron 每 5 分钟运行一次并邮件摘要,就能构成稳定可靠的日常巡检闭环。不复杂但容易忽略。



















