GraphDB OutOfMemoryError: Java heap space

GraphDB OutOfMemoryError: Java heap space

我在研究项目中使用 GraphDb Free 8.6.1,我 运行 它在 linux 服务器上具有默认配置,总共有 4GB 内存。

目前,我们在tripplestore中执行了相当多的CRUD操作。

GraphDB 在控制台中抛出异常:

java.lang.OutOfMemoryError: Java heap space
-XX:OnOutOfMemoryError="kill -9 %p"
Executing /bin/sh -c "kill -9 1411"...

查看进程,GraphDB 以参数 XX:MaxDirectMemorySize=128G

运行

我无法更改,即使使用./graph -Xmx3g,进程仍然是运行 XX:MaxDirectMemorySize=128G.

我已尝试配置 ./grapdh 参数,设置 GDB_HEAP_SIZE=3072m,现在进程使用附加的 -Xms3072m -Xmx3072m 参数运行,但仍然 XX:MaxDirectMemorySize=128G。

更新到 GDB_HEAP_SIZE=3072m 后,存储库再次关闭,没有 .hprof 文件,无一例外,日志中没有任何可疑之处。以下行已刷新到控制台:Java HotSpot(TM) 64 位服务器 VM 警告:

Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00007f5b4b6d0000, 65536, 1) failed; error='Cannot allocate memory' (errno=12)

拜托,你能帮我正确配置 GraphDB tripplestore 以摆脱堆 Space 异常吗?

谢谢。

默认情况下,JVM 中-XX:MaxDirectMemorySize(堆外内存)参数的值等于-XMx(堆内存)。对于非常大的存储库,堆外内存的大小可能会变得不足,因此 GraphDB 开发人员将此参数设置为 128GB 或无限制。

我怀疑您的实际问题实际上是在堆内存上分配了太多内存,这导致 RAM 中的堆外内存没有 space。当数据库尝试分配堆外 RAM 时,您遇到了这个低 OS 级别的错误 'Cannot allocate memory'.

解决这个问题有两种选择:

  • 将服务器的 RAM 增加到 8GB 并保持相同的配置 - 这将允许分配 8GB RAM:2GB (OS) + 3GB(堆上)+ 3GB(堆外)
  • -Xmx 值减小到 2GB,这样 4GB RAM 将被分配:1GB (OS) + 2GB(堆上)+ 1GB(堆外)

要获得 GraphDB 需要多少 RAM 的近似值,请查看硬件大小调整页面:

http://graphdb.ontotext.com/documentation/8.6/free/requirements.html