我们最近一直在将许多应用程序从RedHat linux JDK1.6.0_03下运行到Solaris 10u8 JDK1.6.0_16(更高规格的机器),我们注意到了一个相当紧迫的问题:在某些负载下我们的JVM获得他们自己变成了"死亡螺旋"并最终失去了记忆.注意事项:
SIGSEGV错误而崩溃最重要的一点是:行为表现在那些突然获得大量数据的应用程序中(通常通过TCP).好像VM决定继续添加更多数据(可能会将其推进到TG),而不是在"新闻空间"上运行GC,直到它意识到它必须执行完整的GC,然后尽管VM中的所有内容都是垃圾,它以某种方式决定不收集它!
这听起来很疯狂,但我只是看不出它是什么.你怎么能解释一个应用程序哪一分钟落在最大堆1Gb和下一个工作正常(当应用程序完全相同的事情时永远不会大约256M )
所以我的问题是: