web-dev-qa-db-ja.com

Neo4j警告:最大1024のオープンファイルが許可され、最小40 000が推奨されます。 Neo4jのマニュアルを参照してください

次の手順を使用して、Ubuntu 12.04にNeo4jをインストールしました。 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

だから、おそらくルートとしてサービスを開始することが問題だと思うので、私はそれをシャットダウンし、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ユーザーとしてサービスを実行すると、エラーなく起動します。

だから、私の質問は次のとおりです。意図された動作は何ですか? neo4jユーザーに正しいulimit権限がある限り、rootとしてサービスを開始する必要がありますか、それともneo4jユーザーがPIDファイルを作成できるように起動スクリプト/許可を変更する必要がありますか?

45
Dave Kerber

/etc/security/limits.confファイルに次のエントリを追加する必要があります

root   soft    nofile  40000
root   hard    nofile  40000

ルートとして、またはSudoを使用してサービスを開始する必要があります

その場合、最終的にサービスを開始するユーザーはrootユーザーです。

ルートユーザーのファイルにエントリがない場合、機能しません。

そのため、これらのエントリをファイルに追加して、サーバーを再起動するだけです。

私は同じ問題を抱えていたので、それを解決できました。

23
Israel

この問題のコメント で述べたように、 this commit で修正されました。

/etc/default/neo4jに行を追加できます:

NEO4J_ULIMIT_NOFILE=60000

サービスのulimit設定(60000オープンファイル)を設定します。

Debianで/etc/security/limits.confを使用して開いているファイルの数を設定する必要はもうありません。

20

@israelと@Tomasz Swiderによって投稿されたソリューションは、私にとってはうまくいきませんでした(Ubuntu 14.04を実行しています)。ただし、質問の下のコメントで@zwolが示唆するように、ファイル_/etc/init.d/neo4j-service_を変更することにより、この警告を取り除くことができます。

このファイルのdo_start()メソッドに_ulimit -n 40000_行を追加しました。私の場合、このメソッドは次のようになります。

_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.
_

それが進むべきかどうかはわかりませんが、上に書いたように、それがこの警告を取り除くために今まで働いてきた唯一の解決策でした。

編集:

テストはしていませんが、より簡単な解決策が利用できるようになりました: @ Schrodinger's'Cat's answerを参照

13
Cleb

/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

そして、bobとしてログインしたneo4jを開始しました。

8
Tomasz Swider

以前の回答で提案された変更を適用しました

root   soft    nofile  40000
root   hard    nofile  40000

neo4j   soft    nofile  40000 
neo4j   hard    nofile  40000

/etc/security/limits.conf

それにもかかわらず、1024個のオープンファイルのみが許可されているという警告が表示されます。コマンド

ulimit -a

許可された1024個のオープンファイルのみが表示されました。

トリックはサーバーからログアウトし、再度ログインすることでした。新しいセッションでは、新しい制限設定の値が適用されました。

service neo4j-server restart

40.000のファイルを開くことができます。

7
Tobias Gassmann

これは、Arch Linux(x86_64)で機能しました。これらの変更の前にulimit -n1024):

  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

に基づく

1
Victoria Stuart