一、某一天登陸服務器:提示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相關的進程,一直在不斷消耗進程數,覈實後把此進程殺掉,問題終於不再出現。