"echo 0 /proc/sys/kernel/hung_task_timeout_secs" disable this message

問題現象:

 

問題緣由:  

  默認狀況下, Linux會最多使用40%的可用內存做爲文件系統緩存。當超過這個閾值後,文件系統會把將緩存中的內存所有寫入磁盤, 致使後續的IO請求都是同步的。緩存

  將緩存寫入磁盤時,有一個默認120秒的超時時間。 出現上面的問題的緣由是IO子系統的處理速度不夠快,不能在120秒將緩存中的數據所有寫入磁盤。異步

  IO系統響應緩慢,致使愈來愈多的請求堆積,最終系統內存所有被佔用,致使系統失去響應。spa

 

解決辦法:  

  根據應用程序狀況,對vm.dirty_ratio,vm.dirty_background_ratio兩個參數進行調優設置。 例如,推薦以下設置:操作系統

  # sysctl -w vm.dirty_ratio=10blog

  # sysctl -w vm.dirty_background_ratio=5進程

  # sysctl -p內存

  

  若是系統永久生效,修改/etc/sysctl.conf文件。加入以下兩行:同步

  #vi /etc/sysctl.conf io

  vm.dirty_background_ratio = 5pdf

  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這個參數所設定的坎,此時操做系統會轉入同步地處理髒頁的過程,阻塞應用進程。
相關文章
相關標籤/搜索