Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >SSH远程连接问题(-bash: fork: retry: Resource temporarily unavailable.)

SSH远程连接问题(-bash: fork: retry: Resource temporarily unavailable.)

作者头像
山河已无恙
发布于 2023-01-30 07:57:38
发布于 2023-01-30 07:57:38
1.2K00
代码可运行
举报
文章被收录于专栏:山河已无恙山河已无恙
运行总次数:0
代码可运行

写在前面


我遇到了什么问题:

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

出现问题的原因是什么:

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
┌──[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模块,有个全局的设置最大进程数的内核参数,需要修改这个参数,内核参数的设置方式有临时设置和永久设置两种方式,临时设置完就会刷新,重启失效。可以先临时设置后查看效果,然后永久设置。

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


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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
┌──[root@liruilongs.github.io]-[/]
└─$ ps -eLf | wc -l  # 当前进程数
221

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
┌──[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。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
┌──[root@liruilongs.github.io]-[~]
└─$ ulimit  -u
15665
默认值
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ulimit -u的值 默认是/proc/sys/kernel/threads-max的值/2,即系统线程数的一半

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

临时修改
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
┌──[root@liruilongs.github.io]-[~]
└─$ ulimit  -u 75535
┌──[root@liruilongs.github.io]-[~]
└─$ ulimit  -u
75535
┌──[root@liruilongs.github.io]-[~]
└─$
永久修改

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
* soft nproc 65535      

* hard nproc 65535    
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
是操作系统级别对每个用户创建的进程数的限制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
┌──[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的内核参数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
┌──[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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
┌──[root@liruilongs.github.io]-[~]
└─$ cd /proc/sys/kernel/;cat pid_max
131072

调整kernel.pid_max内核参数

临时调整内核参数
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
┌──[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内核参数
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
┌──[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]-[/]
└─$
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 山河已无恙 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Elasticsearch启动常见问题
分析: 默认分配的JVM内存为2g,所以当小内存的机器,默认启动的话,会报如上错误。
后场技术
2021/03/24
1.3K0
关于 Linux中系统调优的一些笔记
我突然又明白,死亡是聪明的兄长,我们可以放心地把自己托付给他,他会知道在我们有所准备的适当时刻前来。我也突然懂得,原来痛苦、失望和悲愁不是为了惹恼我们,使我们气馁或者无地自容;它们的存在,是为了使我们心智成熟,臻于完善。—赫尔曼·黑塞《彼得·卡门青》
山河已无恙
2023/03/02
1K0
关于 Linux中系统调优的一些笔记
K8s 实践:优雅限制 K8s 集群中文件描述符与线程数量
linux 中为了防止进程恶意使用资源,系统使用 ulimit 来限制进程的资源使用情况(包括文件描述符,线程数,内存大小等)。同样地在容器化场景中,需要限制其系统资源的使用量。
公众号: 云原生生态圈
2023/08/23
2.5K0
K8s 实践:优雅限制 K8s 集群中文件描述符与线程数量
Linux 性能调优之资源限制(ulimit&Cgroup)
对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式,是对大众理想的懦弱回归,是随波逐流,是对内心的恐惧 ——赫尔曼·黑塞《德米安》
山河已无恙
2023/11/07
1.6K0
Linux 性能调优之资源限制(ulimit&Cgroup)
报错 解决-bash: fork: retry: Resource temporarily unavailable
在curl 一个 spring boot 应用接口的时候,出现这个情况,看着启动ok,但是出现如下提示
MickyInvQ
2020/09/27
3.5K0
报错 解决-bash: fork: retry: Resource temporarily unavailable
经典故障分析报告之-内核参数导致k8s节点故障
1、首先从 Kubernetes 事件中心告警信息如下,该告警集群常规告警事件(其实从下面这些常规告警信息是无法判断是什么故障问题)
IT运维技术圈
2023/02/02
1.2K0
29-网络知识
通常说的网络,都是在TCP/IP协议族的基础上运作的,HTTP协议,只是这个协议族中的一个。
zx钟
2021/07/06
5220
说来惭愧,我被ulimit摔了一跤...
自接触 linux 后,大家所受的教育就是 ulimit是最便捷的内核优化途径,事实也确实如此。
运维部落
2020/08/28
1.2K0
说来惭愧,我被ulimit摔了一跤...
limit资源限制ulimit 详解
系统性能一直是一个受关注的话题,如何通过最简单的设置来实现最有效的性能调优,如何在有限资源的条件下保证程序的运作,ulimit 是我们在处理这些问题时,经常使用的一种简单手段。ulimit 是一种 Linux 系统的内键功能,它具有一套参数集,用于为由它生成的 shell进程及其子进程的资源使用设置限制。
黄规速
2022/04/15
7.9K0
limit资源限制ulimit 详解
Linux的一些知识
:wq 强制性写入文件并退出。即使文件没有被修改也强制写入,并更新文件的修改时间。
sparkle123
2021/03/07
5190
sysctl.conf学习和调优
前言 记得第一次接触/etc/security/limits.conf和/etc/sysctl.conf时 是因为部署Oracle时要按需修改内核参数。limits.conf文件实际是Linux PA
小小科
2018/05/02
1.3K0
sysctl.conf学习和调优
Linux内核参数使用与优化介绍
Tips : OOM(Out Of Memory) killer机制是指Linux操作系统发现可用内存不足时,强制杀死一些用户进程(非内核进程),来保证系统有足够的可用内存进行分配。 Tips : swappiness参数在Linux 3.5版本前后的表现并不完全相同,Redis运维人员在设置这个值需要关注当前操作系统的内核版本。
全栈工程师修炼指南
2022/09/29
3.6K0
LWP进程资源耗尽,Resource temporarily unavailable
服务器环境使用root账户运行应用程序是非常危险的,容易让人拿到shell变成肉鸡。所以有点意识的团队,都会建立一个低权限的普通用户用来运行java程序。
xjjdog
2019/09/24
3.2K0
LWP进程资源耗尽,Resource temporarily unavailable
高并发下报错 "java.net.UnknownHostException" 案例分析
错误关键词 Operation not permitted、nf_conntrack: table full, dropping packet,问题出现在 代理层,conntrack table满了。
SRE运维进阶之路
2024/11/19
990
高并发下报错 "java.net.UnknownHostException" 案例分析
Linux创建进程达到65535的方法
Linux上创建进程据说消耗很少,这个一直是Linux的特点,于是就专门测试Linux创建进程的极限,测试代码如下:
用户8965210
2021/10/14
1.7K0
给容器设置内核参数
怎么给docker容器设置内核参数? 怎么给k8s POD设置内核参数? 为什么给容器设置某些内核参数之后,主机也会受影响?
腾讯云原生
2020/02/14
10.4K0
linux 内核优化
用户组创建 groupadd -g 500 sysadm groupadd -g 501 appadm 用户创建 useradd -u 500 -g 500 sysctl -m passwd sysctl Gf9Jk6Hvuh useradd -u 501 -g 500 sysadm -m passwd sysadm TAZk9TmpR6 useradd -u 502 -g 501 nflow -m passwd nflow DPe2cU4Ggb 导入共钥 /home/sysctl/.ssh(m
美团骑手
2021/12/24
1.4K0
故障分析:从Oracle数据库故障到Linux nproc算法
某日,朋友跟我讨论他巡检oracle数据库时遇到的一个情况,在使用root用户切换grid用户时报错-bash: fork: retry: Resource temporarily unavailable,一般这个报错都是因为/etc/security/limits.conf或/etc/security/limits.d/下相关用户nproc设置过小导致,但是定位一波三折,最终了解清楚了nproc参数生成、限制,将案例详细分享,供大家参考。
数据和云
2021/03/09
1.3K0
故障分析:从Oracle数据库故障到Linux nproc算法
TKE集群给pod设置内核参数
使用tke的过程中,很多时候我们希望对容器内的一些内核参数进行优化修改,可以通过init容器或者securityContext来修改pod内的内核参数。
聂伟星
2021/08/26
2.8K1
ulimit: open files: cannot modify limit: Operation not permitted
      在从root用户切换到oracle用户时,碰到了ulimit: open files: cannot modify limit: Operation not permitte的提示信息。字面意思来看即是打开文件受到了限制。同一服务器上,如仅有一个Oracle单实例且数据文件较少的情形应该不会出现该情形。多实例可能会碰到这个情况。由于多个实例都为Oracle用户所有,因此Oracle用户可操作的文件数为所有实例文件数的总和,超出了限制就收到错误提示。
Leshami
2018/08/14
4.3K0
相关推荐
Elasticsearch启动常见问题
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验