当前位置: 首页 > 面试题库 >

如何在内存不足时生成线程转储Java

陶英纵
2023-03-14
问题内容
  • 除了堆转储(java_pid14941.hprof),Java 6还会生成线程转储吗?

  • 这就是我的一个应用程序发生的事情。

java.lang.OutOfMemoryError:超出了GC开销限制将堆倾倒到java_pid14941.hprof …

  • 我确实在工作目录中找到了ava_pid14941.hprof,但没有找到任何包含线程转储的文件。当我收到此OutOfMemory错误时,我需要知道所有线程在做什么。

  • 除了发生内存不足异常时的堆转储之外,是否有任何配置选项会生成线程转储?


问题答案:

如何在发生内存不足错误时生成线程转储Java?

您的问题可以简化为:

  • 如何生成线程转储

和:

  • 如何捕获内存不足错误(在这里不要注意naysayer,他们正在错过大图,请参阅我的评论)

因此,这实际上很容易,您可以这样操作:

  • 安装默认的未捕获异常处理程序

  • 捕获未捕获的异常后,检查是否存在OutOfMemoryError

  • 如果存在OutOfMemoryError,请为自己生成一个完整的线程转储,然后要求用户通过电子邮件将其发送给您,或者主动提供自动发送

奖励:它在1.5上也能正常工作:)

 Thread.setDefaultUncaughtExceptionHandler( new Thread.UncaughtExceptionHandler() {
     public void uncaughtException( final Thread t, final Throwable e ) {
         ...
     }

您可能需要调查以下内容:

 e.getMessage();

还有这个:

Thread.getAllStackTraces();

我一直在使用数百种不同的1.5和1.6 JVM(在不同的操作系统上)附带的应用程序中进行此操作。



 类似资料:
  • 问题内容: 问题场景:在sonic MF容器(jvm)中发现了问题。该容器托管了一些负责db操作和消息转换的Java服务。启动后,该容器可以正常运行2-3周,并自行终止而不抛出任何例外。 经过大量研究,我们无法找出导致jvm(MF容器)关闭的原因或原因。 有没有一种方法可以在jvm自动关闭时获取线程转储?我正在使用Java 1.6。我应该采取其他方法解决此问题吗? 提前致谢。 问题答案: 您可以尝

  • 我正在尝试使用安装FOSUserBundle,但出现错误: 我搜索了这个问题,找到了答案:Composer require内存不足。PHP致命错误:允许的内存大小1610612736字节已用尽 我已经改变了我的php.ini1024M但没有(甚至作曲家更新生成相同的错误)然后到-1没有发生什么。 我想知道我在哪里可以找到composer.phar使用这个命令(我已经通过Wondows安装程序安装了

  • 问题内容: 我想创建一个跟踪内存使用情况和cpu使用情况的线程。 如果应用程序达到较高级别,我想生成一个堆转储或线程转储。 有没有一种方法可以生成线程转储运行时而无需重新启动? 问题答案: 这是我们以编程方式进行的操作:http : //pastebin.com/uS5jYpd4 我们使用 和类: 您也可以在〜unix下进行操作以将堆栈转储到标准输出中。还有jstack来转储JVM的堆栈。 我们还

  • 我正在尝试使用“ng build”构建我的angular应用程序。它之所以失败,是因为根据我的研究推测,它的内存不足,无法构建。我尝试过几种解决方案,但都没有成功。从VSC终端或在DOS线路上键入“ng build”后,它将在此步骤中运行约3分钟: 然后它会失败,并将此错误写入我的angular-errors.log文件: 正如一些文章/堆栈溢出所指出的那样,我试图增加我的内存。我试过这个: 然后

  • 问题内容: 我有一个最终应该生成的程序。程序代码为: 我使用以下参数运行程序: 该程序因OutOfMemory失败,但未生成转储文件。 你知道为什么吗? 问题答案: 对于初学者,请删除XX选项以及 之前的 所有选项,否则,请将参数传递给Java程序而不是JVM