Neo4j ПРЕДУПРЕЖДЕНИЕ: разрешено не более 1024 открытых файлов, рекомендуется не менее 40 000. Смотрите руководство Neo4j

40

Я установил Neo4j на Ubuntu 12.04, используя следующие инструкции: http://www.neo4j.org/download/linux

wget -O - http://debian.neo4j.org/neotechnology.gpg.key | apt-key add - 
echo 'deb http://debian.neo4j.org/repo stable/' > /etc/apt/sources.list.d/neo4j.list
apt-get update
apt-get install neo4j

Я убедился, что у меня есть правый jdk:

root@precise64:~# java -version
java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)

И когда я запускаю neo4j, я получаю эту ошибку:

ПРЕДУПРЕЖДЕНИЕ. Разрешено максимально 1024 открытых файлов, рекомендуется минимум 40 000. См. Руководство Neo4j.

Итак, я следую инструкциям здесь: http://docs.neo4j.org/chunked/1.6.2/configuration-linux-notes.html

И добавьте это содержимое в /etc/security/limits.conf

neo4j   soft    nofile  40000
neo4j   hard    nofile  40000

И раскомментируйте эту строку в /etc/pam.d/su

session    required   pam_limits.so

После перезапуска сервера я проверяю новый предел

neo4j@precise64:~$ ulimit -n
40000

Затем я перезапускаю свой сервер. Я все еще получаю ту же ошибку при запуске.

root@precise64:~# service neo4j-service start
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
Starting Neo4j Server...WARNING: not changing user
process [3161]... waiting for server to be ready....... OK.
http://localhost:7474/ is ready.

Даже несмотря на то, что служба работает как пользователь neo4j:

root@precise64:~# ps -ef | grep 3161
neo4j     3161     1  2 17:43 pts/0    00:00:10 /usr/bin/java -cp /var/lib/neo4j/lib/concurrentlinkedhashmap-lru-1.3.1.jar:/var/lib/neo4j/lib/geronimo-jta_1.1_spec-1.1.1.jar:/var/lib/neo4j/lib/lucene-core-3.6.2.jar:/var/lib/neo4j/lib/neo4j-cypher-2.0.0.jar:/var/lib/neo4j/lib/neo4j-cypher-commons-2.0.0.jar:/var/lib/neo4j/lib/neo4j-cypher-compiler-1.9-2.0.0.jar:/var/lib/neo4j/lib/neo4j-cypher-compiler-2.0-2.0.0.jar:/var/lib/neo4j/lib/neo4j-graph-algo-2.0.0.jar:/var/lib/neo4j/lib/neo4j-graph-matching-2.0.0.jar:/var/lib/neo4j/lib/neo4j-jmx-2.0.0.jar:/var/lib/neo4j/lib/neo4j-kernel-2.0.0.jar:/var/lib/neo4j/lib/neo4j-lucene-index-2.0.0.jar:/var/lib/neo4j/lib/neo4j-shell-2.0.0.jar:/var/lib/neo4j/lib/neo4j-udc-2.0.0.jar:/var/lib/neo4j/lib/org.apache.servicemix.bundles.jline-0.9.94_1.jar:/var/lib/neo4j/lib/parboiled-core-1.1.6.jar:/var/lib/neo4j/lib/parboiled-scala_2.10-1.1.6.jar:/var/lib/neo4j/lib/scala-library-2.10.3.jar:/var/lib/neo4j/lib/server-api-2.0.0.jar:/var/lib/neo4j/system/lib/asm-3.1.jar:/var/lib/neo4j/system/lib/bcprov-jdk16-140.jar:/var/lib/neo4j/system/lib/commons-beanutils-1.8.0.jar:/var/lib/neo4j/system/lib/commons-beanutils-core-1.8.0.jar:/var/lib/neo4j/system/lib/commons-collections-3.2.1.jar:/var/lib/neo4j/system/lib/commons-compiler-2.6.1.jar:/var/lib/neo4j/system/lib/commons-configuration-1.6.jar:/var/lib/neo4j/system/lib/commons-digester-1.8.1.jar:/var/lib/neo4j/system/lib/commons-io-1.4.jar:/var/lib/neo4j/system/lib/commons-lang-2.4.jar:/var/lib/neo4j/system/lib/commons-logging-1.1.1.jar:/var/lib/neo4j/system/lib/jackson-core-asl-1.9.7.jar:/var/lib/neo4j/system/lib/jackson-jaxrs-1.9.7.jar:/var/lib/neo4j/system/lib/jackson-mapper-asl-1.9.7.jar:/var/lib/neo4j/system/lib/janino-2.6.1.jar:/var/lib/neo4j/system/lib/javax.servlet-3.0.0.v201112011016.jar:/var/lib/neo4j/system/lib/jcl-over-slf4j-1.6.1.jar:/var/lib/neo4j/system/lib/jersey-core-1.9.jar:/var/lib/neo4j/system/lib/jersey-multipart-1.9.jar:/var/lib/neo4j/system/lib/jersey-server-1.9.jar:/var/lib/neo4j/system/lib/jetty-http-9.0.5.v20130815.jar:/var/lib/neo4j/system/lib/jetty-io-9.0.5.v20130815.jar:/var/lib/neo4j/system/lib/jetty-security-9.0.5.v20130815.jar:/var/lib/neo4j/system/lib/jetty-server-9.0.5.v20130815.jar:/var/lib/neo4j/system/lib/jetty-servlet-9.0.5.v20130815.jar:/var/lib/neo4j/system/lib/jetty-util-9.0.5.v20130815.jar:/var/lib/neo4j/system/lib/jetty-webapp-9.0.5.v20130815.jar:/var/lib/neo4j/system/lib/jetty-xml-9.0.5.v20130815.jar:/var/lib/neo4j/system/lib/jsr311-api-1.1.2.r612.jar:/var/lib/neo4j/system/lib/logback-access-1.0.9.jar:/var/lib/neo4j/system/lib/logback-classic-1.0.9.jar:/var/lib/neo4j/system/lib/logback-core-1.0.9.jar:/var/lib/neo4j/system/lib/mimepull-1.6.jar:/var/lib/neo4j/system/lib/neo4j-browser-2.0.0.jar:/var/lib/neo4j/system/lib/neo4j-server-2.0.0-static-web.jar:/var/lib/neo4j/system/lib/neo4j-server-2.0.0.jar:/var/lib/neo4j/system/lib/rhino-1.7R3.jar:/var/lib/neo4j/system/lib/rrd4j-2.0.7.jar:/var/lib/neo4j/system/lib/slf4j-api-1.6.2.jar:/var/lib/neo4j/conf/ -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 -Dneo4j.home=/var/lib/neo4j -Dneo4j.instance=/var/lib/neo4j -Dfile.encoding=UTF-8 org.neo4j.server.Bootstrapper
root      3238  2056  0 17:49 pts/0    00:00:00 grep --color=auto 3161

