Per*_*ium 5 java memory jvm out-of-memory shutdown-hook
我有一个在java(1.6)中运行的关键进程,带有一个注册的关闭钩子.在某些情况下我得到一个OOM问题(下面有关于该问题的更多细节),该过程突然停止,我没有得到任何我的日志,我的捕获(Throable x)没有捕获异常.
但是关闭钩子有效.因此,如果有一种方法可以知道由于某些令人讨厌的OOM而导致进程停止,我可以在退出之前记录必要的信息.
有没有办法做到这一点?
关于OOM:不确定什么是例外,因为我说它不会被抓住.我知道这是一个OOM因为我开始这个过程
-XX:+HeapDumpOnOutOfMemoryError
Run Code Online (Sandbox Code Playgroud)
我得到一个堆转储文件.在其他情况下,会捕获异常,并且它是ava.lang.OutOfMemoryError:超出了GC开销限制.但不确定这种情况总是如此.
编辑:
如果不清楚:我不是试图阻止OOM,因为它可能在某些情况下出于正当理由,我只是想确保在应用程序日志文件中清楚
我的问题是:是否有可能在关机钩子中发现由于OOM导致进程正在关闭?
我需要以编程方式和相同的过程进行此操作.
目前最好的方法是查看是否存在process_.hprof(我知道pid)的堆转储文件java_pid_pid,其中包含最近的日期并推断出有一个OOM.我想我可以尝试Runtime.getRuntime().freeMemory()并报告问题,如果可用的内存非常低,但不确定这是多么可靠,可能当进程关闭时它已经释放了很多内存,方法以上是我认为最好的.
| 归档时间: |
|
| 查看次数: |
1111 次 |
| 最近记录: |