1. 程式人生 > >Linux 伺服器 ssh 登入特別慢

Linux 伺服器 ssh 登入特別慢

被這個問題困擾了很久,通過查閱大量網路資料找到了解決方法。

網上關於這個問題的部落格文章一大堆,但是都是千篇一律、互相拷貝,關於配置UseDNS 或者GSSAPIAuthentication的,解決不了問題,浪費了我大量時間。

不能說那些方法沒用,可能不適用我的情況,下面記錄一下我的情況,為遇到相同情況的人提供一種新的解決方法。

場景

一臺Linux檔案伺服器(具體是Redhat 7.2),客戶端指令碼通過 ssh 頻繁遠端執行 ll 命令檢查是否有新檔案,並通過 scp 將檔案拷貝出來。

現象

通過ssh訪問檔案伺服器特別慢,通過ssh -v顯示登入除錯資訊發現卡在

debug1: Entering interactive session.
大概20多秒。

檔案伺服器執行時間久了會出現磁碟滿,檢查發現/var/spool/abrt/ 目錄下存在大量ccpp*資料夾,裡面都是崩潰日誌。

ccpp*資料夾裡有一個reason檔案,cat內容是 systemd-logind killed by SIGABRT。

排查

登入檔案伺服器後,首先通過top,檢查發現systemd-logind cpu 利用率達到90%-100%

關鍵

ls -ld /run/systemd/system/session-*.scope*
檢查發現/run/systemd/system/目錄下大量session-*.scope*檔案
systemctl |grep "abandoned" |grep -e "-[[:digit:]]" |sed "s/\.scope.*/.scope/"
檢查發現大量session-*.scope.

原因

這應該是系統的一個缺陷,跟systemd有關,systemd-logind主要功能是為每一個登陸session建立一個systemd角度的cgroup管理物件,那些abandoned session應該就是沒有及時釋放的。

解決

手動清理一下

systemctl |grep "abandoned" |grep -e "-[[:digit:]]" |sed "s/\.scope.*/.scope/" |xargs systemctl stop
可以將這條命令加入crontab或者指令碼中定時執行

小結

可能我通過指令碼頻繁ssh和scp的方法不太好,引起了這個問題,但是總算解決了,

裡面有詳細問題描述以及解決方法以及討論,本文的解決方法由part-timeDev 提出