0

我有一个 WebSphere Portal 应用程序在一个机器上运行四个实例,运行大约 7 天后,本机内存中只有 130-150mb 的可用地址空间(使用 PMAP)。再过 7 到 10 天,这个数字就会降至 100mb 以下(我们认为这很危险,我们开始回收 JVM)。如果我们不进行回收,JVM 最终会因 SIGSEGV 信号而崩溃。

我们已经对类数和 JIT 代码的大小进行了一些初步调查。班级人数增长,但从 50k 开始慢慢增长……每天大约几百人。JITC 大小在 7 天后达到约 210 MB,之后每天增长约 1 MB。在我们之前的经验中,我们并不认为这些是险恶的价值观。

我们需要能够分解本机堆中的内容,无论是线程(所有线程计数都正常,我们有固定的线程池)、字符串池、常量池、字节码或其他任何东西。

我们现在正在尝试的一个方法是将反射阈值降低到 0(关闭反射创建类的字节码访问器)。这个应用程序使用了大量的切入点和反射,所以我们希望这很有帮助。

欢迎任何建议。

4

2 回答 2

0

可能有点反复,但是您是否记录了 GC 并确保它不会随着时间的推移而增长 Java 堆?看过你的烫发空间了吗?SIGSEGV 是一个有趣的,但我预计任何 Java 内存问题都会出现更多的 JVM 崩溃。

于 2010-09-22T23:38:27.967 回答
0

经过长时间的调查,这最终成为一个 WebSphere 错误: PK72252: CALLS TO CLASSLOADER.GETRESOURCEASSTREAM ARE SLOW。已在6.0.2.33中修复。

于 2010-10-26T13:57:26.787 回答