当前位置: 首页 > news >正文

磁盘IO高排查方法

查看系统磁盘整体 I/O:

iostat -x -k -d 1 1
Linux 3.10.0-1160.118.1.el7.x86_64 (localhost.localdomain)      2024年06月29日  _x86_64_        (1 CPU)Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.03    1.34    0.68    29.34     7.49    36.56     0.00    0.56    0.35    0.96   0.29   0.06
scd0              0.00     0.00    0.00    0.00     0.26     0.00   114.22     0.00    1.72    1.72    0.00   1.33   0.00
dm-0              0.00     0.00    1.21    0.71    26.27     6.97    34.63     0.00    0.63    0.36    1.09   0.28   0.05
dm-1              0.00     0.00    0.02    0.00     0.57     0.00    50.09     0.00    0.20    0.20    0.00   0.10   0.00# -x: 显示扩展的磁盘统计信息
# -k: 以KB为单位显示数据(而不是默认的块数)
# -d: 只显示磁盘统计信息(不显示CPU统计)
# 1 1: 第一个1表示每秒刷新一次,第二个1表示只显示一次报告# rrqm/s:   每秒对该设备的读请求被合并次数,文件系统会对读取同块(block)的请求进行合并
# wrqm/s:   每秒对该设备的写请求被合并次数
# r/s:      每秒完成的读次数
# w/s:      每秒完成的写次数
# rkB/s:    每秒读数据量(kB为单位)
# wkB/s:    每秒写数据量(kB为单位)
# avgrq-sz: 平均每次IO操作的数据量(扇区数为单位)
# avgqu-sz: 平均等待处理的IO请求队列长度
# await:    平均每次IO请求等待时间(包括等待时间和处理时间,毫秒为单位)
# svctm:    平均每次IO请求的处理时间(毫秒为单位)
# %util:    采用周期内用于IO操作的时间比率,即IO队列非空的时间比率

查看进程级别 I/O:

pidstat -d 1 # 每1秒刷新一次进程I/O数据
Linux 3.10.0-1160.118.1.el7.x86_64 (localhost.localdomain)      2024年06月29日  _x86_64_        (1 CPU)15时43分27秒   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
15时43分27秒     0         1     10.95      0.04      0.00  systemd
15时43分27秒     0       483      0.25      0.00      0.00  systemd-journal
15时43分27秒     0       508      3.44      0.00      0.00  systemd-udevd
15时43分27秒     0       509      0.02      0.00      0.00  lvmetad
15时43分27秒     0       627      0.02      3.82      0.00  auditd
15时43分27秒    81       650      0.28      0.00      0.00  dbus-daemon
15时43分27秒     0       652      0.16      0.00      0.00  systemd-logind
15时43分27秒     0       653      1.26      0.00      0.00  VGAuthService
15时43分27秒     0       654      0.83      0.00      0.00  vmtoolsd
15时43分27秒   999       655      1.51      0.00      0.00  polkitd
15时43分27秒     0       657      1.48      0.01      0.00  NetworkManager# kB_rd/s   每秒从磁盘读取的KB
# kB_wr/s   每秒写入磁盘KB
# kB_ccwr/s 任务取消的写入磁盘的KB。当任务截断脏的pagecache的时候会发生
# Command   进程执行命令

当使用 pidstat -d 定位到哪个应用服务时,接下来则需要使用 strace 和 lsof 定位是那些代码在读写磁盘里的哪些文件,导致 IO 高的原因:

strace -p 18940
strace: Process 18940 attached
...
mmap(NULL, 314576896, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0f7aee9000
mmap(NULL, 314576896, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0f682e8000
write(3, "2018-12-05 15:23:01,709 - __main"..., 314572844
) = 314572844
munmap(0x7f0f682e8000, 314576896)       = 0
write(3, "\n", 1)                       = 1
munmap(0x7f0f7aee9000, 314576896)       = 0
close(3)                                = 0
stat("/tmp/logtest.txt.1", {st_mode=S_IFREG|0644, st_size=943718535, ...}) = 0

strace 命令输出可以看到进程 18940 正在往文件 /tmp/logtest.txt.1 写入 300m

lsof -p 18940
COMMAND   PID USER   FD   TYPE DEVICE  SIZE/OFF    NODE NAME
Java  18940 root  cwd    DIR   0,50      4096 1549389 /
…
Java  18940 root    2u   CHR  136,0       0t0       3 /dev/pts/0
Java  18940 root    3w   REG    8,1 117944320     303 /tmp/logtest.txt
----
FD 表示文件描述符号,TYPE 表示文件类型,NODE NAME 表示文件路径

lsof 也可以看出进程 18940 以每次 300MB 的速度往 /tmp/logtest.txt 写入

http://www.sczhlp.com/news/10696/

相关文章:

  • java服务负载高解决流程
  • 8/12
  • 流程控制+Java方法(含义→调用)
  • linux cpu过高排查流程
  • 磁盘inode高排查记录
  • 666
  • 三个整数找最大值
  • 比赛邮寄
  • 类的编写、对象的创建以及使用
  • 树上启发式合并(dsu on tree)
  • tar 打包报错记录
  • 笛卡尔树知识点+思路
  • Pass 和 Shader的关系
  • 二期鸡熏
  • root密码忘记解决办法
  • 【2025牛客暑期多校训练营9】L Ping Pong
  • 禁止废话
  • 2025.8.12总结 - A
  • 如何优化NebulaGraph的查询性能?
  • nim语言配置nimcache编译缓存
  • 20250811 做题记录
  • 20250812 做题记录
  • [PaperReading] RT-1: ROBOTICS TRANSFORMER FOR REAL-WORLD CONTROL AT SCALE
  • 【03】厦门立林科技——立林科技 嵌入式 校招笔试,题目记录及解析 - 指南
  • JAX快速上手:从NumPy到GPU加速的Python高性能计算库入门教程
  • 数组打印的全量显示设置
  • 8.11总结
  • 8.12总结
  • 2025.08.12 NK9
  • 带修主席树模板