记一次服务器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相关的进程,一直在不断消耗进程数,核实后把此进程杀掉,问题终于不再出现。

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