我有一个拥有超过200万节点的neo4j系统(2.0.1版本)。它是一个具有不同类型的实体和节点的社交网络,具有高基数节点(2000个喜欢和500个关注用户的追随者)。neo4j查询的高响应时间
我在Amazon AWS EC2 c3.2xlarge,8核16GB RAM上运行系统。我有一个运行在同一台服务器上的mongodb实例。
但是,一旦在2-3天没有CPU使用率,响应时间任何明显的跳直线上升,简单索引查询,如发现通过指数需要10秒,而不是〜100毫秒。
我无法找到确切的问题。我正在提供Neo4j的messages.log文件,请检查是否存在任何明显的错误。
UPDATE: JVM设置如下:
wrapper.java.additional=-XX:+UseConcMarkSweepGC
wrapper.java.additional=-XX:+CMSClassUnloadingEnabled
wrapper.java.additional=-XX:NewRatio=1
wrapper.java.additional=-XX:SurvivorRatio=32
wrapper.java.additional=-XX:MaxPermSize=100m
wrapper.java.additional=-d64
wrapper.java.additional=-server
wrapper.java.additional=-Xss4096k
wrapper.java.additional=-Xloggc:data/log/neo4j-gc.log
wrapper.java.additional=-XX:+PrintGCDetails
wrapper.java.additional=-XX:+PrintGCDateStamps
wrapper.java.additional=-XX:+PrintGCApplicationStoppedTime
# Initial Java Heap Size (in MB)
wrapper.java.initmemory=10240
# Maximum Java Heap Size (in MB)
wrapper.java.maxmemory=10240
更新2:我Neostore文件:
$ ls -lht *store*
-rw-rw-r-- 1 ubuntu ubuntu 63 Sep 20 11:50 neostore
-rw-rw-r-- 1 ubuntu ubuntu 576M Sep 20 11:50 neostore.propertystore.db
-rw-rw-r-- 1 ubuntu ubuntu 282M Sep 20 11:50 neostore.relationshipstore.db
-rw-rw-r-- 1 ubuntu ubuntu 1.1G Sep 20 11:50 neostore.propertystore.db.strings
-rw-rw-r-- 1 ubuntu ubuntu 32M Sep 20 11:50 neostore.nodestore.db
-rw-rw-r-- 1 ubuntu ubuntu 549K Sep 20 11:11 neostore.relationshipstore.db.id
-rw-rw-r-- 1 ubuntu ubuntu 3.9K Sep 18 16:35 neostore.propertystore.db.index.keys
-rw-rw-r-- 1 ubuntu ubuntu 927 Sep 18 16:35 neostore.propertystore.db.index
-rw-rw-r-- 1 ubuntu ubuntu 9 Sep 18 11:21 neostore.id
存储器映射设置如下:
neostore.nodestore.db.mapped_memory=100M
neostore.relationshipstore.db.mapped_memory=400M
neostore.propertystore.db.mapped_memory=800M
neostore.propertystore.db.strings.mapped_memory=1536M
Mongo将使用机器上所有可用的内存(如果需要),因此推测可能是服务器运行时内存使用率较高。但是,你可以分享Neo4j配置/ java配置吗?在你的messages.log中,你可以看到许多应用程序阻塞了很多秒的例子。 – JohnMark13 2014-09-19 10:41:37
您可以在日志文件中看到GC停止的持续时间。您经常需要短暂停止GC(100-200ms),但每隔一段时间(5-10秒)停止一次,这会阻止您的实例并缩短您的响应时间,因为它必须等待GC停止完成。您应该尝试调整您的堆/caché配置以找到您的用例的最佳位置。 – albertoperdomo 2014-09-19 10:43:49
我也害怕它可能与垃圾收集器一起,试着把一些监视器,看看是否会出现问题。 – ulkas 2014-09-19 12:11:59