记录java outofmemoryerror stacktrace控制台输出
我在JAVA程序中遇到了OutOfMemoryError。 OutOfMemoryError发生是可以的,但我希望在它发生时记录它。 我使用了-XX:OnOutOfMemoryError选项来检测它的发生,但它不会记录打印到控制台的stacktrace信息。 我尝试使用重定向来记录此控制台输出,但2>&1,2>和所有其他选项都未能记录此输出,它只是打印到控制台。 有没有办法记录此stacktrace信息? 我一直在stackoverflow.com上搜索,但找不到答案。 请给我一些建议记录java outofmemoryerror stacktrace控制台输出,java,logging,out-of-memory,Java,Logging,Out Of Memory,我在JAVA程序中遇到了OutOfMemoryError。 OutOfMemoryError发生是可以的,但我希望在它发生时记录它。 我使用了-XX:OnOutOfMemoryError选项来检测它的发生,但它不会记录打印到控制台的stacktrace信息。 我尝试使用重定向来记录此控制台输出,但2>&1,2>和所有其他选项都未能记录此输出,它只是打印到控制台。 有没有办法记录此stacktrace信息? 我一直在stackoverflow.com上搜索,但找不到答案。 请给我一些建议 堆转储
- 堆转储也不是我的选择。 我没有这么多空间,所以不能冒险使用这么大的文件:'( 我只需要记录stacktrace信息
- 选项1:
您可以使用
hook结合jstack来获取流程的stacktrace:OnAutofMemoryError
注意:在生产环境中,为了避免来自不同java版本的jstack出现问题,您很可能会有单独的shell脚本“-XX:OnOutOfMemoryError=jstack-l%p”
- 选项2:
您可以使用
捕获所有异常并检查setUncaughtExceptionHandler
,具体如下:OutOfMemoryError
Thread.currentThread().setUncaughtExceptionHandler(new UncaughtExceptionHandler() { @Override public void uncaughtException(Thread thread, Throwable ex) { ...