记录java outofmemoryerror stacktrace控制台输出

时间:2015-09-21 23:38:52

标签: java logging out-of-memory

我在JAVA程序中遇到过OutOfMemoryError。 OutOfMemoryError发生了,但我想在它发生时记录它。 我使用-XX:OnOutOfMemoryError选项来检测它发生了,但它没有记录打印到控制台的堆栈跟踪信息。 我尝试使用重定向来记录此控制台输出,但是2>& 1,2>,并且所有其他选项都无法记录此输出,它只是打印到控制台。 有没有办法记录这个堆栈跟踪信息? 我一直在谷歌搜索和搜索stackoverflow.com但找不到答案。 请指教。

  • Heap Dump也不是我的选择。 我没有那么多空间所以不能冒这么大的文件冒险:'( 我只需要记录stacktrace信息。

谢谢!

1 个答案:

答案 0 :(得分:3)

  • 选项1 : 您可以使用OnOutOfMemoryError hook与jstack结合来获取进程的堆栈跟踪:

    "-XX:OnOutOfMemoryError=jstack -l %p"

    note :在生产中,你很可能会有单独的shell脚本,以避免来自不同java版本的jstack问题。

  • 选项2 : 您可以使用setUncaughtExceptionHandler来捕获所有异常,并专门检查OutOfMemoryError

    Thread.currentThread().setUncaughtExceptionHandler(new UncaughtExceptionHandler() {
    
            @Override
            public void uncaughtException(Thread thread, Throwable ex) {
    ...