# for x in `seq 1 1 10`; do ps -eo state,pid,cmd | grep "^D"; echo "----"; sleep 5; done
D 248 [jbd2/dm-0-8]
D 16528 bonnie++ -n 0 -u 0 -r 239 -s 478 -f -b -d /tmp
----
D 22 [kswapd0]
D 16528 bonnie++ -n 0 -u 0 -r 239 -s 478 -f -b -d /tmp
----
D 22 [kswapd0]
D 16528 bonnie++ -n 0 -u 0 -r 239 -s 478 -f -b -d /tmp
----
D 22 [kswapd0]
D 16528 bonnie++ -n 0 -u 0 -r 239 -s 478 -f -b -d /tmp
----
D 16528 bonnie++ -n 0 -u 0 -r 239 -s 478 -f -b -d /tmp
上边的例子会循环的输出状态是D的进程,每5秒一次 , 一共10次
从输出我们可以知道 bonnie++ 的pid是16528,在waiting,bonnie++看起来就是我们想找到的进程,但是,只是从它的状态,我们没有办法证明就是bonnie++引起的I/O等待 。
为了证明,我们可以可以查看/proc,每个进程目录下都有一个叫io的文件 , 里边保存这和iotop类似的信息 。
# cat /proc/16528/io
rchar: 48752567
wchar: 549961789
syscr: 5967
syscw: 67138
read_bytes: 49020928
write_bytes: 549961728
cancelled_write_bytes: 0
read_bytes和write_bytes是这个进程从磁盘读写的字节,在这个例子中,bonnie++进程读取了46M的数据并且写入了524MB的数据到磁盘上 。
4. 找出哪个文件正在被大量写入
lsof 命令可以展示一个进程打开的所有文件 。从这个列表中,我们可以找到哪个文件被写入 。
# lsof -p 16528
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bonnie++ 16528 root cwd DIR 252,0 4096 130597 /tmp
truncated
bonnie++ 16528 root 8u REG 252,0 501219328 131869 /tmp/Bonnie.16528
bonnie++ 16528 root 9u REG 252,0 501219328 131869 /tmp/Bonnie.16528
bonnie++ 16528 root 10u REG 252,0 501219328 131869 /tmp/Bonnie.16528
bonnie++ 16528 root 11u REG 252,0 501219328 131869 /tmp/Bonnie.16528
bonnie++ 16528 root 12u REG 252,0 501219328 131869 strong/tmp/Bonnie.16528/strong
# df /tmp
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/workstation-root 7667140 2628608 4653920 37% /
# pvdisplay
--- Physical volume ---
PV Name /dev/sda5
VG Name workstation
PV Size 7.76 GiB / not usable 2.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 1986
Free PE 8
Allocated PE 1978
PV UUID CLbABb-GcLB-l5z3-TCj3-IOK3-SQ2p-RDPW5S
使用pvdisplay可以看到,pv设备就是/dev/sda5,正是我们前面找到的sda 。
参考文档:
linux系统如何查看网络IO?首先 、用top命令查看
top - 16:15:05 up 6 days,6:25,2 users,load average: 1.45, 1.77, 2.14
Tasks: 147 total,1 running, 146 sleeping,0 stopped,0 zombie
Cpu(s):0.2% us,0.2% sy,0.0% ni, 86.9% id, 12.6% wa,0.0% hi,0.0% si
Mem:4037872k total,4003648k used,34224k free,5512k buffers
Swap:7164948k total,629192k used,6535756k free,3511184k cached
查看12.6% wa
IO等待所占用的CPU时间的百分比,高过30%时IO压力高
其次、 用iostat -x 1 10
avg-cpu:%user%nice%sys %iowait%idle
0.000.000.2533.4666.29
Device:rrqm/swrqm/sr/sw/srsec/swsec/srkB/swkB/s avgrq-sz avgqu-szawaitsvctm%util
sda0.000.000.000.000.000.000.000.000.000.000.000.000.00
sdb0.00112217.009.00192.00 9216.0096.004608.00123.79137.23 1033.4313.17 100.10
sdc0.000.000.000.000.000.000.000.000.000.000.000.000.00
查看%util 100.10 %idle 66.29
如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈 。
idle小于70% IO压力就较大了,一般读取速度有较多的wait.
同时可以结合vmstat 查看查看b参数(等待资源的进程数)
vmstat -1
如果你想对硬盘做一个IO负荷的压力测试可以用如下命令
time dd if=/dev/zero bs=1M count=2048 of=direct_2G
推荐阅读
- 幻神txt全集下载,幻神电子书
- python判断有几个数字,python如何判断数字有几位
- 鱼缸消毒有什么危害视频,鱼缸消毒剂怎样使用
- 超多人同时射击游戏,什么多人射击游戏好玩
- mysql里面怎么加字段,mysql中怎么加字段
- CSOL单机版下载游戏软件,csol单机版下载教程
- 在linux未找到该命令,linux提示未找到imp命令
- c语言中函数的作用域 c语言中函数有哪几部分组成
- move命令linux,move命令详解