【问题标题】:How to programmatically detect java.lang.OutOfMemoryError: Direct buffer memory to create a java heap dump? [duplicate]如何以编程方式检测 java.lang.OutOfMemoryError: Direct buffer memory to create a java heap dump? [复制]
【发布时间】:2021-10-13 00:36:15
【问题描述】:

从 linux 日志文件中,记录了“java.lang.OutOfMemoryError: Direct buffer memory”异常。如何捕获异常,以便创建 Java 进程的堆转储?我还需要知道发生异常时如何重新启动 java 程序。但是,我将为此发布另一个问题。顺便说一下,Java 工具选项“-XX:+HeapDumpOnOutOfMemoryError”不会在直接内存异常上创建堆转储。

9 月 20 日 23:02:55 CKM01204505062-A 控制路径 [128819]:2021-09-20 23:02:55.266 [] [INFO] [com.emc.bedrock.http.HttpVerticle|vert.x-eventloop-thread -3] 请求 ID:2c7633a4-db9c-4ec5-b4ca-c93c47512384 在 4 毫秒内完成。 9 月 20 日 23:02:55 CKM01204505062-A 控制路径 [128199]:线程“iothread-2”中的异常 java.lang.OutOfMemoryError:直接缓冲内存 9 月 20 日 23:02:55 CKM01204505062-A 控制路径 [128199]:在 java.nio.Bits.reserveMemory(Bits.java:695) 9 月 20 日 23:02:55 CKM01204505062-A 控制路径 [128199]:在 java.nio.DirectByteBuffer.(DirectByteBuffer.java:123) 9 月 20 日 23:02:55 CKM01204505062-A 控制路径 [128199]:在 java.nio.ByteBuffer.allocateDirect(ByteBuffer.java:311) 9 月 20 日 23:02:55 CKM01204505062-A 控制路径 [128199]:在 zmq.DecoderBase.(DecoderBase.java:35) 9 月 20 日 23:02:55 CKM01204505062-A 控制路径 [128199]:在 zmq.V1Decoder.(V1Decoder.java:21) 9 月 20 日 23:02:55 CKM01204505062-A 控制路径 [128199]:在 zmq.StreamEngine.newDecoder(StreamEngine.java:102) 9 月 20 日 23:02:55 CKM01204505062-A 控制路径 [128199]:在 zmq.StreamEngine.handshake(StreamEngine.java:549) 9 月 20 日 23:02:55 CKM01204505062-A 控制路径 [128199]:在 zmq.StreamEngine.inEvent(StreamEngine.java:278) 9 月 20 日 23:02:55 CKM01204505062-A 控制路径 [128199]:在 zmq.IOObject.inEvent(IOObject.java:86) 9 月 20 日 23:02:55 CKM01204505062-A 控制路径 [128199]:在 zmq.Poller.run(Poller.java:228) 9 月 20 日 23:02:55 CKM01204505062-A 控制路径 [128199]:在 java.lang.Thread.run(Thread.java:748)

【问题讨论】:

  • 这不是Exception,而是Error。捕获错误通常不是一个好主意,但如果仔细处理,在某些情况下可能会有用。
  • 您没有捕获异常,或者在您的应用程序中执行类似操作,因为无法从 JVM 中的应用程序代码触发转储创建。相反,您可以在命令行上设置 JVM 选项。真正的答案在 duplink 中(你找到了!)。
  • stackoverflow.com/questions/2787976/… 没有回答这个问题。虽然 OOM 与直接缓冲内存有关,但 VM 标志并没有捕捉到它。我已经在 J​​DK 11 中检查过了

标签: java linux


【解决方案1】:

实际上,我在以下位置找到了检测直接内存不足异常的答案: how to generate thread dump java on out of memory error

【讨论】:

  • 如果您找到了答案并且它本质上是另一个问答,请删除您的问题或写一个针对您的具体情况具体化答案的答案。仅链接到另一个问答而不添加任何特定或新内容的答案是一个糟糕的答案,并且浪费了每个人的时间。 (并且像这样的答案在审查中经常被删除为“仅链接答案”)
猜你喜欢
  • 2019-09-17
  • 2018-06-13
  • 2021-02-18
  • 2018-07-04
  • 2013-05-18
  • 2018-12-25
  • 2014-06-15
相关资源
最近更新 更多