系統突然有個IO高峰:
想知道什么事:disk.io.util/device=vda;
disk.io.util:在統計時間內所有處理IO時間,除以總共統計時間。是個百分數,比如56.43,表示56.43%。目前我的公司就是監控這個指標報警,之后去排查問題
磁盤:隨着大數據快速發展、人工智能、自動化、雲平台。數據量指數的增長。磁盤的使用量也在增長。目前的機器基本上采用SSD或者SATA盤,一直有人比較那個好。會不會使用時間短。壽命不長。但是最新的某科技公司的測試評論。已經顯示了。SSD更安全,速度更快(SATA真的OUT)。SSD 是沒有扇區、扇面、沒有掃扇道...這些概念。本文講解一下磁盤監控項。與一些排查思想。
常用的磁盤檢查命令:
vmstat內存讀寫情況、iostat查看磁盤讀寫情況、top查看應用負責、strace -p 查看應用執行動作、sar、df、 MegaCli64、dd、hdparm、du、cat /proc/$pid/io、/proc/sys/vm/block_dump...
監控平台監控指標:
1)分區讀寫監控
測試所有已掛載分區是否可讀寫,作為基礎監控項(非0讀寫有問題)
cat /proc/mounts
2)磁盤相關采集項
df.bytes.free:磁盤可用量
df.bytes.free.percent:磁盤可用量占總量的百分比
df.bytes.total:磁盤總大小
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百分比(監控這個指標報警)
3)IO相關采集項
計算方法:每秒采集一次/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的數字
4)下面幾個值就是iostat -x 1看到的值
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%。目前我的公司就是監控這個指標報警,之后去排查問題
5)一些常見的linux磁盤的專業術語(具體請百度)
如何提高機器的磁盤性能
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文件,數據庫頻繁更新,或者查詢大表……
如何查看磁盤緩慢(來點實際的)
1)swap(當內存不足時會調用SWAP)
a.si列表示由磁盤調入內存,也就是內存進入內存交換區的數量;
b.so列表示由內存調入磁盤,也就是內存交換區進入內存的數量
c.一般情況下,si、so的值都為0,如果si、so的值長期不為0,則表示系統內存不足,需要考慮是否增加系統內存。或者擴展機器提高可用性
2)IO
a.bi列表示從塊設備讀入的數據總量(即讀磁盤,單位KB/秒)
b.bo列表示寫入到塊設備的數據總量(即寫磁盤,單位KB/秒)
這里設置的bi+bo參考值為1000,如果超過1000,而且wa值比較大,則表示系統磁盤IO性能瓶頸。