[轉]查看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腳本

相關文章
相關標籤/搜索