我们在 AWS 上运行的 Ubuntu 服务器上发生了令人难以置信的难以捉摸的 jvm 崩溃。
我们的 JVM 在抓取一些网页时崩溃。
崩溃发生在“安全点”cpp 模块的第 308 行。在出现 gauranteeArmed==0 语句的阶段。
我们的系统管理员建议,在崩溃时,JVM 创建了大量线程。
我们没有在其他 Linux 或 OSX 机器中重现此错误。
我们使用 Ning 库来爬取几个网页。
相关文章
在这些帖子中的每一个中,都观察到了来自“无处”的“安全点”相关崩溃。最有趣的是,上面的第一篇文章实际上展示了网络相关事件期间的 JVM 崩溃。
这个错误的神秘本质让我相信存在一个与线程创建和调度相关的错误,该错误是我们当前版本的 Ubuntu 特有的,涉及 java 调用其一些并发特性的方式,或者是一些底层库不兼容。对我们的特殊情况非常特殊。
我的问题
我的主要问题是 - 调试涉及这些“安全点”的 JVM 堆栈跟踪的最佳方法是什么,我可以从哪里开始学习处理此类错误?沿着这条线还有其他问题,但我还没有看到一个通用的答案。
其次,对 aws、java、网络以及 Ubuntu 在云中的不同行为方式的任何见解在这里都会很有用。