最轻量实时监控方式是用 watch -d 配合 ls -lh 或 du -sh,通过高亮变化、聚焦大文件和秒级增量识别狂写日志;结合 stat、lsof、ps、journalctl 等命令可快速定位写爆根源。

用 watch -d 配合 du -sh 或 ls -lh 是最轻量、无需安装额外工具的实时监控方式,重点在于“高亮变化”和“聚焦增长快的文件”,而非单纯刷新列表。
核心命令:用 watch -d 突出显示大小跳变
watch -d -n 1 'ls -lSh /var/log/ | head -10'
- -d:自动高亮每次刷新中发生变化的行(比如某文件 size 列数值变了,整行会闪一下)
- -n 1:每 1 秒刷新一次(可调为 0.5 或 2,按需)
-
ls -lSh:按文件大小逆序排列(
-S),人类可读格式(-h),详细列表(-l) - head -10:只看最大的前 10 个,避免刷屏,聚焦嫌疑对象
进阶定位:快速识别“正在狂写”的文件
仅看静态大小不够,要捕捉“秒级增量”。推荐组合:
- 先运行
watch -n 1 'ls -lh /var/log/ | grep "log\|out\|err$"'锁定常见日志后缀 - 对疑似文件,用
watch -n 1 'stat -c "%n %s %y" /var/log/app.log'查看大小(%s)和最新修改时间(%y),确认是否持续更新 - 若发现某文件大小每秒涨几 MB,立刻
lsof +L1 /var/log/app.log检查是否被进程打开且未释放(常见于未 rotate 的日志)
防爆辅助:加个简单大小阈值提醒
纯 watch 不报警,但可嵌入 shell 判断做视觉提示:
watch -n 2 'if [ $(du -m /var/log/app.log | cut -f1) -gt 500 ]; then echo "⚠️ APP.LOG > 500MB!"; else echo "OK"; fi'
- 每 2 秒检查一次,超 500MB 就打印醒目的红色警告(终端支持颜色时)
- 把
500换成你业务能接受的阈值,比如 100MB 或 2GB - 注意:
du -m单位是 MiB,比ls -lh的 “M” 更精确
排查写爆根源的下一步动作
监控到异常增长后,别只盯着文件,立即查三件事:
-
ps aux --sort=-%cpu | head -5看 CPU 是否被某个进程打满(可能伴随疯狂打日志) -
lsof +D /var/log/ | awk '$5~/REG/ && $9~/app\.log/ {print $2}' | xargs -r ps -fp找出谁在写这个文件 -
journalctl -u your-service --since "2 minutes ago" | grep -i "error\|exception\|fail"看服务最近是否有异常循环打日志











