問題現象:

問題原因:
默認情況下, Linux會最多使用40%的可用記憶體作為檔案系統快取,當超過這個閾值后,檔案系統會把將快取中的記憶體全部寫入磁盤, 導致后續的IO請求都是同步的,
將快取寫入磁盤時,有一個默認120秒的超時時間, 出現上面的問題的原因是IO子系統的處理速度不夠快,不能在120秒將快取中的資料全部寫入磁盤,
IO系統回應緩慢,導致越來越多的請求堆積,最終系統記憶體全部被占用,導致系統失去回應,
解決辦法:
根據應用程式情況,對vm.dirty_ratio,vm.dirty_background_ratio兩個引數進行調優設定, 例如,推薦如下設定:
# sysctl -w vm.dirty_ratio=10
# sysctl -w vm.dirty_background_ratio=5
# sysctl -p
如果系統永久生效,修改/etc/sysctl.conf檔案,加入如下兩行:
#vi /etc/sysctl.conf
vm.dirty_background_ratio = 5
vm.dirty_ratio = 10
重啟系統生效
附錄:
vm.dirty_background_ratio:這個引數指定了當檔案系統快取臟頁數量達到系統記憶體百分之多少時(如5%)就會觸發pdflush/flush/kdmflush等后臺回寫行程運行,將一定快取的臟頁異步地刷入外存; vm.dirty_ratio:而這個引數則指定了當檔案系統快取臟頁數量達到系統記憶體百分之多少時(如10%),系統不得不開始處理快取臟頁(因為此時臟頁數量已經比較多,為了避免資料丟失需要將一定臟頁刷入外存);在此程序中很多應用行程可能會因為系統轉而處理檔案IO而阻塞, 先達到vm.dirty_background_ratio的條件然后觸發flush行程進行異步的回寫操作,但是這一程序中應用行程仍然可以進行寫操作,如果多個應用行程寫入的量大于flush行程刷出的量那自然會達到vm.dirty_ratio這個引數所設定的坎,此時作業系統會轉入同步地處理臟頁的程序,阻塞應用行程,
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/155270.html
標籤:Linux
