IoTDB 内存使用量超过 MAX_HEAP_SIZE

IoTDB memory usage exceed MAX_HEAP_SIZE

我在一台内存为 32GB 的机器上使用 IoTDB,并在 iotdb_env.sh 中设置 JVM 最大内存如下:

MAX_HEAP_SIZE = 25G

然而,经过两个小时的数据摄取,我发现IoTDB已经使用了31GB内存,很快就会被OOM killer杀死。为什么 IoTDB 可以使用比 MAX_HEAP_SIZE 更多的内存?

在jvm中,内存分为堆内存和非堆内存。您可以参考此问题以获取更多详细信息: What is the difference between Java Non Heap Memory and Stack Memory? Are they Same if not what is the difference between them? IoTDB 使用一些使用非堆内存的直接缓冲区。因此总内存使用量将超过 MAX_HEAP_SIZE。您可以在“iotdb_env.sh”中使用以下参数来控制非堆内存:

MAX_DIRECT_MEMORY_SIZE = 5G

您需要确保 MAX_HEAP_SIZE + MAX_DIRECT_MEMORY_SIZE < 总内存以避免 OOM 杀手杀死您的 IoTDB。