我在我的 JAVA 程序中遇到了 OutOfMemoryError。 发生 OutOfMemoryError 没关系,但我想在它发生时记录它。 我已经使用 -XX:OnOutOfMemoryError 选项来检测它是否发生,但它不会记录打印到控制台的堆栈跟踪信息。 我尝试使用重定向来记录此控制台输出,但是 2>&1、2> 和所有其他选项都无法记录此输出并且它只是打印到控制台。 有没有办法记录这个堆栈跟踪信息? 我一直在 stackoverflow.com 上进行谷歌搜索,但找不到答案。 请指教。
- Heap Dump 也不是我的选择。 我没有那么多空间,所以不能冒这么大的文件的风险:'( 我只需要记录堆栈跟踪信息。
谢谢!
最佳答案
选项 1: 您可以使用
OnOutOfMemoryError
钩子(Hook)结合 jstack 来获取进程的堆栈跟踪:"-XX:OnOutOfMemoryError=jstack -l %p"
注意:在生产环境中,您很可能会有单独的 shell 脚本来避免来自不同 java 版本的 jstack 出现问题。
选项 2: 您可以使用
setUncaughtExceptionHandler
捕获所有异常并检查OutOfMemoryError
特别是:Thread.currentThread().setUncaughtExceptionHandler(new UncaughtExceptionHandler() { @Override public void uncaughtException(Thread thread, Throwable ex) { ...
关于java - 记录 java outofmemoryerror stacktrace 控制台输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32706162/