【发布时间】:2021-12-28 23:11:24
【问题描述】:
我在一台 32GB 内存的机器上使用 IoTDB,并在 iotdb_env.sh 中设置 JVM 最大内存如下:
MAX_HEAP_SIZE = 25G
但是,经过两个小时的数据摄取,我发现 IoTDB 已经使用了 31GB 内存,很快就会被 OOM Killer 杀死。为什么 IoTDB 可以使用比 MAX_HEAP_SIZE 更多的内存?
【问题讨论】:
标签: apache-iotdb iotdb
我在一台 32GB 内存的机器上使用 IoTDB,并在 iotdb_env.sh 中设置 JVM 最大内存如下:
MAX_HEAP_SIZE = 25G
但是,经过两个小时的数据摄取,我发现 IoTDB 已经使用了 31GB 内存,很快就会被 OOM Killer 杀死。为什么 IoTDB 可以使用比 MAX_HEAP_SIZE 更多的内存?
【问题讨论】:
标签: apache-iotdb iotdb
在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
【讨论】: