[转]查看linux服务器硬盘IO读写负载

最近一台linux服务器出现异常,系统反映很慢,相应的应用程序也没法反映,并且还出现死机的状况,通过几天的观察了解,发现服务器压力很大,主要的压力来自硬盘的IO访问已经达到100%linux

  为了方便各位和本身从此遇到此类问题能尽快解决,我这里将查看linux服务器硬盘IO访问负荷的方法同你们一块儿分享:ios

  首先 、用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 (指CPU等待磁盘写入完成的时间)并发

  IO等待所占用的CPU时间的百分比,高过30%时IO压力高测试

  其次、 用iostat -x 1 10  (-x 选项将用于显示和io相关的扩展数据; 1表示间隔;10表示时间)spa

  若是 iostat 没有,要  yum install sysstat  server

avg-cpu:  %user   %nice    %sys %iowait   %idle
  0.00       0.00     0.25    33.46    66.29
  Device:    rrqm/s  wrqm/s   r/s    w/s     rsec/s   wsec/s    rkB/s    wkB/s avgrq-sz avgqu-sz   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   1122  17.00  9.00  192.00 9216.00    96.00  4608.00   123.79   137.23 1033.43  13.17 100.10
  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

  查看%util 100.10 %idle 66.29blog

  %util: 在统计时间内全部处理IO时间,除以总共统计时间。例如,若是统计间隔1秒,该设备有0.8秒在处理IO,而0.2秒闲置,那么该设备的%util = 0.8/1 = 80%,因此该参数暗示了设备的繁忙程度。通常地,若是该参数是100%表示设备已经接近满负荷运行了(固然若是是多磁盘,即便%util是100%,由于磁盘的并发能力,因此磁盘使用未必就到了瓶颈)。进程

  idle小于70% IO压力就较大了,通常读取速度有较多的wait.资源

  同时能够结合vmstat 查看查看b参数(等待资源的进程数)  

vmstat -1

  若是你想对硬盘作一个IO负荷的压力测试能够用以下命令

  time dd if=/dev/zero bs=1M count=2048 of=direct_2G

  此命令为在当前目录下新建一个2G的文件

  咱们在新建文件夹的同时来测试IO的负荷状况

  再经过以下脚本查看高峰的进程io状况  

monitor_io_stats.sh
  #!/bin/sh
  /etc/init.d/syslog stop
  echo 1 > /proc/sys/vm/block_dump
  sleep 60
  dmesg | awk '/(READ|WRITE|dirtied)/ {process[$1]++} END {for (x in process) \  print process[x],x}' |sort -nr |awk '{print $2 " " $1}' | \
  head -n 10
  echo 0 > /proc/sys/vm/block_dump
  /etc/init.d/syslog start

  或者用iodump.pl脚本

相关文章
相关标签/搜索