java - 记录 java outofmemoryerror stacktrace 控制台输出

标签 java logging out-of-memory

我在我的 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/

相关文章:

android - 如何修复 Android 模拟器上频繁出现的内存不足错误?

java - 运行java应用程序时如何克服java内存不足错误?

java - 读取文件 java.lang.OutOfMemoryError

java - 使用 GNU make 将 java 内部类文件包含到 JAR

c++ - 使用 CMake 添加 Boost.Log 以 boost 库

java - 自定义组件的 JTree 自定义单元格编辑器不响应首次单击

java - 异常处理标准建议

Python 日志记录 - 当前安装的记录器/处理程序的概述

java - 对于离屏渲染最有用的 java.awt.image.BufferedImage 类型是什么?

java - 从文件中读取,分割行并存储在数组中JAVA