Dan*_*Kim 5 java logging out-of-memory
我在 JAVA 程序中遇到了 OutOfMemoryError。发生 OutOfMemoryError 没关系,但我想在发生时记录它。我已使用 -XX:OnOutOfMemoryError 选项来检测它是否发生,但它不会记录打印到控制台的堆栈跟踪信息。我尝试使用重定向来记录此控制台输出,但是 2>&1、2> 和所有其他选项都无法记录此输出,并且它只是打印到控制台。有什么方法可以记录这个堆栈跟踪信息吗?我一直在 stackoverflow.com 上进行谷歌搜索,但找不到答案。请指教。
谢谢你!
选项 1:您可以将OnOutOfMemoryErrorhook 与 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) {
...
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
2106 次 |
| 最近记录: |