- A+
所属分类:未分类
linux下查看硬盘用到最多的命令应该就是iostat了,如下:
# iostat -xd
...
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.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdb 0.00 0.00 6781.67 0.00 3390.83 0.00 1.00 0.85 0.13 0.13 0.00 0.13 85.03
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
dm-1 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-2 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
...
|
如上,我们能看出sdb正在使用中,那么我最关心的是到底是哪个进程在用呢,不然不好定位问题,其实我们可以直接查出来的,直接查看所有进程使用情况cat /proc/*/io,然后根据输出内容分析:
rchar: xxxx //sendfile等系统调用中读取的字节数
wchar: xxxx //sendfile等系统调用中写入的字节数
syscr: xxxx //sendfile等系统调用的次数
syscw: xxxx //sendfile等系统调用的次数
read_bytes: xxxx //进程读取的物理I/O字节数,包括mmap pagein,在submit_bio()中统计的
write_bytes: xx //进程写出的物理I/O字节数,包括mmap pageout,在submit_bio()中统计的
cancelled_write_bytes: xx//如果进程截短了cache中的文件,事实上就减少了原本要发生的写I/O
另外就是,如果想看实时变换,用pidstat即可,如:pidstat -d 2 5,但是这命令定位不到是哪一块硬盘
网上之前给过一个脚本,执行脚本,输入设备号就可以查询,脚本如下:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#! /usr/bin/env stap
global device_of_interest
probe begin {
device_of_interest = $1
printf ("device of interest: 0x%x\n", device_of_interest)
}
probe kernel.function("submit_bio")
{
dev = $bio->bi_bdev->bd_dev
if (dev == device_of_interest)
printf ("[%s](%d) dev:0x%x rw:%d size:%d\n",
execname(), pid(), dev, $rw, $bio->bi_size)
}
这个脚本需要输入设备号,设备号的查询命令如下:
ll /dev/sdb
brw-rw----. 1 root disk 10, 20 Oct 24 15:52 /dev/sdb
Major number(12-bit): 8 i.e. 0x8
Minor number(20-bit): 16 i.e. 0x00010
合在一起得到设备号: 0x800010
执行脚本如下:
# ./dev_task_io.stp 0x800010
device of interest: 0x800010
[dd](31202) dev:0x800010 rw:0 size:512
[dd](31202) dev:0x800010 rw:0 size:512
[dd](31202) dev:0x800010 rw:0 size:512
[dd](31202) dev:0x800010 rw:0 size:512
[dd](31202) dev:0x800010 rw:0 size:512
然后就能查看出31202的进程在sdb上的使用情况
- 安卓客户端下载
- 微信扫一扫
- 微信公众号
- 微信公众号扫一扫