netty百万连接测试服务器故障解决

问题描述:

  1. 因为做性能测试,修改了“/etc/security/limits.conf ”文件,在文件最后加上了如下信息:
  • soft nofile 2000000
  • hard nofile 2000000
  1. 导致系统无法通过SSH连接。
  2. 系统重启后,无法正常进入系统。

问题解决办法:

  1. 通过“单用户模式”,修改“/etc/security/limits.conf ”文件,删除
  • soft nofile 2000000
  • hard nofile 2000000

​ centos8.0系统单用户模式进入参见Centos8 进单用户模式

  1. 如果还是启动失败,需要禁用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
  1. 重启系统
reboot

第一次维护过程

  1. 维护人员通过“单用户模式”进入操作系统,将两个参数修改为
  • soft nofile 65535
  • hard nofile 65535
  1. 系统还是无法进入报错如图所示


    netty百万连接测试服务器故障解决-1系统报错.png
  2. 根据报错的提醒信息,我们估计为“OpenSSH server”出了问题,于是再次进入单用户模式删除了“OpenSSH server”,结果服务还是无法启动。

分析过程

  1. 几个同事共同分析,拿到了服务器上面的截图
netty百万连接测试服务器故障解决-2limit文件第一次修改侯内容.png

我们另外拿到了另外一个服务器上面的limits.conf,结果这个limits.conf文件还有错,最后一个 End of file 前面没有 “#”号,所以我们初步分析可能是文件有问题。

  1. 通过“单用户模式”我们找到了服务器的报错日志,这一步非常非常重要

    cat /var/log/secure | more
    

    找到的错误日志如下:


    netty百万连接测试服务器故障解决-3系统错误日志.png

    错误信息非常明确说明limits.conf文件,解析错误,可是为什么错,我们没找到原因。

  2. 到这个时候,其实我们内心是崩溃的,limits.conf文件明明没有任何问题,系统还是无法启动,我们也认为是自己卸载了“OpenSSH server”服务导致系统无法启动。

  3. 于是几个同事继续分析原因:

    怀疑是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,恢复文件。

    经过上面几个分析,我们也没有其它的选择了,只能再次去现场解决问题。

第二次现场解决

  1. 我们先是检查了limits.conf文件的内容,修改成跟其他未设置任何参数的服务一样。

  2. 执行了命令

    restorecon /etc/security/limits.conf
    

    执行完成以后,发现没有任何变化,不知道执行完成后的结果。

  3. 执行完上面两步以后,我们选择重启服务,结果还是无法进入系统,于是我们尝试通过U盘启动,折腾了半天也没有成功从U盘启动。

  4. 最后没有选择了,我想只能关闭selinux了,于是我们选择关闭selinux。关闭selinux成功登录系统。

  5. 成功登录系统以后发现没有了“OpenSSH server”服务(因为之前已经删除了),于是重新安装,重启docker服务及其他应用服务。

分析时查阅的网页

  1. Centos8 进单用户模式

  2. linux centos limits.conf 修改错误,无法登陆问题修复

  3. 修改linux 最大文件限制数 ulimit

  4. CentOS 7修改程序最大打开文件数

  5. cannot read settings from /etc/security/limits.conf: Permission denied closed

  6. SELinux

  7. Can not login after change limits.conf

  8. 如何在centos8 上禁用SElinux

  9. 理解Linux下的SELinux

鸣谢

​ 最后要感谢我们公司的陈总,虽然这个事跟他关系不大,但是他非常热心的帮我们找问题,SELinux的问题,也是他找出来的,虽然他不一定能看到我这个博客,但是还是十分感谢他。

你可能感兴趣的:(netty百万连接测试服务器故障解决)