相关疑难解决方法(0)

内存泄漏,没有对象数量或大小增加

在IBM iSeries系统上,我运行了一个Java程序 - 一个带有Web服务器组件的应用程序服务器,所有这些都是内部开发的.在32位或64位J9 JVM(IBM Technology for Java)上运行时,我有内存泄漏的症状.

请注意,在iSeries经典JVM,多个Sun/Oracle JVM和Linux JVM上运行此软件时,不会出现任何问题.哎呀,我经常在我妻子的入门级笔记本电脑的时间离开周运行相同的软件,而我在我的网站的工作 - 我可以向你保证,如果它是内存泄漏,将那个东西被发现.

如果我刚刚离开一个普通的香草系统运行空闲,没有配置应用程序(基本上就是邮件系统和Web服务器),堆只是继续缓慢增长,导致随着时间的推移被分配更多的内存,每个GC周期不相当于收集到以前的水平.对于没有问题的JVM,模式完全相同,除了那些GC扫描总是将堆减少到之前的GC级别.

在此输入图像描述

但是,如果我在稳定后启动JVM系统转储并在分配的堆显着增长后进行后续转储,则差异比较表明运行一周后不再有可达对象,而不是启动时.最近的一个,一周后显示6个额外的类加载和一些明确相关的对象.对所有活体物体的彻底评论都没有显示出任何让我意想不到的东西.

我已经尝试了优化的吞吐量和世代并发的垃圾收集器.

因此,根据作业的堆大小,我们似乎正在泄漏,并且根据堆转储,没有任何泄漏.

没有调用JNI方法(除了作为核心JVM的一部分运行的本机代码),它肯定是正在增长的堆 - 我可以清楚地看到IBM WRKJVMJOB信息以及在我的控制台中使用JMX bean报告日志文件.

到目前为止,我无法使用JVisualVM之类的JMX工具连接到活动JVM,因为尽管在正确配置时创建了侦听套接字,但是连接被拒绝,显然是在协议级别(TCP/IP堆栈显示已接受的连接,但是JVM反弹它).

我很困惑,不知道下一步该往哪里去.

编辑:只是为了澄清; 这些结果都是使用未经检测的JVM,因为我无法获得对此JVM的JMX访问权限(我们正在与IBM合作).

编辑2011-11-16 19:27:我能够在1823个GC循环中提取GC活动报告,其中包括Soft/Weak/PhantomReference计数的特定计数; 这些数字并没有出现失控增长的迹象.然而,小物体终身空间有显着增长(大物体终身空间是空的).它从9M增长到36M.

java memory-leaks j9 ibm-midrange

23
推荐指数
1
解决办法
3175
查看次数

标签 统计

ibm-midrange ×1

j9 ×1

java ×1

memory-leaks ×1