客户端调用 Axis2 接口,导致 Linux 文件数打开过多问题的解决方法

本文介绍了如何解决由于客户端调用Axis2服务接口引发的Linux系统打开文件数过多的问题。通过分析Java堆转储文件,发现与Axis2相关的对象占用大量文件句柄。代码中存在资源未及时释放的问题,通过调用Stub的cleanup()方法清理资源,最终解决了问题。实验证明,优化后文件句柄使用得到有效控制。
摘要由CSDN通过智能技术生成

生产系统最近不稳定, linux 经常爆出打开文件数过多的问题。

Linux 有文件句柄限制,默认一般为 1024 。之前生产环境调整过一次,改大了。这次又出现类似问题,怀疑是应用程序存在问题。

1 查看进程打开文件数最大限制

为了保证生产环境能够继续提供服务,运维把进程所能打开的最大文件数为改为 8192,同时通过设置了监控,当最大文件数超过 3000 时,进行短信预警。

通过 Linux 的 ulimit 命令,查看目前进程所能打开的最大文件数。而当时的应用程序实际打开的文件数为 3000 多。

2 分析 Java Heap Dump 文件

让运维人员 dump 出当时的 Java Heap Dump 文件,进行深入分析。

在 Eclipse Memory Analyzer 的 Histogram 中,按照 Objects 数量进行排序,发现数量在 3000 左右的对象,大都与 axis2 相关:

右键点击 org.apache.axis2.context.MessageContext,在弹出框中选择“List objects” -> with outgoing references,打开外部引用了这个类实例的列表:

展开某个类实例,可以看到与这

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值