我使用以下说明在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文件?
答案 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 -n
是1024
):
修改/etc/pam.d/su
,添加:
会话需要pam_limits.so
编辑
/etc/systemd/system.conf
/etc/systemd/user.conf
添加到每个(您想要的任何值:我选择100,000):
DefaultLimitNOFILE=100000
重新启动。
$ ulimit -n
100000
基于
答案 6 :(得分:0)
您可以在/etc/security/limits.conf中设置硬限制,然后重新启动服务器以使其生效。
但是在当前会话中,您可以运行
ulimit -n 40000
答案 7 :(得分:0)
只需从以下命令中检查一次当前值 ulimit -n和ulimit -a
您可以在下面的路径上编辑值 /etc/security/limit.conf
答案 8 :(得分:0)
The answer 是正确的,但是我所缺少的是要使其正常工作,您还应该将 neo4j 作为 debian 上的服务,而不仅仅是一个简单的过程。这在官方docs中也得到了证实。就我而言,neo4j start
总是抛出错误。
我当前正在运行的设置:
systemctl edit neo4j.service
LimitNOFILE=40000
systemctl start neo4j.service
然后我可以按如下方式检查编号:cat /proc/[processId]/limits