Linux系統出現hung_task_timeout_secs和blocked for more than 120 seconds的解決方法
Linux系統出現系統沒有響應。 在/var/log/message日志中出現大量的 “echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.” 和“blocked for more than 120 seconds”錯誤。
問題原因:
默認情況下, 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
sysctl -p