Увеличение пространства кучи, доступного для 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/
каталог для того, чтобы ознакомиться с тем, что можно сделать и как именно.