如果Java VM反复崩溃,我该怎么办?

时间:2008-10-22 10:46:41

标签: java crash virtual-machine

如果满足以下条件,解决Java VM崩溃的最佳做法是:

  • 没有自己的或第三方的本机代码。 100%纯java
  • 同样的程序在许多其他系统上运行没有任何问题。

PS:在VM崩溃的情况下,我意味着VM写了一个像hs_err_pid1234.log这样的转储文件并终止。

5 个答案:

答案 0 :(得分:4)

读取hs_err_pid1234.log文件(或任何错误日志文件名)。那里通常有线索。下一步取决于您在日志中发现的内容。

是的,它可能是您正在使用的JVM实现的特定版本中的错误,但我也看到了操作系统中的内存碎片导致的问题。例如,Windows容易在不适当的位置固定dll,并且当JVM请求它时,无法分配连续的内存块。其他输出opf内存问题也可以通过此类型的故障转储表现出来。

答案 1 :(得分:3)

更新或替换您的JVM。如果您当前拥有最新版本,请尝试使用旧版本,或者如果您没有最新版本,请尝试更新。也许它是您特定版本中的已知问题?

答案 2 :(得分:2)

假设跨机器的JVM版本是相同的:

弄清楚JVM崩溃的机器有什么不同。相同的OSOS版本?例如,我们遇到JVM在特定版本的Red Hat上崩溃的问题。我们还发现一些较旧的Red Hat版本无法正确处理额外内存,从而导致交换空间不足。 (我们的解决方案是升级RedHat)。

此外,程序在机器上执行完全是一样的吗?它是否访问共享文件系统?文件系统是否在您的计算机上安装类似(SMB / NFS等)?必须有所不同。

日志文件可以让您了解崩溃发生的位置(例如malloc)。

答案 3 :(得分:0)

看看转储文件中的堆栈跟踪,因为它应该告诉你发生崩溃时发生了什么。

除了深入研究hs_err转储文件之外,我还要将它提交给Sun或任何制作JVM的人(我相信在文件顶部有如何操作的说明?)。它不会伤害。

答案 4 :(得分:0)

32位? 64位?客户端机器中的ram数量?处理器?操作系统?查看系统之间是否存在任何连接。连接可能会导致线索。如果所有其他方法都失败,请考虑使用JVM的不同主要/次要版本。此外,如果问题刚刚开始,你可以得到一个时间(通过版本控制)程序没有崩溃的地方?查看hs_err日志,您可以了解导致崩溃的原因。它可能是JVM使用的某个其他客户端库的版本。最后,在debug / profile中运行程序,也许你会在崩溃前看到一些症状(假设你可以复制它)