问题描述:
- 因为做性能测试,修改了“/etc/security/limits.conf ”文件,在文件最后加上了如下信息:
- soft nofile 2000000
- hard nofile 2000000
- 导致系统无法通过SSH连接。
- 系统重启后,无法正常进入系统。
问题解决办法:
- 通过“单用户模式”,修改“/etc/security/limits.conf ”文件,删除
- soft nofile 2000000
- hard nofile 2000000
centos8.0系统单用户模式进入参见Centos8 进单用户模式
- 如果还是启动失败,需要禁用SElinux
# 查看状态
sestatus
# 临时禁用命令 1
setenforce 0
# 临时禁用命令 2
setenforce Permissive
永久禁用SElinux
vi /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
#enforcing
# SELINUXTYPE= can take one of these three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
修改的参数如下:
- SELINUX=disabled
- 重启系统
reboot
第一次维护过程
- 维护人员通过“单用户模式”进入操作系统,将两个参数修改为
- soft nofile 65535
- hard nofile 65535
-
系统还是无法进入报错如图所示
netty百万连接测试服务器故障解决-1系统报错.png - 根据报错的提醒信息,我们估计为“OpenSSH server”出了问题,于是再次进入单用户模式删除了“OpenSSH server”,结果服务还是无法启动。
分析过程
- 几个同事共同分析,拿到了服务器上面的截图
我们另外拿到了另外一个服务器上面的limits.conf,结果这个limits.conf文件还有错,最后一个 End of file 前面没有 “#”号,所以我们初步分析可能是文件有问题。
-
通过“单用户模式”我们找到了服务器的报错日志,这一步非常非常重要
cat /var/log/secure | more
找到的错误日志如下:
netty百万连接测试服务器故障解决-3系统错误日志.png错误信息非常明确说明limits.conf文件,解析错误,可是为什么错,我们没找到原因。
-
到这个时候,其实我们内心是崩溃的,limits.conf文件明明没有任何问题,系统还是无法启动,我们也认为是自己卸载了“OpenSSH server”服务导致系统无法启动。
-
于是几个同事继续分析原因:
怀疑是limits.conf权限的问题?
单用户模式下:使用 ll -Z /etc/security/limits.conf 命令发现无效,于是改成 ls -Z /etc/security/limits.conf。
后面核对了权限,权限没有任何问题。
怀疑是“OpenSSH server”服务卸载导致的问题?
于是折腾了一个centos8.0的系统安装到U盘,下载了“OpenSSH server”服务,准备现场安装
怀疑是limits.conf格式的问题?
单用户模式下执行命令:restorecon /etc/security/limits.conf,恢复文件。
怀疑可能是打开了selinux,直接修改导致context出错。
单用户模式下执行命令:restorecon /etc/security/limits.conf,恢复文件。
经过上面几个分析,我们也没有其它的选择了,只能再次去现场解决问题。
第二次现场解决
-
我们先是检查了limits.conf文件的内容,修改成跟其他未设置任何参数的服务一样。
-
执行了命令
restorecon /etc/security/limits.conf
执行完成以后,发现没有任何变化,不知道执行完成后的结果。
-
执行完上面两步以后,我们选择重启服务,结果还是无法进入系统,于是我们尝试通过U盘启动,折腾了半天也没有成功从U盘启动。
-
最后没有选择了,我想只能关闭selinux了,于是我们选择关闭selinux。关闭selinux成功登录系统。
-
成功登录系统以后发现没有了“OpenSSH server”服务(因为之前已经删除了),于是重新安装,重启docker服务及其他应用服务。
分析时查阅的网页
鸣谢
最后要感谢我们公司的陈总,虽然这个事跟他关系不大,但是他非常热心的帮我们找问题,SELinux的问题,也是他找出来的,虽然他不一定能看到我这个博客,但是还是十分感谢他。
网友评论