Neo4j警告:最多可以打开1024个文件,build议最less使用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个打开文件,build议最less为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 

重新启动服务器后,我validation了新的限制

 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身份启动服务是个问题,所以我把它closures,并以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 

并且因为无法创buildpid文件而失败。 我认为这意味着这不是正确的方法,但是我继续编辑/etc/init.d/neo4j-service以将pid文件的位置更改为neo4j用户的主文件夹:

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

然后,当我作为Neo4j用户运行服务时,启动时没有错误。

所以,我的问题是:预期的行为是什么? 只要neo4j用户具有正确的ulimit权限,或者是否需要修改启动脚本/权限以允许neo4j用户创build它的PID文件,应该以root用户身份启动服务?

您需要将以下条目添加到/etc/security/limits.conf文件中

 root soft nofile 40000 root hard nofile 40000 

您需要以root身份或使用sudo启动该服务

当你这样做时,最终启动服务的用户是root用户。

如果你没有在root用户文件中的条目,那么它将无法工作。

所以,你只需要在文件中添加这些条目,然后重新启动你的服务器。

我遇到了同样的问题,那就是我能够解决这个问题。

正如本期发表的评论中所提到的,并且由于这个提交而被修复,因为Neo4J 3.1,

你可以在/etc/default/neo4j添加一行:

 NEO4J_ULIMIT_NOFILE=60000 

设置服务的ulimit设置(60000打开的文件)。

在debian上使用/etc/security/limits.conf来设置打开文件的数量是没有必要的。

@israel和@Tomasz Swider发布的解决scheme并不适合我(我正在运行Ubuntu 14.04)。 不过,我可以通过在问题下面的注释中修改@zwolbuild议的文件/etc/init.d/neo4j-service来摆脱此警告:

我在这个文件中添加了行ulimit -n 40000do_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. 

我不确定这是否是要走的路,但如上所述,这是迄今为止唯一解决这个问题的解决办法。

编辑:

还没有testing过,但似乎现在有一个更简单的解决scheme可用: 请参阅@薛定谔的猫的答案 。

在/etc/security/limits.conf文件中,您需要为用户设置限制,作为您将运行neo4j服务器的用户,因此如果您要使用的用户是root用户,请使用root用户,但这可能是个坏主意setings:

 neo4j soft nofile 40000 neo4j hard nofile 40000 

将工作,如果你在哪里添加neo4j用户,我有一些问题,所以我只是将这些设置为我的默认用户至极“BOB”。

 bob soft nofile 40000 bob hard nofile 40000 

然后我刚刚启动了neo4j作为鲍勃。

我按照以前的答案build议应用这些更改

 root soft nofile 40000 root hard nofile 40000 neo4j soft nofile 40000 neo4j hard nofile 40000 

在/etc/security/limits.conf

不过,我仍然得到了关于只允许打开1024个文件的警告。 命令

 ulimit -a 

没有显示只允许打开1024个文件。

诀窍是注销服务器,然后重新login。在新的会话中,新的限制configuration的值被应用,我可以

 service neo4j-server restart 

允许打开40,000个文件。