问题描述
我使用以下说明在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时,出现此错误:
WARNING: Max 1024 open files allowed, minimum of 40 000 recommended. See the Neo4j manual.
因此,我在这里按照说明进行操作: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文件?
最佳思路
您需要将以下条目添加到/etc/security/limits.conf文件中
root soft nofile 40000
root hard nofile 40000
您需要以root用户或使用sudo启动服务
当您这样做时,最终启动该服务的用户是root用户。
如果您在文件中没有root用户的条目,则它将无法工作。
因此,您只需要在文件中添加这些条目,然后重新启动服务器即可。
我遇到了同样的问题,这就是我能够解决的问题。
次佳思路
如this issue comment中所述,并由this commit修复,自Neo4J 3.1起,
you can add a line in
/etc/default/neo4j
:NEO4J_ULIMIT_NOFILE=60000
to set the ulimit setting (60000 open files) for the service.
不再需要在debian上使用/etc/security/limits.conf
来设置打开文件的数量。
第三种思路
@israel和@Tomasz Swider发布的解决方案对我不起作用(我正在运行Ubuntu 14.04)。但是,我可以通过修改文件/etc/init.d/neo4j-service
来摆脱此警告,如@zwol在问题下方的注释中所建议的:
我在此文件的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.
我不确定这是否可行,但如上所述,这是迄今为止我摆脱该警告的唯一解决方案。
编辑:
尚未测试,但似乎现在有一个更简单的解决方案:see @Schrodinger’s’Cat’s answer。
第四种思路
在/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。
第五种思路
我按照先前答案中的建议应用了更改
root soft nofile 40000
root hard nofile 40000
neo4j soft nofile 40000
neo4j hard nofile 40000
至
/etc/security/limits.conf
但是,我仍然收到关于仅允许打开的1024个文件的警告。命令
ulimit -a
确实只显示了1024个打开的文件。
技巧是注销服务器,然后重新登录。在新会话中,应用了新limits-configuration的值,我可以
service neo4j-server restart
允许打开40.000个文件。