磁盘读/写瓶颈如何使用iostat、iotop、和pidstat定位罪魁祸首

磁盘读写瓶颈如何使用iostat、iotop、和 pidstat定位罪魁祸首

  • 一、iostat工具
    • [1.1 iostat简介](#1.1 iostat简介)
    • [1.2 iostat命令使用](#1.2 iostat命令使用)
    • [1.3 案例介绍](#1.3 案例介绍)
  • 二、iotop工具
    • [2.1 iotop简介](#2.1 iotop简介)
    • [2.2 iotop命令使用](#2.2 iotop命令使用)
    • [2.3 案例介绍](#2.3 案例介绍)
  • 三、pidstat工具
    • [3.1 pidstat简介](#3.1 pidstat简介)
    • [3.2 pidstat命令使用](#3.2 pidstat命令使用)
    • [3.3 案例介绍](#3.3 案例介绍)
  • 总结

在现代计算机系统中,磁盘I/O瓶颈是影响系统性能的常见问题之一。本文将介绍如何使用iostatiotoppidstat这三个工具来定位磁盘读写瓶颈的罪魁祸首。我们将通过层层递进的排查方法,结合详细的案例介绍和命令使用参数解释,帮助你更好地理解和解决磁盘I/O瓶颈问题。

一、iostat工具

1.1 iostat简介

iostat是一个用于监控系统输入/输出设备负载的工具。它可以报告CPU使用情况和I/O设备的使用情况,帮助我们了解系统的I/O性能。

1.2 iostat命令使用

以下是一些常用的iostat命令及其参数解释:

bash 复制代码
# 显示所有设备的I/O统计信息
iostat
# 每隔2秒显示一次I/O统计信息,显示5次
iostat -d 2 5
# 显示设备的详细I/O统计信息
iostat -x

1.3 案例介绍

假设我们发现系统的磁盘I/O性能较差,可以使用以下命令来查看详细的I/O统计信息:

iostat -x 2 5

通过分析输出结果,我们可以确定哪些设备的I/O负载较高,从而进一步定位问题。

[root@Energetic ~]# iostat -x 2 5
Linux 3.10.0-1160.15.2.el7.x86_64 (Energetic ) 07/25/2024 _x86_64_(4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           3.79    0.00    2.00    0.01    0.00   94.21

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdb               0.00     0.00    0.00    0.00     0.00     0.55 39225.78     0.00   16.22    0.26   20.70   0.49   0.00
sda               0.00     0.02    0.00    0.48     0.02     3.97    16.67     0.01   28.97   24.86   28.97  22.91   1.10
sdc               0.00     0.00    0.00    0.09     0.01    11.68   260.01     0.01   60.93   23.27   60.96  21.81   0.20
dm-0              0.00     0.00    0.00    0.09     0.01    11.68   253.42     0.01   60.12   23.28   60.15  20.96   0.19

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          31.91    0.00    4.02    0.00    0.00   64.07

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdb               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
sdc               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
dm-0              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          42.06    0.00    3.04    0.00    0.00   54.89

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdb               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
sda               0.00     0.00    0.00    1.00     0.00     4.00     8.00     0.00    2.50    0.00    2.50   3.50   0.35
sdc               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
dm-0              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           7.10    0.00    2.28    0.00    0.00   90.63

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdb               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
sdc               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
dm-0              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           6.19    0.00    2.37    0.00    0.00   91.44

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdb               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
sdc               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
dm-0              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00

[root@Energetic  ~]# 

比如当前主机上的磁盘有sda、sdb、sdc、dm-0,我们首先使用iostat确定存储设备,可以根据数据存放推断具体是哪个服务进程在使用磁盘。

确定了磁盘之后我们可以使用iotop继续排查

二、iotop工具

2.1 iotop简介

iotop是一个类似于top的工具,但它专门用于显示各个进程的I/O使用情况。通过iotop,我们可以实时监控各个进程的I/O活动,找出I/O瓶颈的具体进程。

2.2 iotop命令使用

以下是一些常用的iotop命令及其参数解释:

# 以交互模式显示I/O使用情况
sudo iotop

# 显示所有进程的I/O使用情况,包括后台进程
sudo iotop -a

# 仅显示实际发生I/O操作的进程
sudo iotop -o

2.3 案例介绍

假设我们怀疑某个进程导致了磁盘I/O瓶颈,可以使用以下命令来查看各个进程的I/O使用情况:

sudo iotop -o

通过观察输出结果,我们可以找出I/O使用较高的进程,从而进一步分析和解决问题,以下是一个参考。

Total DISK READ :0.00 B/s | Total DISK WRITE :7.80 K/s
Actual DISK READ:0.00 B/s | Actual DISK WRITE:7.80 K/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND                                                                                                                        
20912 be/4 root0.00 B/s    3.90 K/s  0.00 %  0.00 % SmartAgent
 1754 be/4 root0.00 B/s    3.90 K/s  0.00 %  0.00 % python -u bin/WALinuxAgent-2.7.0.6-py2.7.egg -run-exthandlers

详细了解各个进程的性能表现可以继续使用pidstat

三、pidstat工具

3.1 pidstat简介

pidstat是一个用于监控各个进程性能的工具。它可以报告CPU、内存、I/O等资源的使用情况,帮助我们详细了解各个进程的性能表现。

3.2 pidstat命令使用

以下是一些常用的pidstat命令及其参数解释:

# 显示所有进程的I/O统计信息
pidstat -d

# 每隔2秒显示一次所有进程的I/O统计信息,显示5次
pidstat -d 2 5

# 显示指定进程的I/O统计信息
pidstat -d -p <pid>

3.3 案例介绍

假设我们需要详细分析某个进程的I/O使用情况,可以使用以下命令来查看该进程的I/O统计信息:

pidstat -d -p <pid>

通过分析输出结果,我们可以了解该进程的I/O使用情况,从而进一步定位和解决问题。

总结

通过本文介绍的iostatiotoppidstat这三个工具,我们可以有效地定位磁盘读写瓶颈的罪魁祸首。希望这些工具和方法能帮助你更好地解决磁盘I/O性能问题,提高系统的整体性能。