歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 系統性能檢測--磁盤io

系統性能檢測--磁盤io

日期:2017/2/28 16:00:06   编辑:Linux教程

先羅列一些工作中用得比較多的系統檢測工具吧,top、ps、iostat、vmstat、free (-m)、tcpdump...

1.磁盤io相對於內存讀寫是巨慢無比的,數據庫操作也是,所以在一些io密集的程序裡面可以用內存映射、memcached來進行優化

2.就個人理解來描述一下磁盤訪問

cpu訪問文件數據時,先在cpu cache和memory查找,沒找到就通知io子系統去磁盤加載(數據以內存內的形式加載,一個內存頁一般是4kb)(MPF,major page fault)

如果在內存(寫緩存buffer,讀緩存cached)中可以找到就不用有磁盤操作了(MnPF,minor page fault)

後者速度快多了,所以在頻繁的io操作後內存中有很多空間用於緩存磁盤數據,這時候如果看到free的空間不足並不表示機器真的內存不足,當有內存需求時內核會釋放這些用於磁盤緩存的內存空間,下圖中cached就是緩存所占的空間,內存實際剩余是free+buffers+cached = 117+10+508。但是如果Swap used很多就表示系統內存真的很緊張,使用交換分區的速度很慢,因為它是保存在磁盤上的。

  1. www.linuxidc.com@linuxidc:~$ free -m
  2. total used free shared buffers cached
  3. Mem: 1889 1771 117 0 10 508
  4. -/+ buffers/cache: 1252 636
  5. Swap: 4766 282 4484

3.內存頁類型:

read page:只讀,包括庫文件之類的

dirty page(write page):寫過需要同步到磁盤的數據,我想在fprintf之後緊接著調用fflush()之類的函數應該可以從這裡寫回磁盤

anonymous page:跟磁盤文件無關,歸某些進程所有,內存不足時這些數據可能掉入Swap

4.計算IOPS(每秒響應的磁盤io次數):

假如磁盤的RPM是10000(RPM,Revolutions Per Minute,每分鐘旋轉圈數)

則,磁盤的RD(Rotational Delay,旋轉半圈的毫秒數)是(1/(10000/(60*1000)))/2=3

加上磁頭的DS(Disk Seek,磁頭尋道的毫秒數)平均是3MS

加上2MS延遲

最終的IOPS是8ms,內核每次的io請求磁盤需要8ms來完成,就是10000RPM的磁盤每秒可以提供大約125次IOPS

根據

5.實際io情況要根據程序來考量,郵件服io數據小而請求頻繁,屬於Random IO,流媒體服務io數據大而請求頻度低,屬於Sequential IO

前者對iops要求比較高,後者對讀寫大量數據能力(KB per request, (rkB/s)/(r/s)或者(wkB/s)/(w/s))要求比較高

當用top或者iostat查看發現iowait比較高時說明有io瓶頸

  1. www.linuxidc.com@linuxidc:~$ iostat -kdx 2
  2. Linux 3.0.0-14-generic (HP) 2012年01月08日 _x86_64_ (4 CPU)
  3. Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
  4. sda 0.60 2.08 2.86 1.20 65.79 37.79 51.09 0.37 91.11 34.56 225.77 14.59 5.92
  5. Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
  6. sda 0.00 0.00 2.00 0.00 64.00 0.00 64.00 0.02 9.00 9.00 0.00 5.00 1.00
  7. Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
  8. sda 0.00 0.50 0.50 1.00 2.00 6.00 10.67 0.01 9.33 8.00 10.00 9.33 1.40
Copyright © Linux教程網 All Rights Reserved