Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果Java虚拟机反复崩溃,我该怎么办?_Java_Crash_Virtual Machine - Fatal编程技术网

如果Java虚拟机反复崩溃,我该怎么办?

如果Java虚拟机反复崩溃,我该怎么办?,java,crash,virtual-machine,Java,Crash,Virtual Machine,如果满足以下条件,解决Java VM崩溃的最佳实践是什么: 没有自己的或第三方本机代码。100%纯java 同一程序在许多其他系统上运行时没有任何问题 PS:对于VM崩溃,我的意思是VM写入一个转储文件,如hs_err_pid1234.log并终止。更新或替换JVM。如果您当前拥有最新版本,请尝试使用旧版本,如果您没有最新版本,请尝试更新。在您的特定版本中,这可能是一个已知的问题?请阅读hs_err_pid1234.log文件(或任何错误日志文件名)。那里通常有线索。下一步取决于您在日志中发

如果满足以下条件,解决Java VM崩溃的最佳实践是什么:

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

PS:对于VM崩溃,我的意思是VM写入一个转储文件,如hs_err_pid1234.log并终止。

更新或替换JVM。如果您当前拥有最新版本,请尝试使用旧版本,如果您没有最新版本,请尝试更新。在您的特定版本中,这可能是一个已知的问题?

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


是的,这可能是您正在使用的JVM实现的特定版本中的一个bug,但我也看到了操作系统中内存碎片导致的问题。例如,Windows很容易将DLL固定在不适当的位置,并且在JVM请求时无法分配连续的内存块。其他out opf内存问题也可以通过这种类型的崩溃转储表现出来。

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

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

另外,程序在机器上做的事情是否完全相同?它正在访问共享文件系统吗?文件系统是否在您的计算机上以类似方式装载(
SMB
/
NFS
等)?一定有些不同


日志文件应该让您知道崩溃发生的位置(例如malloc)。

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


除了深入研究
hs_err
dump文件外,我还将它提交给Sun或是谁创建了您的JVM(我相信在文件的顶部有关于如何这样做的说明?)。不会痛的。

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

哪个操作系统/平台?(我们知道java与平台无关:-)100%纯java仍然使用本机代码,根据定义,本机代码可能会崩溃。@XL Plüschhase:没有特定的操作系统/平台。我们有大约100.000个系统的安装基础。只有少数系统在不同的操作系统/平台上崩溃。