Linux磁盘io分析

打印 上一主题 下一主题

主题 821|帖子 821|积分 2463

命令一:iostat
iostat 是 Linux 系统中用于监控系统输入输出设备(如磁盘)负载情况的工具。下面是 iostat -dx 1 5 命令输出中每个字段的解释。该命令以 1 秒的隔断报告 5 次设备统计信息,而且使用 -d 选项体现设备(磁盘)统计信息,-x 选项体现扩展统计信息。
Device: 体现设备名称。这可能是一个物理磁盘(如 sda)、一个逻辑卷管理器(LVM)逻辑卷(如 dm-0)、一个分区或是一个循环设备(如 loop0)。
rrqm/s: 每秒合并到读取请求队列中的请求数量。这是磁盘调理器为了减少磁盘 I/O 而合并的读取请求数。
wrqm/s: 每秒合并到写入请求队列中的请求数量。这也是磁盘调理器为了减少磁盘 I/O 而合并的写入请求数。
r/s: 每秒完成的读取请求数量。
w/s: 每秒完成的写入请求数量。
rkB/s: 每秒从设备读取的千字节数。
wkB/s: 每秒向设备写入的千字节数。
avgrq-sz: 平均每次设备 I/O 操作的数据巨细(以扇区为单位)。
avgqu-sz: 平均 I/O 队列长度。这个数字表示期待处理的 I/O 请求的平均数量。
await: 平均每次 I/O 请求期待的时间(以毫秒为单位)。这包罗请求被发送到设备以及请求被处理的时间。
r_await: 平均每次读取请求期待的时间(以毫秒为单位)。
w_await: 平均每次写入请求期待的时间(以毫秒为单位)。
svctm: 平均每次 I/O 请求的服务时间(以毫秒为单位)。这是设备处理请求所需的时间,不包罗任多么待时间。
%util: 设备使用率。这是设备忙于处理 I/O 请求的时间百分比。值为 100% 表示设备不绝在处理 I/O 请求,没有空闲时间。
这些字段提供了关于磁盘 I/O 性能的关键指标,可以帮助识别系统瓶颈或性能问题。例如,高 %util 值和长 await 时间可能表明磁盘 I/O 是系统性能的瓶颈。

查抄系统日志和历程
查看系统日志:
使用journalctl命令查看系统日志,特别是与磁盘I/O相干的日志信息。
关注是否有非常的错误信息或告诫信息。
查找占用大量资源的历程:
使用ps aux --sort=-%mem | head和ps aux --sort=-%cpu | head命令查找占用大量内存和CPU资源的历程。
这些历程可能也是导致磁盘写IO高的缘故原由之一。
查找正在写入的文件:
使用lsof | grep -w "REG" | grep -E 'W|w'命令查找当前正在被写入的文件。
这有助于确定哪些历程正在举行大量的写操作。

1、iostat -d 用这个看看哪个磁盘写比力多
[root@localhost log]# iostat -d
Linux 3.10.0-862.el7.x86_64 (localhost.localdomain)     10/08/2024     _x86_64_    (4 CPU)
Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sdb               3.18         0.00      1587.49       7370 19874501650
sda              19.25         2.01      6981.18   25200447 87400770688
dm-0              0.25         1.74         1.43   21743216   17947797
dm-1              0.00         0.00         0.00       2240          0
dm-2             22.25         0.27      8567.23    3427571 107257319283
Device: 体现的是磁盘设备的名称。在这个例子中,设备名称是 sdb。
tps (Transfers Per Second): 每秒传输次数,表示设备每秒完成的 I/O 请求数。这个数值越大,表示设备的 I/O 吞吐量越高。在给出的例子中,sdb 设备的 tps 是 3.18,意味着每秒约莫有 3.18 个 I/O 请求被处理。
kB_read/s (Kilobytes Read Per Second): 每秒从设备读取的千字节数。这个数值反映了设备读取数据的速度。在给出的例子中,sdb 设备的读取速度是 0.00 KB/s,意味着在监控期间险些没有读取操作。
kB_wrtn/s (Kilobytes Written Per Second): 每秒向设备写入的千字节数。这个数值反映了设备写入数据的速度。在给出的例子中,sdb 设备的写入速度是 1587.49 KB/s,意味着每秒约莫有 1587.49 KB 的数据被写入设备。
kB_read (Total Kilobytes Read): 自系统启动以来从设备读取的总千字节数。这个数值提供了设备读取操作的历史累计数据。在给出的例子中,sdb 设备自启动以来读取的总数据量是 7370 KB。
kB_wrtn (Total Kilobytes Written): 自系统启动以来向设备写入的总千字节数。这个数值提供了设备写入操作的历史累计数据。在给出的例子中,sdb 设备自启动以来写入的总数据量是 19874501650 KB,这是一个非常大的数值,表明设备举行了大量的写入操作。
2、ls -l /dev/mapper 确认dm-2的逻辑卷名称
[root@localhost log]# ls -l /dev/mapper
total 0
lrwxrwxrwx. 1 root root       7 May 16 21:02 centos-home -> ../dm-2
lrwxrwxrwx. 1 root root       7 May 16 21:02 centos-root -> ../dm-0
lrwxrwxrwx. 1 root root       7 May 16 21:02 centos-swap -> ../dm-1
crw-------. 1 root root 10, 236 May 16 21:02 control
centos是卷组的名称,home是逻辑卷的名称;
3、使用 lsof 来查看哪个历程正在使用 dm-2:
lsof /dev/mapper/centos-home

