相关疑难解决方法(0)

JVM OutOfMemory错误"死亡螺旋"(不是内存泄漏)

我们最近一直在将许多应用程序从RedHat linux JDK1.6.0_03下运行到Solaris 10u8 JDK1.6.0_16(更高规格的机器),我们注意到了一个相当紧迫的问题:在某些负载下我们的JVM获得他们自己变成了"死亡螺旋"并最终失去了记忆.注意事项:

  • 不是内存泄漏的情况.这些应用程序运行得很好(在一种情况下超过3年),并且在任何情况下都不确定内存不足错误.有时应用程序有效,有时则不然
  • 不是我们转向64位虚拟机 - 我们仍在运行32位
  • 在一个案例中,在1.6.0_18上使用最新的G1垃圾收集器似乎已经解决了这个问题.在另一个方面,回到1.6.0_03已经奏效
  • 有时我们的应用程序会因HotSpot SIGSEGV错误而崩溃
  • 这会影响用Java和Scala编写的应用程序

最重要的一点是:行为表现在那些突然获得大量数据的应用程序中(通常通过TCP).好像VM决定继续添加更多数据(可能会将其推进到TG),而不是在"新闻空间"上运行GC,直到它意识到它必须执行完整的GC,然后尽管VM中的所有内容都是垃圾,它以某种方式决定不收集它!

这听起来很疯狂,但我只是看不出它是什么.你怎么能解释一个应用程序哪一分钟落在最大堆1Gb和下一个工作正常(当应用程序完全相同的事情时永远不会大约256M )

所以我的问题是:

  1. 还有其他人观察过这种行为吗?
  2. 有任何关于我如何调试JVM本身(与我的应用程序相对)的建议吗?我如何证明这是一个VM问题?
  3. 是否有任何虚拟机专家论坛,我可以向VM的作者询问(假设他们不在SO上)?(我们没有支持合同)
  4. 如果这是VM最新版本中的一个错误,为什么其他人没有注意到它呢?

java jvm solaris scala out-of-memory

19
推荐指数
1
解决办法
5360
查看次数

标签 统计

java ×1

jvm ×1

out-of-memory ×1

scala ×1

solaris ×1