没有监控系统时怎么办
临时排障或压测时,往往来不及接监控系统,但又需要持续盯着几个关键指标。把一条能打印多个指标的命令交给 watch 循环执行,屏幕上就得到一块临时看板;需要留下证据时改成循环加时间戳落盘,就变成轻量指标日志。两者用途不同,一个看当下,一个供复盘。
基本信息
| 适用平台 | Linux(watch 来自 procps-ng,其余为常见系统命令) |
|---|---|
| 核心语法 | watch -n 间隔 -d '命令组',或循环加重定向落盘 |
| 常用指标 | 负载、内存、磁盘使用率、连接数、进程状态 |
| 局限 | 只在本机会话内生效,不告警、不持久化、无人收尾 |
典型使用场景
- 压测过程中实时观察负载与内存,确认压到了什么程度
- 故障排查时同时盯连接数与进程状态,判断是堆积还是泄漏
- 发布观察期看磁盘与日志增长速率,及时发现问题
- 给故障复盘留一份时间序列数据,证明变化发生在什么时刻
- 临时验证某个参数调整是否带来了指标变化
临时看板
临时看板
watch -n 5 -d 'uptime; echo; free -m | head -n 3; echo; df -h /data | tail -n 1'
watch -n 2 -d 'ss -s | head -n 3; ps -o pid,stat,pcpu,pmem,cmd -C nginx | head'
watch -n 5 -d 'nvidia-smi --query-gpu=utilization.gpu --format=csv 2>/dev/null || true'落盘监控
落盘监控
for i in $(seq 1 60); do
echo "$(date -Is) $(awk '{print $1,$2,$3}' /proc/loadavg) $(free -m | awk '/Mem/{print $3,$7}')"
sleep 60
done | tee /tmp/watch-$(date +%F).log # 每小时一行,跑 60 轮
awk '{print $1, $NF}' /tmp/watch-2026-10-13.log | head # 复盘时提取时间与数值列常用指标命令
| 指标 | 命令 | 看点 |
|---|---|---|
| 负载 | uptime 或 /proc/loadavg | 与 CPU 核数比较才有意义 |
| 内存 | free -m | 重点看可用内存与缓冲区占用 |
| 磁盘 | df -h | 关注使用率增速而不是绝对值 |
| 连接 | ss -s | 看连接状态分布是否异常 |
| 进程 | ps 按 CPU 或内存排序 | 找出持续占用最高的进程 |
watch 默认每 2 秒刷新,加 -d 会高亮变化的部分,读数更快;采集间隔小于 5 秒长时间运行会明显增加系统负载,间隔要克制。
使用纪律
- 把命令写在一行里,watch 才能正确执行整组命令
- 采完及时停止循环,无人收尾的脚本会长期占用资源
- 落盘文件放到临时目录,避免污染业务目录
- 记录时间戳用统一格式,便于后续排序与对比
- 需要长期观察时接监控系统,别用临时脚本硬扛
临时看板不给告警:数值越界不会有人通知你,关键业务不要依赖它做值守,应及时接回正式监控。