我的Java应用程序已开始定期崩溃,包括SIGSEGV和堆栈数据转储以及文本文件中的大量信息.
我在gdb中调试了C程序,并且已经从IDE调试了Java代码.我不确定如何在正在运行的Java程序中处理类似C的崩溃.
我假设我不是在看这里的JVM错误.其他Java程序运行得很好,Sun的JVM可能比我的代码更稳定.但是,我不知道如何使用Java代码导致段错误.肯定有足够的可用内存,当我上次检查分析器时,堆使用率约为50%,偶尔会出现80%左右的峰值.我可以调查任何启动参数吗?在接近像这样的bug时,什么是好的清单?
虽然我不能够可靠地再现事件,但它似乎也不是完全随机发生的,所以测试并非完全不可能.
ETA:一些血腥的细节
(我正在寻找一种通用方法,因为实际问题可能非常具体.但是,我已经收集了一些信息并且可能有一些价值.)
不久之前,升级我的CI服务器之后遇到了类似的问题(详见此处),但是这次修复(设置-XX:MaxPermSize)没有帮助.
进一步的调查显示,在崩溃日志文件中,标记为"当前线程"的线程永远不是我的,但任何一个称为"VMThread"或称为"GCTaskThread" - 我是后者,它还标有注释"(已退出)",如果是前者,则GCTaskThread不在列表中.这让我想到问题可能是在GC操作结束时.