Увеличение пространства кучи, доступного для JVM: OutOfMemoryError: Запрошенный размер массива превышает ограничение виртуальной машины Ubuntu 64Bit Neo4j 2.0

Мои характеристики:

Ubuntu 64bit

-Neo4j 2.0

-32 ГБ ОЗУ

-AMD FX-8350 Eight Core Процессор

Эта проблема:

Я делаю запрос на мой сервер Neo4j с помощью следующего запроса:

MATCH (being:my_label_2) RETURN being

И дает мне эту ошибку:

OutOfMemoryError

Requested array size exceeds VM limit

StackTrace:
java.lang.StringCoding$StringEncoder.encode(StringCoding.java:300)
java.lang.StringCoding.encode(StringCoding.java:344)
java.lang.String.getBytes(String.java:916)
org.neo4j.server.rest.repr.OutputFormat.toBytes(OutputFormat.java:194)
org.neo4j.server.rest.repr.OutputFormat.formatRepresentation(OutputFormat.java:147)
org.neo4j.server.rest.repr.OutputFormat.response(OutputFormat.java:130)
org.neo4j.server.rest.repr.OutputFormat.ok(OutputFormat.java:67)
org.neo4j.server.rest.web.CypherService.cypher(CypherService.java:101)
java.lang.reflect.Method.invoke(Method.java:606)
org.neo4j.server.rest.transactional.TransactionalRequestDispatcher.dispatch(TransactionalRequestDispatcher.java:139)
org.neo4j.server.rest.security.SecurityFilter.doFilter(SecurityFilter.java:112)

Это хорошо работает с "my_label_1", который возвращает около 30k результатов

Что я считаю, это проблема:

У меня недостаточно памяти для моей JVM

Попытки исправить / вещи, которые я нашел в Интернете:

Я прочитал, что говорится в руководстве

И что говорят на форумах Ubuntu

Поэтому я попытался зайти в мою папку neo4 (как обычно с cd) и запустить ее с аргументами следующим образом:

sudo bin/neo4j start -Xmx4096M

Однако это не сработало. Когда Neo4j запускается, он предупреждает меня, что у меня может не хватить места с:

WARNING: Max 1024 open files allowed, minimum of 40 000 recommended. See the Neo4j manual.
Using additional JVM arguments:  -server -XX:+DisableExplicitGC -Dorg.neo4j.server.properties=conf/neo4j-server.properties -Djava.util.logging.config.file=conf/logging.properties -Dlog4j.configuration=file:conf/log4j.properties -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled

Вопрос

Я знаю, что определенно использую неправильные аргументы, честно говоря, у меня нет большого опыта работы с конфигурациями JVM. Как мне подойти к этому, я что-то упустил?

1 ответ

Решение

Вы должны поместить настройку JVM в conf/neo4j-wrapper.conf файл. Это должно выглядеть так:

user@pc:> head -n 7 neo4j-enterprise-2.0.0/conf/neo4j-wrapper.conf
wrapper.java.additional=-Dorg.neo4j.server.properties=conf/neo4j-server.properties
wrapper.java.additional=-Djava.util.logging.config.file=conf/logging.properties
wrapper.java.additional=-Dlog4j.configuration=file:conf/log4j.properties

# Java Additional Parameters
wrapper.java.additional=-XX:+UseConcMarkSweepGC
wrapper.java.additional=-XX:+CMSClassUnloadingEnabled

Обратите внимание, что вы можете настроить различные аспекты neo4j через разные файлы, поэтому лучше прочитать описание каждого файла в этом conf/ каталог для того, чтобы ознакомиться с тем, что можно сделать и как именно.

Другие вопросы по тегам