ssh远程连接命令失败怎么办ssh无法远程登录怎么办linux ssh远程登录失败




ssh远程连接命令失败怎么办ssh无法远程登录怎么办linux ssh远程登录失败

2022-07-20 22:18:20 网络知识 官方管理员

ssh远程连接命令失败怎么办(ssh无法远程登录怎么办)(1)

写在前面

我遇到了什么问题:

  • 很老的一个系统bug原因升级,大概五六年没有重启机器了,4A平台上面通过ssh远程连接Linux机器,偶尔连接不上
  • 即使连接之后命令无法正常执行,执行了没有反应。
  • 即使可以执行,执行命名报-bash:fork:retry:Resourcetemporarilyunavailable.(资源暂时不可用)

出现问题的原因是什么:

Linux进程数超过了设置的最大进程数。会对系统进行资源限制,所以分配给ssh进程的资源时有时无,一些命令的bash进程会被杀调,以保证系统进程不超过设置的最大进程数,无法正常执行。即下面的第一个输出要远远小与第二个和第三个输出。如果有些接近就会出现这种问题

┌──[root@liruilongs.github.io]-[/]└─$ps-eLf|wc-l#当前进程数221┌──[root@liruilongs.github.io]-[/]└─$ulimit-u#用户的最大进程数15665┌──[root@liruilongs.github.io]-[/]└─$sysctlkernel.pid_max#内核设置的最大进程数kernel.pid_max=150000┌──[root@liruilongs.github.io]-[/]└─$

我是怎样解决的

修改内核参数,调整最大进程数限制。这里修改的话需要root权限,同时需要修改两个地方。

其一:用户登录会加载pam_limit模块,pam_limit模块读取配置文件/etc/security/limits.conf来限制用户资源的占用。可以使用ulimit的命令来查看和临时设置资源信息,也可以通过写入/etc/security/limits.conf来永久配置,配置文件在每次登录时会加载。可以用来设置ssh连接数,最大进程数等。

其二:Linux系统中内核kernel模块,有个全局的设置最大进程数的内核参数,需要修改这个参数,内核参数的设置方式有临时设置和永久设置两种方式,临时设置完就会刷新,重启失效。可以先临时设置后查看效果,然后永久设置。

人生当苦无妨,良人当归即好.——烽火戏诸侯《雪中悍刀行》

查看当前用户的活跃进程数

┌──[root@liruilongs.github.io]-[/]└─$ps-eLf|wc-l#当前进程数221

查看用户允许运行的最大进程数

┌──[root@liruilongs.github.io]-[~]└─$ulimit-acorefilesize(blocks,-c)0datasegsize(kbytes,-d)unlimitedschedulingpriority(-e)0filesize(blocks,-f)unlimitedpendingsignals(-i)15665maxlockedmemory(kbytes,-l)64maxmemorysize(kbytes,-m)unlimitedopenfiles(-n)1024pipesize(512bytes,-p)8POSIXmessagequeues(bytes,-q)819200real-timepriority(-r)0stacksize(kbytes,-s)8192cputime(seconds,-t)unlimitedmaxuserprocesses(-u)15665virtualmemory(kbytes,-v)unlimitedfilelocks(-x)unlimited#无限大┌──[root@liruilongs.github.io]-[~]└─$

ulimit为shell内建指令,可用来控制shell执行程序的资源。

语法:

ulimit[-aHS][-c<core文件上限>][-d<数据节区大小>][-f<文件大小>][-m<内存大小>][-n<文件数目>][-p<缓冲区大小>][-s<堆栈大小>][-t<CPU时间>][-u<程序数目>][-v<虚拟内存大小>]

参数:

-a

显示目前资源限制的设定。

-c

<core文件上限> 设定core文件的最大值,单位为区块。

-d

<数据节区大小> 程序数据节区的最大值,单位为KB。

-f

<文件大小> shell所能建立的最大文件,单位为区块。

-H

设定资源的硬性限制,也就是管理员所设下的限制。

-m

<内存大小> 指定可使用内存的上限,单位为KB。

-n

<文件数目> 指定同一时间最多可开启的文件数。

-p

<缓冲区大小> 指定管道缓冲区的大小,单位512字节。

-s

<堆栈大小> 指定堆栈的上限,单位为KB。

-S

设定资源的弹性限制。

-t

<CPU时间> 指定CPU使用时间的上限,单位为秒。

-u

<进程数目> 用户最多可开启的进程数目。

-v

<虚拟内存大小> 指定可使用的虚拟内存上限,单位为KB。

┌──[root@liruilongs.github.io]-[~]└─$ulimit-u15665

默认值

用户

描述

root账号

ulimit-u的值默认是/proc/sys/kernel/threads-max的值/2,即系统线程数的一半

普通账号

ulimit-u的值默认是/etc/security/limits.d/20-nproc.conf

修改用户允许运行的最大进程数

临时修改

┌──[root@liruilongs.github.io]-[~]└─$ulimit-u75535┌──[root@liruilongs.github.io]-[~]└─$ulimit-u75535┌──[root@liruilongs.github.io]-[~]└─$

永久修改

在/etc/security/limits.conf文件里添加如下内容

*softnproc65535*hardnproc65535

关键字

描述

nproc

是操作系统级别对每个用户创建的进程数的限制

nofile

是每个进程可以打开的文件数的限制

softxxx

代表警告的设定,可以超过这个设定值,但是超过后会有警告。

hardxxx

代表严格的设定,不允许超过这个设定的值。

┌──[root@liruilongs.github.io]-[~]└─$echo"*softnproc65535">>/etc/security/limits.conf┌──[root@liruilongs.github.io]-[~]└─$echo"*hardnproc65535">>/etc/security/limits.conf┌──[root@liruilongs.github.io]-[~]└─$cat/etc/security/limits.conf|grepnproc#-nproc-maxnumberofprocesses#@studenthardnproc20#@facultysoftnproc20#@facultyhardnproc50#ftphardnproc0*softnproc65535*hardnproc65535┌──[root@liruilongs.github.io]-[~]└─$

从新通过ssh的方式登录,就会刷新ulimit-u的值

查看Linux内核模块kernel允许的最大进程数

查看kernel.pid_max的内核参数

┌──[root@liruilongs.github.io]-[~]└─$sysctl-a|greppid_max#查看pid的内核参数kernel.pid_max=131072sysctl:readingkey"net.ipv6.conf.all.stable_secret"sysctl:readingkey"net.ipv6.conf.br-0e0cdf9c70b0.stable_secret"sysctl:readingkey"net.ipv6.conf.br-4b3da203747c.stable_secret"sysctl:readingkey"net.ipv6.conf.default.stable_secret"sysctl:readingkey"net.ipv6.conf.docker0.stable_secret"sysctl:readingkey"net.ipv6.conf.ens32.stable_secret"sysctl:readingkey"net.ipv6.conf.lo.stable_secret"┌──[root@liruilongs.github.io]-[/]└─$sysctlkernel.pid_maxkernel.pid_max=131072

根据变量找到对应的内核参数文件位置

┌──[root@liruilongs.github.io]-[~]└─$cd/proc/sys/kernel/;catpid_max131072

调整kernel.pid_max内核参数

临时调整内核参数

┌──[root@liruilongs.github.io]-[/proc/sys/kernel]└─$echo150000>pid_max┌──[root@liruilongs.github.io]-[/proc/sys/kernel]└─$catpid_max#临时调整内核参数150000

永久调整kernel.pid_max内核参数

┌──[root@liruilongs.github.io]-[/]└─$ps-eLf|wc-l#当前进程数2210

发表评论:

最近发表
网站分类
标签列表