磁盤:隨着大數據快速發展、人工智能、自動化、雲平臺。數據量指數的增加。磁盤的使用量也在增加。目前的機器基本上採用SSD或者SATA盤,一直有人比較那個好。會不會使用時間短。壽命不長。可是最新的某科技公司的測試評論。已經顯示了。SSD更安全,速度更快(SATA真的OUT)。SSD 是沒有扇區、扇面、沒有掃扇道...這些概念。本文講解一下磁盤監控項。與一些排查思想。php
vmstat內存讀寫狀況、iostat查看磁盤讀寫狀況、top查看應用負責、strace -p 查看應用執行動做、sar、df、 MegaCli6四、dd、hdparm、du、cat /proc/$pid/io、/proc/sys/vm/block_dump...java
測試全部已掛載分區是否可讀寫,做爲基礎監控項(非0讀寫有問題)node
cat /proc/mounts linux
df.bytes.free:磁盤可用量ios
df.bytes.free.percent:磁盤可用量佔總量的百分比nginx
df.bytes.total:磁盤總大小web
df.bytes.used:磁盤已用大小數據庫
df.bytes.used.percent:磁盤已用大小佔總量的百分比(監控這個指標報警)緩存
df.inodes.total:inode總數安全
df.inodes.free:磁盤可用inode數目
df.inodes.free.percent:可用inode百分比
df.inodes.used:磁盤已用的inode數據
df.inodes.used.percent:已用inode百分比(監控這個指標報警)
計算方法:每秒採集一次/proc/diskstats
disk.io.ios_in_progress:當前正在運行的實際I / O請求數
disk.io.msec_read:全部讀取花費的總計ms數
disk.io.msec_total:ios_in_progress> = 1的時間量
disk.io.msec_weighted_total:統計最近的I / O完成時間和積壓。
disk.io.msec_write:全部寫入所花費的總時間
disk.io.read_merged:相鄰的讀取請求合併在單個req中
disk.io.read_requests:讀取成功完成的總數(彙總)
disk.io.read_sectors:成功讀取的扇區總數
disk.io.write_merged:相鄰的寫請求合併在單個請求中
disk.io.write_requests:成功寫入磁盤的總次數
disk.io.write_sectors:成功寫入扇區數的總次數
disk.io.read_bytes:單位是byte的數字
disk.io.write_bytes:單位是byte的數字
disk.io.avgrq_sz:平均請求扇區的大小
disk.io.avgqu-sz:是平均請求隊列的長度。毫無疑問,隊列長度越短越好
disk.io.await:每個IO請求的處理的平均時間(單位是毫秒)
disk.io.svctm:表示平均每次設備I/O操做的服務時間(以毫秒爲單位)
disk.io.util:在統計時間內全部處理IO時間,除以總共統計時間。是個百分數,好比56.43,表示56.43%。目前個人公司就是監控這個指標報警,以後去排查問題
1)首先想到的就是換性能好的磁盤。這個好像是最高效的方式,SSD具備更好的性能,訪問數據都是隨機的。更小的功耗。LVM(邏輯卷)的擴容。
2)而後就是Raid (RAID0, RAID1, RAID5, RAID0+1)。經過raid實際數據在多塊磁盤的併發讀寫和數據備份。加強磁盤的可用性和容錯能力
3)肯定機器的上線的需求。運維人員必定要知道,機器的使用場景。小文件(佔用Inode例如圖片)讀寫瓶頸是磁盤的尋址(tps),大文件(佔用磁盤容量)讀寫的性能瓶頸是帶寬
4)Linux有一句話(一切皆文件)。空閒內存做文件系統訪問的cache,所以系統內存越大存儲系統的性能也越好
5)最後就是架構層面的優化,CDN(nginx、squid..),機房內部反向代理(squid),memcached,消息隊列,緩存機制。總之就是靜態的採用緩存機制。非靜態的優化性能,減少調用磁盤
1)應用程序設計的缺陷和數據庫查詢的濫用、操做人員的失誤、都有可能致使性能問題
2)性能瓶頸多是由於程序設計缺陷/內存過小/磁盤有損壞、性能差,可是最終都是CPU耗盡的結果(這就話很實用),系統負載極高,響應遲緩,甚至暫時失去響應。登錄不上機器。
3)因爲linux的swap機制。物理內存不夠時會使用交換內存(能夠調優參數),大量使用swap會帶來磁盤I0進而致使CPU消耗
4)可能形成cpu瓶頸的問題:頻繁執Perl,php,java程序生成動態web;數據庫查詢大量的where子句、order by/group by排序……
5)可能形成內存瓶頸問題:高併發用戶訪問、系統進程多(每一個進程都會消耗內存,駐留內存),java內存泄露……
6)可能形成磁盤IO瓶頸問題:生成cache文件,數據庫頻繁更新,或者查詢大表……
a.si列表示由磁盤調入內存,也就是內存進入內存交換區的數量;
b.so列表示由內存調入磁盤,也就是內存交換區進入內存的數量
c.通常狀況下,si、so的值都爲0,若是si、so的值長期不爲0,則表示系統內存不足,須要考慮是否增長系統內存。或者擴展機器提升可用性
a.bi列表示從塊設備讀入的數據總量(即讀磁盤,單位KB/秒)
b.bo列表示寫入到塊設備的數據總量(即寫磁盤,單位KB/秒)
這裏設置的bi+bo參考值爲1000,若是超過1000,並且wa值比較大,則表示系統磁盤IO性能瓶頸。