2

在 AWS EC2 实例上运行 neo4j 2.0.1 社区版本。在一些读取请求后,Neo4J 服务器卡在接近 100% 的 CPU 上。

即使没有读取或写入,CPU 也会继续卡在接近 100% 的速度。

ubuntu 'top' 命令只显示一个消耗 CPU 的 java 进程。我该如何调试?我怎么知道 neo4j 正在做什么以使 CPU 接近 100%

更新:我不断看到下面的 GC 日志:

70356.833: [GC 485305K->421306K(590488K), 0.0023720 secs]
70356.873: [GC 485498K->421273K(590488K), 0.0023950 secs]
70356.917: [GC 485465K->421152K(590488K), 0.0027120 secs]
70356.961: [GC 485344K->421407K(590488K), 0.0023500 secs]
70357.004: [GC 485599K->421205K(590488K), 0.0034150 secs]
70357.049: [GC 485397K->421174K(590488K), 0.0027470 secs]
70357.097: [GC 485366K->421335K(590488K), 0.0022430 secs]
70357.140: [GC 485527K->421615K(590488K), 0.0024140 secs]
70357.189: [GC 485807K->421826K(590488K), 0.0025360 secs]
70357.237: [GC 486018K->422124K(590488K), 0.0031070 secs]
70357.285: [GC 486316K->421844K(590488K), 0.0024500 secs]
70357.325: [GC 486036K->421985K(590488K), 0.0024550 secs]
70357.365: [GC 486177K->422020K(590488K), 0.0028860 secs]
70357.411: [GC 486212K->421787K(590488K), 0.0025340 secs]
70357.457: [GC 485979K->421863K(590488K), 0.0027430 secs]
70357.505: [GC 486055K->422085K(590488K), 0.0023570 secs]
70357.553: [GC 486277K->422297K(590488K), 0.0024670 secs]
70357.601: [GC 486489K->422474K(590488K), 0.0023700 secs]

即使没有查询命中,我也会看到很长时间的 GC 日志。我认为 GC 正在消耗接近 100% 的 CPU(或其他东西?)。

CPU 接近 100% 时的 Java-neo4j 线程转储: https ://onedrive.live.com/redir?resid=49F6403CD7EC37D4!107&authkey=!AM_esZ8nS-iPRCQ&ithint=file%2clog

4

1 回答 1

0

查看您提供的线程转储,我可以看到 6 个打开的查询正在运行通过其余端点进入的请求(或者至少这是我解释这些行的方式 - at org.neo4j.server.rest.repr.CypherResultRepresentation.serialize(CypherResultRepresentation.java:83)所有这些都发生在RUNNABLE状态)。

就像@JimBaird 说的那样,我认为您可能有一些您认为已经运行但实际上在后台徘徊的查询,从而使您的机器崩溃。

不幸的是,我不认为您可以终止慢速查询,因此您可能需要尝试重新启动它。

于 2014-09-10T10:35:37.087 回答