我在JVM中的大致在应用程序的相同阶段获得了段错误,但崩溃报告中的堆栈跟踪不同。但是,在GC期间似乎总会发生这种情况。
由于崩溃发生在我尝试过的所有三个JVM(OpenJDK 6,Oracle 1.6.0_25和1.7.0)以及每个都有两个GC(并行收集器和CMS),它发生在应用程序的同一区域,我想通过,如果我能找到GC试图收集的内容,我可能会发现我的代码中存在一些导致此崩溃的特性。
答案 0 :(得分:8)
如果您有错误处理内存的JNI库,则会发生这种情况。问题没有立即显示。但是,执行GC时,它会扫描所有内存,跳过损坏的引用并杀死JVM。即自上次完整GC以来的任何时候都可能发生腐败。
答案 1 :(得分:1)
seg故障在转储开始时具有特定的错误代码 http://en.wikipedia.org/wiki/Segmentation_fault
您可以使用Thread.dumpStackTrace查看该应用程序中发生的情况 如果您确切知道应用程序冻结或在某个操作或事件后要冻结的位置,您可以按CTRL +中断窗口或CTRL + \以获取线程转储并查看发生了什么。
而不是模糊地猜测你可以注释掉代码的某些部分,以找出哪个循环或对象或缓冲区或字符串花费的时间太长
根据您的情况,您可以考虑使用某些特定工具。
答案 2 :(得分:0)
答案 3 :(得分:0)
我们也面临着类似的问题。没有我们可以看到的模式,它是随机的,但发生在GC或Full GC上。对我们来说,事实证明是RAM模块的一个问题。我们在Ubuntu服务器上使用MemTest86 +识别它。