您当前的位置:首页 > 电脑百科 > 软件技术 > 操作系统 > linux

SSH远程连接命令执行没反应不报错问题解决

时间:2022-01-13 09:33:26  来源:  作者:山河已无恙i

写在前面


我遇到了什么问题:

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

出现问题的原因是什么:

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

┌──[root@liruilongs.github.io]-[/]
└─$ ps -eLf | wc -l  # 当前进程数
221
┌──[root@liruilongs.github.io]-[/]
└─$ ulimit  -u  # 用户的最大进程数
15665
┌──[root@liruilongs.github.io]-[/]
└─$ sysctl kernel.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  -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 15665
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 15665
virtual memory          (kbytes, -v) unlimited
file locks                      (-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  -u
15665

默认值

用户

描述

root 账号

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

普通账号

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

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

临时修改

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

永久修改

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

* soft nproc 65535      

* hard nproc 65535    

关键字

描述

nproc

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

nofile

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

soft xxx

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

hard xxx

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

┌──[root@liruilongs.github.io]-[~]
└─$  echo "* soft nproc 65535"  >> /etc/security/limits.conf
┌──[root@liruilongs.github.io]-[~]
└─$ echo "* hard nproc 65535"  >> /etc/security/limits.conf
┌──[root@liruilongs.github.io]-[~]
└─$ cat /etc/security/limits.conf  | grep nproc
#        - nproc - max number of processes
#@student        hard    nproc           20
#@faculty        soft    nproc           20
#@faculty        hard    nproc           50
#ftp             hard    nproc           0
* soft nproc 65535
* hard nproc 65535
┌──[root@liruilongs.github.io]-[~]
└─$

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

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

查看kernel.pid_max的内核参数

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

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

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

调整kernel.pid_max内核参数

临时调整内核参数

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

永久调整kernel.pid_max内核参数

┌──[root@liruilongs.github.io]-[/]
└─$ echo "kernel.pid_max = 150000" >> /etc/sysctl.conf # 永久调整
┌──[root@liruilongs.github.io]-[/]
└─$ cat /etc/sysctl.conf | grep kernel
kernel.pid_max = 150000
┌──[root@liruilongs.github.io]-[/]
└─$ sysctl -p
net.ipv4.ip_forward = 1
vm.swAppiness = 20
kernel.pid_max = 150000
┌──[root@liruilongs.github.io]-[/]
└─$


Tags:SSH远程   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
写在前面我遇到了什么问题: 很老的一个系统bug原因升级,大概五六年没有重启机器了,4A平台上面通过ssh远程连接Linux机器,偶尔连接不上 即使连接之后命令无法正常执行,执行了没有...【详细内容】
2022-01-13  Tags: SSH远程  点击:(0)  评论:(0)  加入收藏
在以前的资料里,串口和SSH远程登使用SecureCRT,window与ubuntu数据传输使用filezilla,窗口切换来切换去,麻烦也眼花缭乱。有没有一个工具搞定串口、SSH和FTP?有!它就是MobaXterm。是不是特别高效呢?...【详细内容】
2020-08-20  Tags: SSH远程  点击:(86)  评论:(0)  加入收藏
从事网络运维工作的小伙伴们都知道,在交换机正式上线时,必须完成配置SSH远程登录,这样做目的是为了日后,维护方便,不需要每次登录设备都要跑到机房,这样既不现实,又费事。 远程登录...【详细内容】
2020-07-10  Tags: SSH远程  点击:(130)  评论:(0)  加入收藏
为了提高服务器的安全性,您应该更改服务器上的SSH登录端口,而不要使用默认端口22。如何在Linux中更改SSH远程登录端口。1.编辑sshd_config文件nano /etc/ssh/sshd_config搜索...【详细内容】
2020-01-23  Tags: SSH远程  点击:(107)  评论:(0)  加入收藏
首先打开SSH链接软件,市面上有收费的Xshell6软件,也有免费的putty远程软件我们这里用到的是Xshell5软件连接 打开软件后我们点击左上角的+号 进入到“新建会话属性”后我们添...【详细内容】
2019-08-21  Tags: SSH远程  点击:(749)  评论:(0)  加入收藏
实验拓扑及描述 在上图所示的拓扑中,Cloud1与交换机LSW1直连,我们将Cloud1规划在VLAN100内,同时也为交换机在VLAN100的虚拟接口规划了IP地址192.168.35.101/24。其中Cloud1添加...【详细内容】
2019-08-07  Tags: SSH远程  点击:(1259)  评论:(0)  加入收藏
SSH基本概述SSH是一个安全协议,在进行数据传输时,会对数据包进行加密处理,加密后在进行数据传输。确保了数据传输安全。那SSH服务主要功能有哪些呢?1.提供远程连接服务器的服务2...【详细内容】
2019-08-06  Tags: SSH远程  点击:(221)  评论:(0)  加入收藏
概述平时工作基本都是用xshell直接连上服务器,但是这中间是通过什么协议,又是什么原理可能很多朋友就不太清楚了,下面针对下ssh方面做一个介绍和原理解析。ssh基本概念SSH(22端...【详细内容】
2019-04-26  Tags: SSH远程  点击:(909)  评论:(0)  加入收藏
▌简易百科推荐
写在前面我遇到了什么问题: 很老的一个系统bug原因升级,大概五六年没有重启机器了,4A平台上面通过ssh远程连接Linux机器,偶尔连接不上 即使连接之后命令无法正常执行,执行了没有...【详细内容】
2022-01-13  山河已无恙i    Tags:SSH远程   点击:(0)  评论:(0)  加入收藏
激情冰雪,喜迎冬奥。相约冰场,助力冬奥。滑冰有哪些好处?滑冰初学者有哪些注意事项?为什么学会正确的摔倒姿势是“冰上第一课”?我们带着这些疑问接着往下看。滑冰对身体益处多多...【详细内容】
2022-01-12  首都健康    Tags:   点击:(4)  评论:(0)  加入收藏
小伙伴们好啊,今天咱们分享一个简单实用的Excel小技巧,快速提取文件夹内的所有文件名称。方法一:打开需要提取名称的文件夹,单击其中任意一个文件,按Ctrl+A 全选。依次单击【主页...【详细内容】
2022-01-12  Excel之家    Tags:文件名   点击:(6)  评论:(0)  加入收藏
在Linux环境下,使用tail查找日志文件是比较常用的操作,密密麻麻的日志里面,要找到自己想要的内容是一个不容易的事情,如果自己要找的内容能高亮,那就直观多了。操作如下1.高亮关...【详细内容】
2022-01-12  熊利宏Python    Tags:Linux   点击:(17)  评论:(0)  加入收藏
Linux下查看网卡速率信息: 一、使用ethtool命令webethtool ethx #查看支持的速率 ethx 为网卡名,使用 ifconfig -a ,ip a 查询。响应数据中: Link detected 为yes表示网卡已经...【详细内容】
2022-01-11  葫芦儿的成长记录    Tags:Linux   点击:(6)  评论:(0)  加入收藏
chown将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户ID;组可以是组名或者组ID;文件是以空格分开的要改变权限的文件列表,支持通配符。系统管理员经常使用chown...【详细内容】
2022-01-10  入门小站    Tags:chown命令   点击:(5)  评论:(0)  加入收藏
什么是硬链接和软链接,要想知道什么是硬链接和软链接的话,让我带你研究。看完这篇文章,让你彻底明白什么是硬链接,什么是软链接!!!首先,在Linux系统下,有两种链接文件,一种是硬链接(Har...【详细内容】
2022-01-05  混说Linux    Tags:硬链接   点击:(16)  评论:(0)  加入收藏
Linux历史Linux系统是一个类似UNIX的操作系统,它的标志是一个名为Tux的可爱的小企鹅。1991年10月5日,Linus Torvalds公布了第一个Linux的内核版本0.02版。1992年3月,内核1.0...【详细内容】
2022-01-04  小文慕课    Tags:linux系统   点击:(12)  评论:(0)  加入收藏
我们在使用 Linux 的过程中,或多或少都会遇到一些关于使用者和群组的问题,比如最常见的你想要在某个路径下执行某个指令,会经常出现这个错误提示 。permission denied反正我大...【详细内容】
2021-12-31  程序员cxuan    Tags:Linux 权限   点击:(13)  评论:(0)  加入收藏
Linux 系统开机加电后发生了什么?linux系统的启动流程关于linux系统的启动流程我们可以按步进行划分为如下:BIOS POST自检 BIOS(Boot Sequence)引导操作系统 加载对应引导上...【详细内容】
2021-12-31  IT黑猫运维    Tags:Linux   点击:(12)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条