Linux怎么查看日志频繁导致的IO瓶颈位

云静吖_7713

云静吖_7713

2026-08-08

278人浏览

原创

先看iostat -x 1中%util是否持续>90%且wkb/s异常高,再结合iotop -o确认rsyslogd/journald等进程write-heavy,同时await>50ms、avgqu-sz>2表明写不下去而非单纯写得多;再用df -h和df -i查/var/log分区空间与inode是否耗尽;最后用lsof +d /var/log定位具体写日志的进程和文件。

linux怎么查看日志频繁导致的io瓶颈位

怎么确认日志写入正在拖慢磁盘IO

先别急着查日志文件本身,得先看系统是否真被日志压垮了。核心判断依据是:iostat -x 1 输出中某设备的 %util 持续 >90% 且 wKB/s 异常高,同时 iotop -o 里能看到 rsyslogd、journald、logrotate 或业务进程(如 java、nginx)在持续 write-heavy。

注意:不是所有日志写入都等于瓶颈。关键要看 await 是否同步升高(>50ms 表明设备响应慢)、avgqu-sz 是否长期 >2——这说明写请求在队列里堆着,不是简单“写得多”,而是“写不下去”。

  • df -h 看 /var/log 所在分区使用率是否 ≥95%,空间快满会触发 ext4 延迟分配失败,加剧 IO 阻塞
  • df -i 查 inode 使用率,小文件日志场景下 /var/log 的 inode 耗尽比磁盘空间更早引发卡顿
  • 运行 lsof +D /var/log 2>/dev/null | awk '$5 ~ /^REG/ && $9 ~ /\.log$/ {print $1,$2,$9}' | sort -k2 -n | uniq -c | sort -nr,快速列出当前正往 /var/log 写日志的进程和文件

为什么journalctl -f或tail -f本身也会加重IO负担

实时日志监控工具本身不是只读,它们会强制刷新、频繁 stat、甚至触发 page cache 回写。尤其当 systemd-journald 日志量大时,journalctl -f 会持续 poll journal 文件,叠加 tail -f 对多个大日志轮转文件做 inotify 监控,导致大量小 IO 和元数据操作。

这不是 bug,是设计使然:journald 默认启用 Storage=persistent,且日志索引更新、压缩、rotate 都需要同步刷盘;tail -f 在 ext4 上对已删除但未关闭句柄的日志(lsof +L1 可见)仍会尝试 read,产生无效等待。

Obsidian (Linux)
Obsidian (Linux)

操作 Obsidian 库(纯 Markdown 笔记),并通过 notesmd-cli 实现自动化。

下载
  • 临时缓解:停掉 journalctl -f 和 tail -f,用 less +F /var/log/syslog 替代(它不主动轮询)
  • 检查 journald 配置:/etc/systemd/journald.conf 中 RateLimitIntervalSec=30 和 RateLimitBurst=1000 是否过松,高频日志会触发限流并堆积缓冲区
  • 避免在生产环境用 tail -f /var/log/*.log —— glob 展开会打开数百个文件描述符,每个都占用 inode 缓存和 inotify watch

如何定位具体哪个日志文件或服务在疯狂刷盘

不能只靠文件大小排序,因为有些日志是循环覆盖的(如 journal),有些是刚清空但句柄未释放(deleted 状态)。真正有效的办法是结合内核视角和进程打开文件行为。

执行 sudo lsof -nP +D /var/log 2>/dev/null | grep -E 'REG.*[[:space:]]+[^[:space:]]+\.log' | awk '{print $1,$2,$9}' | sort | uniq -c | sort -nr,输出类似:

  287 nginx      12345 /var/log/nginx/access.log
  192 java       67890 /opt/app/logs/app.log
   87 rsyslogd   23456 /var/log/messages

再针对 PID 查详细:sudo lsof -p 67890 | grep -E '\.log|\.out$',确认是否在写滚动日志、debug 级别日志、还是异常堆栈反复 dump。

  • 重点关注 SIZE 列持续增长的文件,而非 du -sh 最大的——后者可能是旧归档,前者才是活源头
  • 用 strace -p PID -e trace=write,fsync,fdatasync -s 128 2>&1 | head -20 看进程是否在每条日志后都调用 fsync,这是最典型的 IO 慢因
  • 检查应用配置:Java 应用的 logback.xml 是否设了 <immediateflush>true</immediateflush>,Nginx 的 access_log 是否带 buffer=64k flush=1s

日志IO瓶颈修复中最容易被忽略的点

很多人调大日志轮转周期、关掉 debug 日志就以为完事了,但真正卡住系统的往往是底层机制没对齐:ext4 延迟分配在高并发小写场景下竞争激烈,journal 提交频率与磁盘物理延迟不匹配,或者日志路径落在 LVM 快照卷上——这些不会报错,但会让 %util 持续 99% 且 await 波动剧烈。

  • /etc/fstab 中给 /var/log 分区加 noatime,commit=30,减少元数据更新压力;若用 SSD,可试 barrier=0(仅限有断电保护的存储)
  • 对 Java 应用,把日志输出重定向到 AsyncAppender 或 Disruptor,避免主线程阻塞在 write 系统调用
  • 禁用 journald 的 ForwardToSyslog=yes(默认开启),否则日志会双写:一次进 journal,一次进 rsyslog,IO 翻倍
  • 不要只清理 /var/log 下的文件,用 lsof +L1 | grep log 找出那些已被 logrotate rename 但进程还没 reload 的 deleted 日志,kill -USR1 通知服务 reopen 日志文件

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

4150

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3513

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2733

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

6690

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

6322

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

3653

8

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

2023.07.20

3145

4

linux查看cpu使用率
linux查看cpu使用率

在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。本专题为大家带来了linux查看cpu使用率的相关文章,感兴趣的朋友千万不要错过了。

2023.07.25

3379

6

linux查找文件命令
linux查找文件命令

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.31

297

3

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习