#查看/home目录下哪个文件正在被操作(该命令需要进入到指定的目录)
[root@localhost log]# lsof +D /home/
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF      NODE NAME
bash    65993 root  cwd    DIR  253,2    12288 537322688 /home/data/log
lsof    72878 root  cwd    DIR  253,2    12288 537322688 /home/data/log
lsof    72879 root  cwd    DIR  253,2    12288 537322688 /home/data/log
COMMAND: 这是正在运行的命令的名称。在这个例子中,它是bash,意味着有一个Bash shell历程正在运行。
PID: 这是历程的ID(Process ID)。在这个例子中,历程ID是65993。
USER: 这是运行该历程的用户。在这个例子中,用户是root。
FD: 这是文件形貌符(File Descriptor)。文件形貌符是一个用于标识被历程打开的文件或套接字等的整数。在这个例子中,cwd代表当前工作目录(current working directory),它是一个特殊的文件形貌符,不是通过open等系统调用打开的,但lsof会列出它来表示历程的当前工作目录。
TYPE: 这是文件类型。在这个例子中,DIR代表目录。
DEVICE: 这是设备ID,通常由主设备号和次设备号构成,中心用逗号分隔。在这个例子中,设备ID是253,2。
SIZE/OFF: 这是文件巨细或偏移量。对于目录来说,这个值通常表示目录在磁盘上占用的空间巨细。在这个例子中,巨细是12288字节。
NODE: 这是文件的inode号。Inode是文件系统用于存储文件元数据的布局。在这个例子中,inode号是537322688。
NAME: 这是文件的路径名。在这个例子中,路径是/home/data/log。
以是,这个输出表示有一个Bash shell历程(PID 65993,用户为root)正在运行,而且它的当前工作目录是/home/data/log。由于+D选项的作用,lsof列出了所有访问/home目录(或其子目录)的历程,而在这个例子中,/home/data/log是/home的一个子目录。
命令二:vmstat
[root@localhost ~]# vmstat 
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 221244   5280 15284712    0    0     0  2121    0    0  0  1 91  8  0
bi列表示从块设备读取的块数量(Block In),bo列表示写出到块设备的块数量(Block Out),这两列数据通常反映了硬盘的IO活动。
-d或--disk:体现磁盘统计信息。这个选项会列出磁盘的读写情况,包罗读取和写入的扇区数、合并的读写请求数、读写操作的毫秒数等。
-D或--disk-sum:汇总磁盘统计信息。这个选项会提供磁盘IO的汇总信息,如总的读写次数、合并的读写请求数、读写扇区数等。
终极大招:
1、查看所有举行io操作的历程:
pidstat -d 3
2、锁定正在读写文件
lsof -p pid

命令三:iotop
动态及时查看当前系统现实写入写出的历程
iotop -oP只体现有I/O行为的历程
[root@localhost ~]# iotop 
Total DISK READ :    0.00 B/s | Total DISK WRITE :       0.00 B/s
Actual DISK READ:    0.00 B/s | Actual DISK WRITE:       0.00 B/s
   TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND                                                                      
     1 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % systemd --switched-root --system --deserialize 22
     2 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kthreadd]
     3 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/0]
     5 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kworker/0:0H]
   518 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kdmflush]
     7 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/0]
     8 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [rcu_bh]
     9 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [rcu_sched]
    10 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [lru-add-drain]
Actual DISK READ:现实读取巨细
Actual DISK WRITE:现实写入巨细

测试IO性能:
1. dd命令:dd命令可以用于复制文件、转换文件格式和创建空文件。也可以用它来测试磁盘IO性能。以下是一个测试磁盘读写性能的示例命令:
“`
dd if=/dev/zero of=testfile bs=1M count=1000 oflag=direct
“`
该命令会创建一个名为testfile的文件,此中`if=/dev/zero`表示输入的数据泉源是一个无穷的数据流,`of=testfile`表示输出的文件是testfile,`bs=1M`表示每次操作的块巨细为1MB,`count=1000`表示总共执行1000次操作,`oflag=direct`表示使用直接IO模式。执行完后,可以通过观察命令的输出来查抄磁盘的读写性能。
2. fio命令:fio是一个灵活而强大的IO性能测试工具,可以测试磁盘、网络和文件系统的性能。它可以根据用户需求自定义测试场景,并生成具体的测试报告。以下是一个简朴的示例命令:
“`
fio –name=test –runtime=60s –size=1G –ioengine=libaio –direct=1 –bs=4k –rw=randread –numjobs=1 –time_based
“`
该命令会创建一个1GB巨细的测试文件,使用随机读取的方式举行IO操作,连续运行60秒。可以根据需要调整参数来测试不同的IO场景。

Linux如何把io读写清零:
在Linux中,可以使用dd命令将I/O设备(如硬盘、USB等)的所有扇区写入零来执行清零操作。这样可以重置设备上的所有数据,以确保数据的安全性。
以下是使用dd命令将设备/dev/sdx(替换为现实设备名称)的内容写入零的示例:
dd if=/dev/zero of=/dev/sdx bs=1M status=progress
参数解释:
if=/dev/zero:输入文件是/dev/zero,它提供了无限的零字节。
of=/dev/sdx:输出文件是要清零的设备。
bs=1M:设置块巨细为1MB,用于读写,增加速度。
status=progress:在写入过程中体现进度信息。
告诫:此操作会立刻删除设备上的所有数据,而且无法规复。在执行此操作之前,请确保已经备份了所有告急数据。
注意:在执行此类操作之前,请确保设备没有被挂载,否则你需要先卸载设备。另外,请务必警惕使用,错误的设备名称可能会导致数据丢失。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

王海鱼

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表