記一次服務器ssh無法登陸的排查過程

一、某一天登陸服務器:提示ssh_exchange_identification: read: Connection reset by peer,以爲ssh配置有問題,網上解決方法基本爲以下兩種:

1、修改/etc/hosts.allow

      vi /etc/hosts.allow   添加如下內容:
      sshd: ALL    ##允許所有ip主機均能連接本機

      重啓sshd服務:systectl restart sshd

2、修改ssh連接數

lsof -i:22 | wc -l 查看連接數,未發現異常,還是嘗試改一下:

cat /etc/ssh/sshd_config | grep MaxStartups  默認是10
修改MaxSessions爲1000,MaxStartups也改爲1000

重啓sshd:systectl restart sshd

 

二、然而以上兩種方法對於我此次的問題無效!繼續排查......

此時通過重啓或者登陸控制檯(我無法登陸控制檯,選擇重啓),可以登陸服務器後,等待再次出現問題......

開始查找問題,通過運行幾次命令後,新狀況出現了,會有如下報錯:

-bash: forx: Cannot allocate memory

看着和內存有關係,free -m查看內存,剩餘內存很足,繼續問度娘後得知和進程數有關:

1、查看最大進程數,爲默認值
# sysctl kernel.pid_max
kernel.pid_max = 32768

2、# ps-eLf | wc -l 查看進程數爲32589,可以看到進程數已經滿了

此時終於定位到問題,進程數消耗完,導致ssh無法連接,接下來修改最大進程數:

echo 1000000 > /proc/sys/kernel/pid_max
永久生效:
echo  "kernel.pid_max=1000000" >> /etc/sysctl.conf
sysctl -p

此時認爲可以高枕無憂了,但是過了沒多久,問題又復現了,再次恢復後,開始排查消耗進程數的進程,最後發現有個git相關的進程,一直在不斷消耗進程數,覈實後把此進程殺掉,問題終於不再出現。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章