调试“安全点”错误 - 需要理论或实践来调试JVM崩溃?

4
我们在运行在AWS上的Ubuntu服务器上爬取一些网页时遇到了一个非常难以捉摸的JVM崩溃问题。
  • 我们的JVM在爬取几个网页时会崩溃。

  • 崩溃发生在“safepoint”cpp模块的308行。在gauranteeArmed == 0语句出现的阶段。

  • 我们的系统管理员建议,在崩溃时,JVM创建了大量线程。

  • 我们没有在其他Linux或OSX机器上复现此错误。

  • 我们使用Ning库来爬取一些网页。

相关帖子

在这些帖子中观察到了与“safepoint”相关的崩溃,这些崩溃似乎突然出现。最有趣的是,上述第一个帖子实际上展示了在网络相关事件期间发生JVM崩溃。

这个错误的神秘性使我相信,与线程创建和调度有关的错误是特定于我们当前版本的Ubuntu与Java调用某些并发功能的方式或某些底层库不兼容导致的,这是高度特殊化的我们特定情况的问题。

我的问题

我的主要问题是 - 调试涉及这些“safepoints”的JVM堆栈跟踪的最佳方法是什么,我从哪里开始学习处理这些错误?虽然已经有其他类似的问题,但我还没有看到通用的答案。

其次,任何关于AWS、Java、网络以及Ubuntu在云中可能表现不同的见解都将对此有所帮助。


与“云计算”最大的区别是网络运作的方式。试着看看那里 - 这可能与您的操作系统、Java或系统库无关。 - Bohemian
是的,这绝对是个好主意。我想知道在AWS上网络故障会如何表现,相比于常规环境。 - jayunit100
更新:通过告诉Ant在单元测试时不要“fork” JVM,似乎可以避免出现该错误。非常奇怪。甚至不确定这是否是可重复的真实情况...但我认为这可能会提供一些额外的见解。 - jayunit100
1个回答

0

尝试使用最新的JVM(6u32或7u4),看看是否仍然可以重现。如果您使用的是旧版本,则至少有很大的机会已经在最新版本中修复了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接