Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.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_Garbage Collection_Heap Memory - Fatal编程技术网

在堆转储上重新启动java进程

在堆转储上重新启动java进程,java,garbage-collection,heap-memory,Java,Garbage Collection,Heap Memory,如果java进程产生诸如“超出GC开销限制”或“java堆空间”之类的内存问题,我需要重新启动它。 是否有一些标准的方法来做到这一点,比如使用一些工具或选项。 如果不是的话,我怎么能让看门狗来做这件事呢。 我注意到,当这些问题发生时,我的流程不会停止。 重新启动会让它重新站稳脚跟运行时#freemory()会告诉您虚拟机中有多少内存可用-您可以监视它并在它达到阈值时发出警报。此时调用System.gc()可能会释放更多内存,但这不是保证,应该视为最后的手段 你真的需要结合这一点来理解为什么你的回

如果java进程产生诸如“超出GC开销限制”或“java堆空间”之类的内存问题,我需要重新启动它。 是否有一些标准的方法来做到这一点,比如使用一些工具或选项。 如果不是的话,我怎么能让看门狗来做这件事呢。 我注意到,当这些问题发生时,我的流程不会停止。 重新启动会让它重新站稳脚跟

运行时#freemory()
会告诉您虚拟机中有多少内存可用-您可以监视它并在它达到阈值时发出警报。此时调用System.gc()可能会释放更多内存,但这不是保证,应该视为最后的手段


你真的需要结合这一点来理解为什么你的回忆录快用完了,并试图做点什么来修复它。

这里有人会建议更好的选择,所以这只是我的0.02美元。我刚才在某个应用程序上做的是对一个对象进行软引用,偶尔我会检查该对象是否为空。在您真正接近OutOfMemory之前,GC正在收集软引用(通常,但不保证),所以这会告诉您,您真的快要失败了

此外,在这种情况下,您应该查看JVM选项:

-XX:SoftRefLRUPolicyMSPerMB=someValue

其中'someValue'是软引用将为每Mb可用内存保留的毫秒数。默认值为1s/Mb,因此,如果一个对象只能软访问,那么如果只有1Mb的堆空间可用,它将持续1s

这可能不是最好的选择,但仅仅是一个提示就可以了

干杯,尤金。

你可以使用;当应用程序或JVM中发生某些事情时,它将处理
自动定制响应。

它有一个将:

过滤器是一个非常强大的功能,它可以在不进行任何编码的情况下向现有应用程序添加新的行为。它通过监视JVM控制台输出的文本序列来工作。当发现它们时,可以采取任意数量的行动

例如,每当发生特定错误时,就启动JVM重启。一些应用程序已经知道一旦进入某种状态就会停止工作的bug。此功能使您可以立即解决此类问题,直到它们在应用程序中得到解决


假设您的Java应用程序在正常关闭时返回0,则一个低于shell的脚本可以充当看门狗的角色

#!/bin/bash

...

while true; do
  java ... MyClass && break
done

标准的做法是分析内存使用情况,这样就不会发生这种情况。或者你可以有一个脚本,它会反复运行程序,直到程序正常关闭。我使用了一个非常肮脏的变通方法,使用process builder,在知道我的PID是什么的情况下终止我自己的进程。这不起作用。我的应用程序将继续残废,即使有内存例外。我同意我的程序中存在内存泄漏。但在生产中,直到我的下一个补丁出现之前,这个节目应该继续。如果您正在寻找一个不包含代码更改的补丁,您可以在启用详细垃圾收集的情况下启动JVM,然后编写一个脚本来监视其输出。您应该能够识别何时接近内存问题(可能是在每次垃圾收集仅释放堆的一小部分,并且gc事件频繁且快速发生的时候),然后采取必要的措施—这听起来像是重新启动应用程序。