Linux 中怎么排查日志频繁写入造成的磁盘 I/O 冲突

夏静酱_6596

夏静酱_6596

2026-10-19

760人浏览

原创

日志频繁写入是磁盘i/o瓶颈的常见原因,需按四步排查:先通过top和iostat确认iowait>30%及%util接近100%;再用iotop -o -p定位高写入进程;接着用lsof -p pid筛选w模式reg文件锁定日志路径;最后通过find、logrotate -d和调低日志级别验证并缓解。

linux 中怎么排查日志频繁写入造成的磁盘 i/o 冲突

日志频繁写入是导致磁盘 I/O 冲突的常见原因,尤其在高并发服务或调试模式下容易触发。排查关键在于快速锁定写日志的进程、定位目标文件、判断写入频率与量级,并验证是否为根本瓶颈。

第一步:确认是否为 I/O 瓶颈而非其他资源问题

先看 CPU 的 iowait 是否异常升高:

  • 运行 top 或 htop,观察顶部显示的 wa 值——若持续超过 30%,说明系统正大量等待 I/O 完成
  • 配合 iostat -x 2 查看磁盘指标:
    重点关注 %util(接近 100% 表示设备饱和)和 await(显著高于 10ms 说明延迟严重)
  • 若 %util 高但 r/s 和 w/s 并不高,可能是小包高频写入;若 wkB/s 很大(如 >20MB/s),更倾向大块日志刷盘

第二步:用 iotop 找出写日志最猛的进程

以 root 权限运行,聚焦真实写入行为:

Obsidian (Linux)
Obsidian (Linux)

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

下载
  • sudo iotop -o -P -d 2:
     --o 只显示正在 IO 的进程,避免干扰
     --P 按进程(非线程)聚合显示
     --d 2 每 2 秒刷新,便于观察趋势
  • 重点看 DISK WRITE 列(如 42.65 M/s)和 IO> 列(如 98.7%)
    常见嫌疑进程:rsyslogd、journalctl(systemd-journald)、nginx、java 应用、自定义 Python/Node 日志脚本
  • 记下 PID 和 COMMAND,例如看到 python3 /app/logger.py 持续写入 35MB/s,就基本锁定源头

第三步:确认它在写哪个日志文件

对可疑 PID 使用 lsof 查看打开的写入型文件:

  • sudo lsof -p PID | awk '$5 ~ /^REG/ && $4 ~ /w/ {print $9}' | sort | uniq -c | sort -nr
    这条命令筛选出该进程以写方式(w)打开的普通文件(REG),并统计路径出现频次
  • 典型输出:
      12 /var/log/app/error.log
       8 /tmp/debug_trace.log
    说明它正高频追加写入这些路径
  • 若发现大量 /dev/log 或 /run/systemd/journal/socket,说明走的是 syslog 或 journald 转发路径,需进一步查 rsyslog 配置或 journal 设置

第四步:辅助验证与临时缓解

不急于改代码,先做轻量验证和可控干预:

  • 用 find /var/log -type f -name "*.log" -size +50M -ls | sort -k7 -r 扫描大日志文件,确认是否已有单个文件膨胀到百 MB 级别
  • 检查对应服务的日志轮转配置(如 logrotate)是否失效:
    运行 logrotate -d /etc/logrotate.d/rsyslog(加 -d 调试模式看是否匹配、是否执行)
  • 临时降低日志级别验证效果:
    比如对 Java 进程,修改 logback.xml 中 <root level="WARN"></root>;对 Python,调整 logging.basicConfig(level=logging.WARNING)
  • 若确认是某应用自身日志失控,可先用 kill -USR1 PID(部分支持重载日志)或重启服务,观察 iostat 是否立即回落

相关文章

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

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

下载

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

相关专题

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

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

2023.06.21

4090

4

如何安装LINUX
如何安装LINUX

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

2023.06.29

3473

10

linux find
linux find

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

2023.06.30

2673

5

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

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

2023.07.05

6530

7

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

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

2023.07.06

6162

7

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

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

2023.07.20

3593

8

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

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

2023.07.20

3065

4

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

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

2023.07.25

3299

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人学习