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?
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.
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.
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 .
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.
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.
Cela a fonctionné pour moi sur Arch Linux (x86_64), où, avant ces modifications, ulimit -n
était 1024
):
Éditez /etc/pam.d/su
, ajoutez:
session requise pam_limits.so
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
Redémarrez.
$ ulimit -n
100000
Basé sur