了解更多银河麒麟操作系统全新产品,请点击访问
麒麟软件产品专区:https://product.kylinos.cn
开发者专区:https://developer.kylinos.cn
服务器环境以及配置
【机型】虚机
|----------|-------------|
| 处理器: | Kunpeng-920 |
| 内存: | 32G |
| 整机类型/架构: | ARM |
【内核版本】
4.19.90-25.21.v2101.ky10.aarch64
【OS镜像版本】
银河麒麟高级服务器操作系统 Kylin-Server-10-SP2-Release-Build09-20210524-aarch64
【第三方软件】
Java应用
现象描述
在2024年4月11日10点15分前后,发现虚机系统ssh无法正常登录,进入虚机控制台,也无法正常登录进入系统。过10分钟左右之后,可以ssh登录系统,使用top命令查看发现dbus占用单核cpu为99%,比较高。需要分析,系统在故障时间段内,不能正常登录使用的原因。如图1:
图1
现象分析
分析系统性能日志,查看故障时间段内2024.04.11 10点15分前后,系统性能是否有使用异常情况,分别查看系统整体CPU、内存和负载,未发现异常,查看磁盘IO读写性能,看到,在2024.04.11 10:10至10:20左右这个故障时间段内,磁盘IO读相较其他时间段,有明显增加,说明此时间段内,业务访问可能比较繁忙,如图2至图5:
图2 CPU
图3 内存
图4 负载
图5 磁盘IO
分析系统ssh登录日志secure,发现故障时间段内2024.04.11 10:06:37至10:21:54,login登录有一段找不到pam_console.so动态库模块信息输出"PAM unable to dlopen(/usr/lib64/security/pam_console.so): /usr/lib64/security/pam_console.so: cannot open shared object file: No such file or directory",其他日志信息都是ssh会话正常登录信息。
进一步分析排查正常银河麒麟系统里,也没找到pam_console.so这个pam模块,说明系统未提供此pam模块,也没影响系统ssh和图形界面正常登录访问,这段找不到pam_console.so模块的信息输出,不是ssh和图形登录界面,无法正常登录访问的原因。如图6:
图6
分析系统messages日志,发现故障时间段内2024.04.11 10:02:16至13:19:05,有很多"kernel: [6147721.639282] VFS: file-max limit 655350 reached"异常日志信息输出,说明此系统上内核打开的文件句柄数量达到上限,当前系统的文件句柄数量已经超出了系统级文件句柄数量file-max设置。已知,Linux系统中的进程都会打开一定数量的句柄,如果所打开的句柄超过了限制,则会导致之后的申请失败,有可能会影响到后面,正常服务运行使用。如图7:
图7
通过sosreport系统日志,查看此系统资源配置文件/etc/security/limits.conf,可知,任何用户可以打开的最大文件描述符设置的是409600,任何用户可以打开的最大进程数是65536。查看系统级文件句柄数量和使用情况,可知,/etc/sysctl.d/my-default.conf自定义设置的系统级文件句柄数量fs.file-max为655350。如图8和图9:
图8
图9
进一步分析查看,当前系统文件句柄使用情况,发现,第一列表示当前系统已分配使用的文件句柄数量,超过了,系统级设定值。查看打开文件句柄数量进程的情况,发现,java进程打开文件句柄数量最多,如图10:
图10
分析结果
根据上述,系统层日志和配置分析情况,可以排除,故障时间段内,有系统性能方面的使用瓶颈,资源耗尽,导致业务虚机不能正常登录访问。同时排除openssh远程连接服务或系统图形登录界面服务lightdm有问题,导致。
导致此故障现象的原因,可能是,系统级文件句柄数量file-max设置的值较小,业务繁忙时间段,java等应用服务需要打开的文件句柄较多,超过了系统级设置值,导致之后正常系统服务申请失败,短时间内不能正常运行使用。过了一段时间之后,业务不繁忙,java等应用自动释放掉申请的文件句柄,可以正常登录访问系统。
后续计划与建议
建议排查相关应用,查看是否有需要进行检查和优化的方面。根据业务使用需求,调整增加系统层最大文件句柄打开数fs.file-max配置项参数,举例配置如下:
#echo "fs.file-max=6553500" >> /etc/sysctl.conf --添加配置
#sysctl -p --配置生效
#sysctl -a | grep fs.file-max --查看配置是否生效