首页 > 解决方案 > 如何以编程方式检测 java.lang.OutOfMemoryError: Direct buffer memory to create a java heap dump?

问题描述

从 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)

标签: javalinux

解决方案


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


推荐阅读