web-dev-qa-db-fra.com

Neo4j AVERTISSEMENT: 1024 fichiers ouverts maximum autorisés, minimum de 40 000 recommandés. Voir le manuel Neo4j

J'ai installé Neo4j sur Ubuntu 12.04 en suivant les instructions suivantes: 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

Je me suis assuré d'avoir le bon 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)

Et quand je démarre neo4j, je reçois cette erreur:

AVERTISSEMENT: 1024 fichiers ouverts maximum autorisés, minimum de 40 000 recommandés . Voir le manuel Neo4j.

Je suis donc les instructions ici: http://docs.neo4j.org/chunked/1.6.2/configuration-linux-notes.html

Et ajoutez ces contenus à /etc/security/limits.conf

neo4j   soft    nofile  40000
neo4j   hard    nofile  40000

Et décommentez cette ligne dans /etc/pam.d/su

session    required   pam_limits.so

Après avoir redémarré le serveur, je valide la nouvelle limite

neo4j@precise64:~$ ulimit -n
40000

Puis je redémarre mon serveur. Je reçois toujours la même erreur lors du démarrage. 

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.

Même si le service est exécuté en tant qu'utilisateur 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

Je pense donc que le problème est peut-être de démarrer le service en tant que root, aussi je l'ai arrêté et démarré en tant qu'utilisateur 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

Et cela échoue car le fichier pid ne peut pas être créé. Ce qui, je suppose, signifie que ce n'est pas la bonne approche, mais je vais de l'avant et édite /etc/init.d/neo4j-service pour changer l'emplacement du fichier pid dans le dossier personnel de l'utilisateur neo4j:

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

Et puis les choses démarrent sans erreur lorsque je lance le service en tant qu'utilisateur Neo4j. 

Ma question est donc la suivante: quel est le comportement souhaité? Le démarrage du service en tant que root doit-il fonctionner tant que l'utilisateur neo4j dispose des autorisations ulimit appropriées, ou dois-je modifier le script/autorisations de démarrage pour permettre à l'utilisateur neo4j de créer son fichier PID?

42
Dave Kerber

Vous devez ajouter les entrées suivantes dans le fichier /etc/security/limits.conf

root   soft    nofile  40000
root   hard    nofile  40000

Vous devez démarrer le service en tant que root ou en utilisant Sudo

Lorsque vous faites cela, l'utilisateur qui finit par démarrer le service est l'utilisateur root.

Si vous n'avez pas d'entrée dans le fichier pour l'utilisateur root, cela ne fonctionnera pas.

Il vous suffit donc d’ajouter ces entrées au fichier, puis de redémarrer votre serveur.

J'ai eu le même problème et c'est ainsi que j'ai pu le résoudre.

22
Israel

Comme mentionné dans ce commentaire de problème et corrigé par ce commit , depuis Neo4J 3.1 

vous pouvez ajouter une ligne dans /etc/default/neo4j:

NEO4J_ULIMIT_NOFILE=60000

définir le paramètre ulimit (60000 fichiers ouverts) pour le service.

Il n’est plus nécessaire d’utiliser /etc/security/limits.conf sur debian pour définir le nombre de fichiers ouverts.

18
Schrodinger's'Cat

Les solutions publiées par @israel et par @Tomasz Swider ne fonctionnaient pas pour moi (je suis sous Ubuntu 14.04). Cependant, je pourrais me débarrasser de cet avertissement en modifiant le fichier /etc/init.d/neo4j-service comme suggéré par @zwol dans les commentaires sous la question:

J'ai ajouté la ligne ulimit -n 40000 à la méthode do_start() dans ce fichier. Dans mon cas, cette méthode se présente alors comme suit:

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
}

Quand je lance ensuite le service en utilisant la commande

Sudo service neo4j-service start

il commence sans avertissement et renvoie le message suivant:

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

Je ne suis pas sûr que ce soit la voie à suivre, mais comme indiqué ci-dessus, c'était la seule solution qui fonctionnait pour moi jusqu'à présent pour éliminer cet avertissement.

MODIFIER:

Je ne l'ai pas testé, mais il semble qu'il existe maintenant une solution plus simple: voir la réponse de @ Schrodinger's'Cat .

13
Cleb

Dans le fichier /etc/security/limits.conf, vous devez définir les limites de l'utilisateur sur lequel vous souhaitez exécuter le serveur neo4j. Ainsi, si l'utilisateur que vous souhaitez utiliser est root, utilisez-le, réglages:

neo4j   soft    nofile  40000 
neo4j   hard    nofile  40000

fonctionnerait si vous deviez ajouter un utilisateur neo4j, j’avais quelques problèmes avec cela, donc je viens de les définir sur mon utilisateur par défaut qui est "bob".

bob   soft    nofile  40000 
bob   hard    nofile  40000

et puis je viens de commencer le neo4j connecté en tant que bob.

7
Tomasz Swider

J'ai appliqué les modifications comme suggéré dans les réponses précédentes 

root   soft    nofile  40000
root   hard    nofile  40000

neo4j   soft    nofile  40000 
neo4j   hard    nofile  40000

à 

/etc/security/limits.conf

Néanmoins, je suis toujours averti que seuls 1024 fichiers ouverts sont autorisés . La commande 

ulimit -a

n'a montré que 1024 fichiers ouverts autorisés.

L'astuce consistait à vous déconnecter du serveur, puis à vous reconnecter. Dans la nouvelle session, les valeurs de la nouvelle configuration de limites ont été appliquées et j'ai pu

service neo4j-server restart

avec 40.000 fichiers ouverts autorisés.

6
Tobias Gassmann

Cela a fonctionné pour moi sur Arch Linux (x86_64), où, avant ces modifications, ulimit -n était 1024):

  1. Éditez /etc/pam.d/su, ajoutez:

    session requise pam_limits.so

  2. Modifier les deux

    /etc/systemd/system.conf

    /etc/systemd/user.conf

    ajoutez à chacun (quelle que soit la valeur désirée: j'ai choisi 100 000):

    DefaultLimitNOFILE=100000

  3. Redémarrez.

    $ ulimit -n 100000

Basé sur

1
Victoria Stuart