Итак, я думаю, что, возможно, запуск службы с правами root - проблема, поэтому я ее закрываю и запускаю как пользователь neo4j.

root@precise64:~# service neo4j-service stop
root@precise64:~# su - neo4j 
neo4j@precise64:~$ service neo4j-service start
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
Starting Neo4j Server...WARNING: not changing user
process [3435]... waiting for server to be ready....... OK.
http://localhost:7474/ is ready.
cp: cannot create regular file `/var/run/neo4j.pid': Permission denied

И это не удается, потому что файл pid не может быть создан. Я предполагаю, что это неправильный подход, но я продолжаю и редактирую /etc/init.d/neo4j-service, чтобы изменить местоположение файла pid в домашней папке пользователя neo4j:

#PIDFILE=/var/run/$NAME.pid
PIDFILE=/var/lib/neo4j/$Name.pid

А потом запускается без ошибок при запуске службы в качестве пользователя Neo4j.

Итак, мой вопрос: каково намеренное поведение? Должен ли запуск службы работать с правами root, если пользователь neo4j имеет правильные разрешения ulimit, или мне нужно изменить запуск script/permissions, чтобы позволить пользователю neo4j создавать его PID файл?

  • 11
    Это относится к отказу сервера, но я просто скажу вам, что вы должны запускать службы от имени пользователя root, что параметры сеанса PAM намеренно не применяются к службам (поскольку каждому демону может потребоваться собственный уникальный набор, отличный от что происходит с пользовательскими сеансами), и что правильный способ справиться с этим - поместить ulimit -n 40000 в /etc/init.d/neo4j-service (прямо перед командой, которая фактически запускает демон).
Теги:
neo4j

6 ответов

21

Вам нужно добавить следующие записи в файл /etc/security/limits.conf

root   soft    nofile  40000
root   hard    nofile  40000

Вам нужно запустить службу с правами root или с помощью sudo

Когда вы это сделаете, пользователь, который заканчивает запуск службы, является пользователем root.

Если у вас нет записи в файле для пользователя root, это не сработает.

Итак, вам просто нужно добавить эти записи в файл и перезагрузить сервер.

У меня была та же проблема, и именно так я смог ее разрешить.

  • 6
    Что делать, если вы используете сервер под другим пользователем? Вы должны добавить записи для этого пользователя? то есть. bill soft nofile 40000
  • 0
    @sidewaiise: Да, добавьте этого пользователя тоже. «Билл мягкие нофиле 40000» и «Билл мягкие нофиле 40000».
Показать ещё 1 комментарий
18

Как упоминалось в этом выпуске комментария и исправлено с помощью этого коммита, поскольку Neo4J 3.1,

вы можете добавить строку в /etc/default/neo4j:

NEO4J_ULIMIT_NOFILE=60000

чтобы установить настройку ulimit (60000 открытых файлов) для службы.

Теперь нет необходимости использовать /etc/security/limits.conf в debian для установки количества открытых файлов.

13

Решения, отправленные @israel и @Tomasz Swider, не работали для меня (я запускаю Ubuntu 14.04). Однако я мог бы избавиться от этого предупреждения, изменив файл /etc/init.d/neo4j-service, как было предложено @zwol, в комментариях ниже вопроса:

Я добавил строку ulimit -n 40000 к методу do_start() в этом файле. В моем случае этот метод выглядит следующим образом:

do_start()
{
        # Return
        #   0 if daemon has been started
        #   1 if daemon was already running
        #   2 if daemon could not be started
        ulimit -n 40000
        start-stop-daemon --chuid ${NEO_USER} --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
                || return 1
        start-stop-daemon --chuid ${NEO_USER} --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
                $DAEMON_ARGS \
                || return 2
}

Когда я запустил службу, используя команду

sudo service neo4j-service start

он запускается без предупреждения и возвращает следующее сообщение:

Starting Neo4j Server...WARNING: not changing user
process [9921]... waiting for server to be ready...... OK.
http://localhost:7474/ is ready.

Я не уверен, что это путь, но как написано выше, это единственное решение, которое до сих пор работало на меня, чтобы избавиться от этого предупреждения.

EDIT:

Не тестировали, но, похоже, теперь доступно более простое решение: см. ответ @Schrodinger''Cat.

6

В файле /etc/security/limits.conf вам нужно установить ограничения для пользователя, от которого вы будете запускать сервер neo4j, поэтому, если вы хотите использовать пользователя root, используйте root, но это, вероятно, плохая идея, настройки:

neo4j   soft    nofile  40000 
neo4j   hard    nofile  40000

сработало бы, если бы вы добавили пользователя neo4j, у меня были некоторые проблемы с этим, поэтому я просто установил их для моего пользователя по умолчанию, который называется 'bob'.

bob   soft    nofile  40000 
bob   hard    nofile  40000

и тогда я только начал neo4j, вошедший в систему как Боб.

  • 0
    Вы также можете использовать * soft nofile 40000 . В этом случае нет необходимости указывать конкретного пользователя
5

Я применил изменения, как было предложено в предыдущих ответах

root   soft    nofile  40000
root   hard    nofile  40000

neo4j   soft    nofile  40000 
neo4j   hard    nofile  40000

to

/etc/security/limits.conf

Тем не менее, я все еще получил предупреждение о разрешении только 1024 открытых файлов. Команда

ulimit -a

отображалось только 1024 открытых файла.

Хитрость заключалась в выходе из сервера, а затем входе в систему. В новом сеансе были применены значения новой конфигурации пределов, и я мог

service neo4j-server restart

разрешено 40.000 открытых файлов.

1

Это работало для меня в Arch Linux (x86_64), где до этих модификаций ulimit -n был 1024):

  1. Отредактируйте /etc/pam.d/su, добавьте:

    требуется сеанс pam_limits.so

  2. Редактировать оба

    /etc/systemd/system.conf

    /etc/systemd/user.conf

    добавьте к каждому (какую бы ценность вы ни выбрали: я выбрал 100 000):

    DefaultLimitNOFILE=100000

  3. Перезагружать.

    $ ulimit -n 100000

На основе

Ещё вопросы

Сообщество Overcoder
Наверх
Меню