首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Neo4J "GC监视器:阻塞10000 GC的应用程序线程“

Neo4J "GC监视器:阻塞10000 GC的应用程序线程“
EN

Stack Overflow用户
提问于 2017-05-27 19:07:17
回答 2查看 1.4K关注 0票数 2

Note -在Stackoverflow的其他地方也存在类似的问题,但是它与Spring数据有关,我不使用Spring数据。

我有一个由Twitter数据构建的简单的社交图。到目前为止,大约有12万个节点和200000个关系。

Neo4J的性能似乎有些不尽如人意,像这样的查询有时需要200秒:

代码语言:javascript
复制
MATCH p=(:User {twId: 838853137247141888})-[:FOLLOWS*0..3]->(:User {twId: 40002648}) 
RETURN SUM(REDUCE(s = 1.0, n IN NODES(p)[0..-1] | s / SIZE((n)-->()))) AS connectedness

我查看了logs/debug.log,并注意到下面的规则流,即使在图形上没有查询时也是如此:

代码语言:javascript
复制
2017-05-27 18:50:40.041+0000 WARN  [o.n.k.i.c.MonitorGc] GC Monitor: Application threads blocked for 2436ms.
2017-05-27 18:50:46.831+0000 WARN  [o.n.k.i.c.MonitorGc] GC Monitor: Application threads blocked for 5705ms.
2017-05-27 18:50:55.631+0000 WARN  [o.n.k.i.c.MonitorGc] GC Monitor: Application threads blocked for 8699ms.
2017-05-27 18:50:56.450+0000 WARN  [o.n.k.i.c.MonitorGc] GC Monitor: Application threads blocked for 719ms.

我的.neo4j-community.vmoptions只包含以下内容

代码语言:javascript
复制
-Xmx6G

(我试了一大堆,看看这是否能解决问题-它没有解决)

我正在运行Neo4J CommunityV3.1.3在MacOS塞拉利昂10.12.4上

老实说,当涉及到分析Neo或计算服务器的功能时,我不知道该从哪里开始,而且这些文档对于我的特定问题没有多大帮助。

小贴士很受欢迎。

更新:

我还在启动时的debug.log中看到了以下内容

代码语言:javascript
复制
2017-05-27 19:23:06.439+0000 ERROR [o.n.k.a.i.s.LuceneSchemaIndexProvider] Failed to open index:3, requesting re-population. Lock held by this virtual machine: /Users/chris/social-graph/schema/index/lucene/3/1/write.lock
org.apache.lucene.store.LockObtainFailedException: Lock held by this virtual machine: /Users/chris/social-graph/schema/index/lucene/3/1/write.lock
        at     org.apache.lucene.store.NativeFSLockFactory.obtainFSLock(NativeFSLockFactory.java:127)
        at     org.apache.lucene.store.FSLockFactory.obtainLock(FSLockFactory.java:41)
        at     org.apache.lucene.store.BaseDirectory.obtainLock(BaseDirectory.java:45)

更新:

显示所有JVM args:

奇怪的是,VisualVM输出与debug.log中报告的10秒GC不一致

EN

回答 2

Stack Overflow用户

发布于 2017-05-27 19:36:26

提示: jvisualvm将为您提供大量关于运行中的jvm的信息,比如使用哪个GC (在概述选项卡中,可能有-XX:+UseG1GC)。

票数 1
EN

Stack Overflow用户

发布于 2017-05-27 20:15:41

至于优化查询本身,您可能希望使用索引提示来强制计划在运行展开之前首先在两个节点上匹配,而不是从一个节点展开然后过滤结束节点的默认行为。

看看这是如何为您工作的,无论是在速度和轮廓方面:

代码语言:javascript
复制
MATCH (start:User {twId: 838853137247141888}), (end:User {twId: 40002648}) 
USING INDEX start:User(twId)
USING INDEX end:User(twId)
MATCH p=(start)-[:FOLLOWS*0..3]->(end)
RETURN SUM(REDUCE(s = 1.0, n IN NODES(p)[0..-1] | s / SIZE((n)-->()))) AS connectedness

请注意,这在Neo4j 3.2中可能行不通,我认为他们已经删除了规则规划器,这是利用索引提示所必需的。

编辑

有一种方法可以绕过上述3.2x上的restriction...it将不像上面3.1.x上的查询那样具有更高的性能(根据剖析的db hits),但是它应该比原始查询更具有性能。

代码语言:javascript
复制
MATCH (start:User {twId: 838853137247141888}), (end:User {twId: 40002648}) 
MATCH p=(start)-[:FOLLOWS*0..3]->(x)
WHERE x = end
RETURN SUM(REDUCE(s = 1.0, n IN NODES(p)[0..-1] | s / SIZE((n)-->()))) AS connectedness
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44220666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档