it-swarm.com.de

ACHTUNG: Maximal 1024 geöffnete Dateien sind zulässig, mindestens 40 000 werden empfohlen. Siehe das Neo4j-Handbuch

Ich habe Neo4j auf Ubuntu 12.04 mit den folgenden Anweisungen installiert: 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

Ich habe dafür gesorgt, das richtige Jdk zu haben:

[email protected]:~# 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)

Und wenn ich neo4j starte, erhalte ich diesen Fehler:

WARNUNG: Max. 1024 geöffnete Dateien sind zulässig, mindestens 40 000 werden empfohlen. Siehe das Neo4j-Handbuch.

Also folge ich den Anweisungen hier: http://docs.neo4j.org/chunked/1.6.2/configuration-linux-notes.html

Und diese Inhalte zu /etc/security/limits.conf hinzufügen

neo4j   soft    nofile  40000
neo4j   hard    nofile  40000

Und kommentieren Sie diese Zeile in /etc/pam.d/su

session    required   pam_limits.so

Nachdem ich den Server neu gestartet habe, bestätige ich das neue Limit

[email protected]:~$ ulimit -n
40000

Dann starte ich meinen Server neu. Ich bekomme immer noch den gleichen Fehler beim Starten. 

[email protected]:~# 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.

Obwohl der Dienst als neo4j-Benutzer ausgeführt wird:

[email protected]:~# 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

Ich denke also, dass es vielleicht ein Problem ist, den Dienst als root zu starten, also fahre ich ihn herunter und starte ihn als neo4j-Benutzer.

[email protected]:~# service neo4j-service stop
[email protected]:~# su - neo4j 
[email protected]:~$ 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

Und es schlägt fehl, weil die PID-Datei nicht erstellt werden kann. Was ich vermute, bedeutet, dass dies nicht der richtige Ansatz ist. Ich ändere jedoch /etc/init.d/neo4j-service, um den Speicherort der pid-Datei in den Home-Ordner des neo4j-Benutzers zu ändern:

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

Und dann starten die Dinge ohne Fehler, wenn ich den Dienst als Neo4j-Benutzer ausführen. 

Meine Frage ist also: Was ist das beabsichtigte Verhalten? Soll der Dienst als root gestartet werden, solange der neo4j-Benutzer die richtigen ulimit-Berechtigungen hat, oder muss ich das Startskript/die Berechtigungen ändern, damit der neo4j-Benutzer seine PID-Datei erstellen kann?

42
Dave Kerber

Sie müssen die folgenden Einträge in die Datei /etc/security/limits.conf einfügen

root   soft    nofile  40000
root   hard    nofile  40000

Sie müssen den Dienst als root oder mit Sudo starten

Wenn Sie dies tun, ist der Benutzer, der den Dienst startet, der Root-Benutzer.

Wenn Sie keinen Eintrag in der Datei für den Root-Benutzer haben, funktioniert er nicht.

Sie müssen also nur diese Einträge zur Datei hinzufügen und anschließend den Server neu starten.

Ich hatte das gleiche Problem und konnte es so lösen.

22
Israel

Wie in dieser Ausgabe-Kommentar erwähnt und durch dieses Commit festgelegt , seit Neo4J 3.1, 

sie können eine Zeile in /etc/default/neo4j hinzufügen:

NEO4J_ULIMIT_NOFILE=60000

um die Einstellung ulimit (60000 geöffnete Dateien) für den Dienst festzulegen.

Es ist nicht mehr nötig, /etc/security/limits.conf unter debian zu verwenden, um die Anzahl der geöffneten Dateien festzulegen.

18

Die von @israel und @Tomasz Swider geposteten Lösungen funktionierten nicht für mich (Ich verwende Ubuntu 14.04). Ich könnte diese Warnung jedoch entfernen, indem Sie die Datei /etc/init.d/neo4j-service ändern, wie von @zwol in den Kommentaren unter der Frage vorgeschlagen:

Ich habe die Zeile ulimit -n 40000 zur do_start()-Methode in dieser Datei hinzugefügt. In meinem Fall sieht diese Methode dann folgendermaßen aus:

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
}

Wenn ich dann den Dienst mit dem Befehl starte

Sudo service neo4j-service start

es startet ohne Warnung und gibt die folgende Meldung zurück:

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

Ich bin nicht sicher, ob dies der richtige Weg ist, aber wie oben beschrieben, war dies die einzige Lösung, die mir bisher gelingt, diese Warnung zu beseitigen.

EDIT:

Habe es nicht getestet, aber es scheint jetzt eine einfachere Lösung verfügbar zu sein: siehe @ Schrodinger's'Cat's answer .

13
Cleb

In der Datei /etc/security/limits.conf müssen Sie die Grenzwerte für den Benutzer festlegen, von dem aus Sie den neo4j-Server ausführen werden. Wenn der Benutzer, den Sie verwenden möchten, root ist, verwenden Sie root die Einstellungen:

neo4j   soft    nofile  40000 
neo4j   hard    nofile  40000

würde funktionieren, wenn Sie den neo4j-Benutzer hinzufügen, ich hatte einige Probleme damit, also habe ich diese auf meinen Standardbenutzer gesetzt, der 'bob' ist.

bob   soft    nofile  40000 
bob   hard    nofile  40000

und dann habe ich gerade neo4j als bob eingeloggt.

7
Tomasz Swider

Ich habe die Änderungen wie in den vorherigen Antworten vorgeschlagen angewendet 

root   soft    nofile  40000
root   hard    nofile  40000

neo4j   soft    nofile  40000 
neo4j   hard    nofile  40000

zu 

/etc/security/limits.conf

Trotzdem bekam ich immer noch die Warnung, dass nur 1024 geöffnete Dateien erlaubt sind .. Der Befehl 

ulimit -a

zeigte nur 1024 geöffnete Dateien erlaubt.

Der Trick bestand darin, sich vom Server abzumelden und sich dann wieder anzumelden. In der neuen Sitzung wurden die Werte der neuen Grenzwertkonfiguration angewendet und ich konnte

service neo4j-server restart

mit 40.000 geöffneten Dateien erlaubt.

6
Tobias Gassmann

Dies funktionierte für mich unter Arch Linux (x86_64), wobei vor diesen Änderungen ulimit -n1024) war:

  1. /etc/pam.d/su bearbeiten, hinzufügen:

    sitzung erforderlich pam_limits.so

  2. Bearbeiten Sie beide

    /etc/systemd/system.conf

    /etc/systemd/user.conf

    addieren Sie zu jedem (welchen Wert Sie wünschen: Ich habe 100.000 gewählt):

    DefaultLimitNOFILE=100000

  3. Starten Sie neu.

    $ ulimit -n 100000

Beyogen auf

1
Victoria Stuart