暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

HWClientService触发su操作Too many open files in system

原创 董小姐 2025-07-02
169

问题描述

现场反馈vertica库不能访问了,就登录服务器查看,发现su - dbadmin切换dbadmin用户时提示如下报错:

[root@dshuju02 ~]# su - dbadmin
Last login: Mon Jun 30 10:18:41 CST 2025 on pts/4
su: failed to execute /bin/bash: Too many open files in system

别被报错带偏哈,这次可不是最大文件数值小导致的。

分析过程

查看当前系统设置的最大句柄数

too many open files(打开的文件过多)是Linux系统中常见的错误,从字面意思上看就是说程序打开的文件数过多,不过这里的files不单是文件的意思,也包括打开的通讯链接(比如socket),正在监听的端口等等,所以有时候也可以叫做句柄(handle),这个错误通常也可以叫做句柄数超出系统限制。

引起的原因就是进程在某个时刻打开了超过系统限制的文件数量以及通讯链接数。

--查看当前系统设置的最大句柄数
[root@dshuju02 ~]# 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) 514944
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) 514944
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

open files那一行就代表系统目前允许单个进程打开的最大句柄数,这里是1024。

列出所有正在运行的java进程

[root@dshuju02 ~]# jps  #注意每次查询的进程号都不相同,导致下面统计单个进程打开文件数量是0
255626 Jps

lsof -p 255805 | wc -l   
[root@dshuju02 ~]# lsof -p 255626 | wc -l
0

统计进程打开了多少文件

总文件数太大了

[root@dshuju02 ~]# lsof | wc -l 
3337215

查看inode是否用尽

inode才使用2%,排除该因素。

查看操作系统日志

vi /var/log/messages

从2025-6-30号就反复输出图片报错,和现场沟通这是什么应用,也回答不清楚

解决办法

增加最大句柄数值(未解决问题)

修改系统配置文件

正值业务使用期间,不敢随意让云上重启服务器,担心服务器出现重启失败现象,所以修改系统配置文件后未重启操作系统。

vim /etc/security/limits.conf  
#在最后加入  
* soft nofile 4096  
* hard nofile 4096  

临时增加最大句柄数值

把当前用户的最大允许打开文件数量设置为2048了,但这种设置方法在重启后会还原为默认值
注意:ulimit -n命令非root用户只能设置到4096,想要设置到8192需要sudo权限或者root用户。

ulimit -n 65536

再次su - dbadmin依然提示以下报错:

[root@dshuju02 ~]# su - dbadmin
Last login: Mon Jun 30 10:18:41 CST 2025 on pts/4
su: failed to execute /bin/bash: Too many open files in system

停止CDMClient进程相关的服务

查询并干掉CDMClient进程相关的服务

和现场多次确认CDMClient应用不是项目中使用的,恢复业务为先,征得负责人同意后可以干掉该应用。

[root@dshuju02 ~]# ps -ef | grep CDMClient
root      86671      1  0 Jun30 ?        00:00:10 /opt/CDMClient/HWClientService/BasicRunner/esfdaemon -df /opt/CDMClient/etc/ClientService/BasicRunner/clientsvc.config
root      86684  86671  0 Jun30 ?        00:01:39 /opt/CDMClient/HWClientService/BasicRunner/agentproc --fdPipe1Write=7 --fdPipe1Read=6 --fdPipe2Read=8 --fdPipe2Write=9 --user=root
root      86752      1  0 Jun30 ?        00:01:23 /opt/CDMClient/HWClientService/AggregateApp/esfdaemon -df /opt/CDMClient/etc/ClientService/AggregateApp/clientsvc.config
root      86801      1  0 Jun30 ?        00:01:21 /opt/CDMClient/HWClientService/XenServer/esfdaemon -df /opt/CDMClient/etc/ClientService/XenServer/clientsvc.config
root     258014 256213  0 10:14 pts/1    00:00:00 grep --color=auto CDMClient
root     417713      1  0 Apr29 ?        02:19:21 /opt/CDMClient/HWClientService/AggregateApp/eefproc --cluster=10.254.20.2 --code=FYK1YQMHOW5Z6TBE --cpuquota= --detect=300 --execid=dcd40e8924f911f09bf48c2a8e947ce6 --local=172.19.106.163 --port=9573 --servicetype=47 --severip=10.254.20.14 --type=1001

干掉以上进程

kill -9 86671
kill -9 86684
kill -9 86752
kill -9 86801
kill -9 417713

再次查询总文件数,多次查询静止在4615

[root@dshuju02 ~]# lsof | wc -l 
4615

su - dbadmin切换成功并启动数据库,业务访问数据库恢复。

总结

CDMClient根据进程查询推测是华为云迁移组件,最后通过现场和云上沟通确实是,云上说可以给卸载到,本着谁安装谁卸载的规则云上进行卸载。常规解决办法解决不了问题时可以尝试猜测着解决,比如没想到一应用会触发Too many open files in system报错。

参考链接:https://blog.csdn.net/Roy_70/article/details/78423880

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论