天天看點

Linux系統hung住無法ssh登入的解決辦法

作者:JasonTang

摘要:今天有台伺服器的應用沒有響應,SSH遠端也無法登入。通過控制台界面檢視該Linux系統,出現多個錯誤資訊echo 0 /proc/sys/kernel/hung_task_timeout,初步斷定系統hung住了。

本文将呈現本初問題的解決過程,詳細内容請參考下文。

一、出現問題

1、錯誤資訊

Linux系統hung住無法ssh登入的解決辦法

2、問題狀況

系統中的緩存資料過大導緻系統中的應用無法通路,SSH遠端登入不成功。

二、分析問題

說明:檔案緩存是一項重要的性能改進,在大多數情況下,讀緩存在絕大多數情況下是有益無害的(程式可以直接從RAM中讀取資料)。寫緩存比較複雜,Linux核心将磁盤寫入緩存,過段時間再異步将它們重新整理到磁盤。這對加速磁盤I/O有很好的效果,但是當資料未寫入磁盤時,丢失資料的可能性會增加。

當然,也存在緩存被寫爆的情況。還可能出現一次性往磁盤寫入過多資料,以緻使系統卡頓。這些卡頓是因為系統認為,緩存太大用異步的方式來不及把它們都寫進磁盤,于是切換到同步的方式寫入。

1、預設情況下, Linux會最多使用40%的可用記憶體作為檔案系統緩存。當超過這個門檻值後,檔案系統會把将緩存中的記憶體全部寫入磁盤,導緻後續的IO請求都是同步的。

将緩存寫入磁盤時,有一個預設120秒的逾時時間。 出現上面的問題的原因是IO子系統的處理速度不夠快,不能在120秒将緩存中的資料全部寫入磁盤。IO系統響應緩慢,導緻越來越多的請求堆積,最終系統記憶體全部被占用,導緻系統失去響應。

2、初步認為應該是記憶體的清理機制出問題,優化處理。

三、解決問題

1、根據應用程式實際情況,由于伺服器上所運作的應用都是需要短時間響應大量的通路,是以需要對vm.dirty_ratio,vm.dirty_background_ratio兩個參數進行調優設定。增加方框内的兩項内容:

Linux系統hung住無法ssh登入的解決辦法

2、需要說明的是,先達到vm.dirty_background_ratio的條件然後觸發flush程序進行異步的回寫操作,但是這一過程中應用程序仍然可以進行寫操作,如果多個應用程序寫入的量大于flush程序刷出的量那自然會達到vm.dirty_ratio這個參數所設定的坎,此時作業系統會轉入同步地處理髒頁的過程,阻塞應用程序。

Linux系統hung住無法ssh登入的解決辦法

3、通過修改/etc/sysctl.conf檔案使得系統配置永久生效。

首先執行指令# cp /etc/sysctl.conf /etc/sysctl.conf20230317備份sysctl.conf檔案。

然後執行指令# vim /etc/sysctl.conf 在後面加入以下兩行。

vm.dirty_background_ratio=5

vm.dirty_ratio=10

最後reboot重新開機系統生效。

Linux系統hung住無法ssh登入的解決辦法
Linux系統hung住無法ssh登入的解決辦法

繼續閱讀