Linux实例由于Ulimit限制原因导致SSH登录后系统异常
客户端SSH登录Linux实例后,命令行操作时系统提示如下错误。
- -bash: fork: retry: Resource temporarily unavailable.
- pam_limits(sshd:session):could not sent limit for 'nofile':operaton not permitted.
- Permission denied.
复制代码 问题原因通常是由于当前Shell进程开启或文件开启数量,超出服务器Ulimit系统环境限制造成的。
本文相关配置及说明在CentOS 7.6 64位操作系统和CentOS 5 64位操作系统中进行测试。
根据以上问题原因需要在CentOS系统版本中,修改limits.conf文件来永久变更Ulimit系统环境限制。由于在CentOS 6系统版本及之后发行版本中,增加了X-nproc.conf文件管理Ulimit系统环境限制。因此这里分别对不同版本进行操作说明,步骤如下。 提示:X-nproc.conf文件在不同系统版本中前缀数字不同,比如在CentOS 6版本中为90-nproc.conf,在CentOS 7版本中为20-nproc.conf,请根据现场环境为准。
CentOS 6之前版本此处以CentOS 5 64位系统版本为例,步骤如下。 - 通过管理终端登录该实例,执行如下命令,查看系统当前Ulimit系统资源限制信息,确认是否开启系统资源限制,并因为开启系统资源限制值设置过小。
- cat /etc/security/limits.conf
复制代码 系统显示类似如下,默认没有设置系统资源限制。
注:- <domain>需要限制的系统用户,可以用*代替所有用户。
- <type>有soft、hard和-三种参数。
- soft指的是当前系统已经生效的<value>值。
- hard指系统中设定的最大<value>值。
- soft的限制不能比hard限制高,用-表示同时设置了soft和hard的值。
- <item>指需要限制的使用资源类型,资源类型参数如下。
- core指限制内核文件的大小。
- rss指最大持久设置大小。
- nofile指打开文件的最大数目。
- noproc指进程的最大数目。
2、根据现场反馈结果为准,如果系统开启并配置系统资源限制,通过编辑limits.conf文件,选择注释、修改或删除noproc或nofile参数限制的资源类型代码操作。
提示:此处以注释noproc为例。 - 执行如下命令,备份limits.conf文件。
- cp -af /etc/security/limits.conf /root/limits.conf_bak
复制代码 执行如下命令,进入编辑模式。- vim /etc/security/limits.conf
复制代码
- 注释nofile参数限制的资源类型代码,操作结果类似如下。
3、保存退出编辑模式后,重启该Linux实例即可。
CentOS 6及之后版本此处以CentOS 7.6 64位版本为例,步骤如下。 - 通过管理终端登录该实例,执行如下命令,查看系统当前Ulimit系统资源限制信息。
- cat /etc/security/limits.d/20-nproc.conf
复制代码 系统显示类似如下,下图显示开启系统资源限制,并允许除root用户以外的所有用户最大连接进程数为4096,请以现场环境为准。
- 参考CentOS 6之前版本步骤,修改/etc/security/limits.d/20-nproc.conf文件。
提示:操作前请先对/etc/security/limits.d/20-nproc.conf文件备份。 以上操作完成并保存配置后,重启对应Linux实例即可。
|