Neo4j警告:允许最多1024个打开文件,建议最少40 000个。请参阅Neo4j手册

时间:2014-01-04 17:59:56

标签: linux ubuntu 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

所以我认为以root身份启动服务是个问题所以我将其关闭并以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文件?

9 个答案:

答案 0 :(得分:22)

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

root   soft    nofile  40000
root   hard    nofile  40000

您需要以root身份或使用sudo

启动服务

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

如果您没有root用户的文件中的条目,那么它将无效。

因此,您只需在文件中添加这些条目,然后重新启动服务器。

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

答案 1 :(得分:19)

正如this issue comment中提到并由this commit修正,因为Neo4J 3.1,

  

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

NEO4J_ULIMIT_NOFILE=60000
     

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

不再需要在debian上使用/etc/security/limits.conf来设置打开文件的数量。

答案 2 :(得分:13)

@israel和@Tomasz Swider发布的解决方案对我不起作用(我正在运行Ubuntu 14.04)。但是,我可以通过@zwol在问题下面的评论中修改文件/etc/init.d/neo4j-service来摆脱这个警告:

我在此文件中的ulimit -n 40000方法中添加了行do_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.

我不确定这是否可行,但如上所述,这是迄今为止唯一能解决此问题的解决方案。

修改

尚未测试过,但似乎现在有一个更简单的解决方案:see @Schrodinger's'Cat's answer

答案 3 :(得分:8)

在/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。

答案 4 :(得分:7)

I applied the changes as suggested in previous answers

root   soft    nofile  40000
root   hard    nofile  40000

neo4j   soft    nofile  40000 
neo4j   hard    nofile  40000

to

/etc/security/limits.conf

Nevertheless I still got the warning about only 1024 open files being allowed. The command

ulimit -a

did show only 1024 open files allowed.

The trick was to log out of the server, then log back in. In the new session the values of the new limits-configuration were applied and I could

service neo4j-server restart

with 40.000 open files allowed.

答案 5 :(得分:1)

这适用于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

  4. 基于

答案 6 :(得分:0)

您可以在/etc/security/limits.conf中设置硬限制,然后重新启动服务器以使其生效。

但是在当前会话中,您可以运行

  

ulimit -n 40000

答案 7 :(得分:0)

只需从以下命令中检查一次当前值 ulimit -n和ulimit -a

您可以在下面的路径上编辑值 /etc/security/limit.conf

答案 8 :(得分:0)

Neo4j 社区中的

The answer 是正确的,但是我所缺少的是要使其正常工作,您还应该将 neo4j 作为 debian 上的服务,而不仅仅是一个简单的过程。这在官方docs中也得到了证实。就我而言,neo4j start 总是抛出错误。

我当前正在运行的设置:

  1. systemctl edit neo4j.service
  2. 插入:LimitNOFILE=40000
  3. 将 neo4j 作为服务启动:systemctl start neo4j.service

然后我可以按如下方式检查编号:cat /proc/[processId]/limits