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