【发布时间】:2016-03-11 09:16:30
【问题描述】:
问题:ORB.destroy() 没有正确清理并且 ORB 对象实例没有被垃圾回收。
这个问题是在 JDK5 中提出的,并在此处记录的后续版本中得到修复 http://bugs.java.com/view_bug.do?bug_id=6354718。我们正在使用 JDK7 并且仍然看到文件描述符已打开以进行连接并且永远不会被释放作为立即解决方法我们增加了 OS FB 限制(但有一天这个问题会再次袭击我们)。
对于每个连接,我们使用命令“lsof -p process-id”在下面看到这个
命令 PID 用户 FD 类型设备大小/关闭节点名称
java 14674 xyz 106u IPv6 xyz 0t0 TCP *:xyz (LISTEN)
我们还尝试运行示例程序,该示例程序能够看到使用新的 JDK6 和 JDK7 关闭的连接(使用 TCP 查看器分析连接)。
不明白为什么 helloworld corba 程序可以正常工作,但在我们正在做的两种情况下都不能与我们的应用程序一起工作:
orb.shutdown(true);
orb.destroy();
我们也尝试过,但它不会释放连接(其中 rootNamingContext 是 NamingContextExt 的实例):
rootNamingContext._release();
rootNamingContext = null;
System.gc();
【问题讨论】:
-
使用 tcpdump 进一步调查我们发现会话正确关闭。
标签: java garbage-collection corba orb