如果满足以下条件,解决Java VM崩溃的最佳做法是:
PS:在VM崩溃的情况下,我意味着VM写了一个像hs_err_pid1234.log这样的转储文件并终止。
答案 0 :(得分:4)
读取hs_err_pid1234.log文件(或任何错误日志文件名)。那里通常有线索。下一步取决于您在日志中发现的内容。
是的,它可能是您正在使用的JVM实现的特定版本中的错误,但我也看到了操作系统中的内存碎片导致的问题。例如,Windows容易在不适当的位置固定dll,并且当JVM请求它时,无法分配连续的内存块。其他输出opf内存问题也可以通过此类型的故障转储表现出来。
答案 1 :(得分:3)
更新或替换您的JVM。如果您当前拥有最新版本,请尝试使用旧版本,或者如果您没有最新版本,请尝试更新。也许它是您特定版本中的已知问题?
答案 2 :(得分:2)
假设跨机器的JVM版本是相同的:
弄清楚JVM崩溃的机器有什么不同。相同的OS
和OS
版本?例如,我们遇到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中运行程序,也许你会在崩溃前看到一些症状(假设你可以复制它)