我们在运行在AWS上的Ubuntu服务器上爬取一些网页时遇到了一个非常难以捉摸的JVM崩溃问题。
我们的JVM在爬取几个网页时会崩溃。
崩溃发生在“safepoint”cpp模块的308行。在gauranteeArmed == 0语句出现的阶段。
我们的系统管理员建议,在崩溃时,JVM创建了大量线程。
我们没有在其他Linux或OSX机器上复现此错误。
我们使用Ning库来爬取一些网页。
相关帖子
在这些帖子中观察到了与“safepoint”相关的崩溃,这些崩溃似乎突然出现。最有趣的是,上述第一个帖子实际上展示了在网络相关事件期间发生JVM崩溃。
这个错误的神秘性使我相信,与线程创建和调度有关的错误是特定于我们当前版本的Ubuntu与Java调用某些并发功能的方式或某些底层库不兼容导致的,这是高度特殊化的我们特定情况的问题。
我的问题
我的主要问题是 - 调试涉及这些“safepoints”的JVM堆栈跟踪的最佳方法是什么,我从哪里开始学习处理这些错误?虽然已经有其他类似的问题,但我还没有看到通用的答案。
其次,任何关于AWS、Java、网络以及Ubuntu在云中可能表现不同的见解都将对此有所帮助。