GraphDB OutOfMemoryError: пространство кучи Java - PullRequest
0 голосов
/ 01 октября 2018

Я использую GraphDb Free 8.6.1 в исследовательском проекте и запускаю его с конфигурацией по умолчанию на сервере linux, имеющем всего 4 ГБ памяти.

В настоящее время мы выполняем довольно много CRUD-операций в tripplestore.

Возникла исключительная ситуация в 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, без исключения, ничего подозрительного в журналах.В консоль была выведена следующая строка: Предупреждение о виртуальной машине 64-разрядного сервера Java HotSpot (TM):

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

Не могли бы вы помочь мне правильно настроить Tripplestore GraphDB, чтобы избавиться от исключений пространства кучи?

Спасибо.

1 Ответ

0 голосов
/ 04 октября 2018

По умолчанию значение параметра -XX:MaxDirectMemorySize (вне памяти кучи) в JVM равно -XMx (в памяти кучи).Для очень больших репозиториев размер памяти вне кучи может стать недостаточным, поэтому разработчики GraphDB установили этот параметр как 128 ГБ или не ограничены.

Я подозреваю, что ваша настоящая проблема на самом деле слишком много выделяется в памяти кучи, которая не оставляет местадля выключенной кучи в оперативной памяти.Когда база данных пытается выделить ОЗУ кучи, возникает ошибка низкого уровня ОС «Невозможно выделить память».

У вас есть два варианта решения этой проблемы:

  • Увеличение ОЗУсервера до 8 ГБ и сохранить ту же конфигурацию - это позволило бы распределить 8 ГБ ОЗУ: 2 ГБ (ОС) + 3 ГБ (в куче) + 3 ГБ (вне кучи)
  • Уменьшить значение -Xmxдо 2 ГБ, поэтому будет распределено 4 ГБ ОЗУ: 1 ГБ (для ОС) + 2 ГБ (для кучи) + 1 ГБ (для кучи)

Чтобы получить приблизительное значение объема оперативной памяти GraphDB, проверьте размеры оборудования.страница:

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

...