相关疑难解决方法(0)

如何在运行我的代码时调试JVM中发生的Segfaults?

我的Java应用程序已开始定期崩溃,包括SIGSEGV和堆栈数据转储以及文本文件中的大量信息.

我在gdb中调试了C程序,并且已经从IDE调试了Java代码.我不确定如何在正在运行的Java程序中处理类似C的崩溃.

我假设我不是在看这里的JVM错误.其他Java程序运行得很好,Sun的JVM可能比我的代码更稳定.但是,我不知道如何使用Java代码导致段错误.肯定有足够的可用内存,当我上次检查分析器时,堆使用率约为50%,偶尔会出现80%左右的峰值.我可以调查任何启动参数吗?在接近像这样的bug时,什么是好的清单?

虽然我不能够可靠地再现事件,但它似乎也不是完全随机发生的,所以测试并非完全不可能.

ETA:一些血腥的细节

(我正在寻找一种通用方法,因为实际问题可能非常具体.但是,我已经收集了一些信息并且可能有一些价值.)

不久之前,升级我的CI服务器之后遇到了类似的问题(详见此处),但是这次修复(设置-XX:MaxPermSize)没有帮助.

进一步的调查显示,在崩溃日志文件中,标记为"当前线程"的线程永远不是我的,但任何一个称为"VMThread"或称为"GCTaskThread" - 我是后者,它还标有注释"(已退出)",如果是前者,则GCTaskThread不在列表中.这让我想到问题可能是在GC操作结束时.

java segmentation-fault

16
推荐指数
2
解决办法
1万
查看次数

标签 统计

java ×1

segmentation-fault ×1