記一次dirty_ratio引起的線上事故


故障時間軸

  • 發生時間:2020-09-14 06:40
  • 發現時間:2020-09-14 06:41
  • 響應時間:2020-09-14 07:42

故障表現

  1. 磁盤>75% ,最終累計到100%

  2. Load1 遠遠>8

  3. CPU & MEM > 85%

故障根因

Kernel報錯如下:

默認情況下, Linux會最多使用40%的可用內存作為文件系統緩存。當超過這個閾值后,文件系統會把將緩存中的內存全部寫入磁盤, 導致后續的IO請求都是同步的。

將緩存寫入磁盤時,有一個默認120秒的超時時間。 出現此次問題的原因是IO子系統的處理速度不夠快,不能在120秒將緩存中的數據全部寫入磁盤。IO系統響應緩慢,導致越來越多的請求堆積,最終系統內存全部被占用,導致系統失去響應。

改進措施

此次異常報錯出的問題以及改進措施

問題 改進措施 負責人 完成時間
磁盤100%,沒有自動清理 補充自動清理腳本或者機制 xx
內核參數調整 vm.dirty_ratio=5 vm.dirty_background_ratio=10 xx

內核參數說明:

  • vm.dirty_background_ratio:這個參數指定了當文件系統緩存臟頁數量達到系統內存百分之多少時(如5%)就會觸發pdflush/flush/kdmflush等后台回寫進程運行,將一定緩存的臟頁異步地刷入外存;
  • vm.dirty_ratio:而這個參數則指定了當文件系統緩存臟頁數量達到系統內存百分之多少時(如10%),系統不得不開始處理緩存臟頁(因為此時臟頁數量已經比較多,為了避免數據丟失需要將一定臟頁刷入外存);在此過程中很多應用進程可能會因為系統轉而處理文件IO而阻塞。

系統當前值:

#sysctl -a| grep dirty
vm.dirty_background_ratio = 10
vm.dirty_background_bytes = 0
vm.dirty_ratio = 20
vm.dirty_bytes = 0
vm.dirty_writeback_centisecs = 500
vm.dirty_expire_centisecs = 3000


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM