Neo4j在执行查询时坚持“运行”

时间:2017-02-10 18:00:33

标签: neo4j

我正在尝试让Neo4j数据库服务器处理我的DigitalOcean Droplet。服务器是容器化的(Docker)并且在本地工作正常,但是当推送到服务器时,查询无法执行,我留下了以下内容。

Neo4j stuck on running

容器本身在运行时不显示任何日志,正如您从上面的屏幕截图中看到的那样,远程接口工作正常。它不是基于权限的错误,因为挂载的卷在运行容器时会写入文件夹。

Neo4j.log文件如下:

2017-02-10 17:26:52.753+0000 INFO  No SSL certificate found, generating a self-signed certificate..
2017-02-10 17:26:54.646+0000 INFO  Starting...
2017-02-10 17:26:56.480+0000 INFO  Bolt enabled on 127.0.0.1:7687.
2017-02-10 17:27:04.282+0000 INFO  Started.
2017-02-10 17:27:08.763+0000 INFO  Remote interface available at http://127.0.0.1:7474/
2017-02-10 17:27:09.680+0000 WARN  Failed authentication attempt for 'neo4j' from 127.0.0.1
2017-02-10 17:27:10.503+0000 INFO  Neo4j Server shutdown initiated by request
2017-02-10 17:27:10.585+0000 INFO  Stopping...
2017-02-10 17:27:10.780+0000 INFO  Stopped.

请注意失败的身份验证尝试。有什么想法吗?

更新

我已将服务器升级到1GB RAM并将堆大小降至128mb。我的ram使用率远低于100%并且有足够的交换空间,但问题仍然存在。

enter image description here

2 个答案:

答案 0 :(得分:1)

从Github复制我的答案以增加曝光率。

通过阅读日志,我有一个强烈的猜测,你正在最大化 你的Droplet上的RAM。看起来你的实例必须启动 交换,这将使数据库无法使用:

2017-02-11 15:59:25.918+0000 INFO  [o.n.k.i.DiagnosticsManager] System memory information:
2017-02-11 15:59:25.925+0000 INFO  [o.n.k.i.DiagnosticsManager] Total Physical memory: 992.82 MB
2017-02-11 15:59:25.925+0000 INFO  [o.n.k.i.DiagnosticsManager] Free Physical memory: 186.12 MB
2017-02-11 15:59:25.926+0000 INFO  [o.n.k.i.DiagnosticsManager] Committed virtual memory: 2.04 GB
2017-02-11 15:59:25.926+0000 INFO  [o.n.k.i.DiagnosticsManager] Total swap space: 6.84 GB
2017-02-11 15:59:25.926+0000 INFO  [o.n.k.i.DiagnosticsManager] Free swap space: 6.47 GB
2017-02-11 15:59:25.926+0000 INFO  [o.n.k.i.DiagnosticsManager] JVM memory information:
2017-02-11 15:59:25.926+0000 INFO  [o.n.k.i.DiagnosticsManager] Free  memory: 82.07 MB
2017-02-11 15:59:25.927+0000 INFO  [o.n.k.i.DiagnosticsManager] Total memory: 128.00 MB
2017-02-11 15:59:25.927+0000 INFO  [o.n.k.i.DiagnosticsManager] Max   memory: 128.00 MB

我自己做了一些实验,在低内存VPS上运行Neo4j 实例和我的结论是,运行它是不可行的 机器只有1GB的RAM(我自己的Linode实例有)。假设 你还想在那台机器上运行Neo4j以外的任何东西。

原因是除了Java堆和Neo4j页面缓存之外,你 得到一些其他的内存开销。 Lucence会分配一些 自己的堆外内存(可能至少32MB)。 Java本身似乎 需要更多内存来配置堆大小。

调查所需的最低内存

要查看实际内存使用情况,您可以使用docker stats 命令。例如,考虑以下调用:

docker run --rm --name=neo -e NEO4J_AUTH=none -e NEO4J_dbms_memory_pagecache_size=8M -e NEO4J_dbms_memory_heap_maxSize=100M -p 7474:7474 -p 7687:7687 neo4j:3.1.1-enterprise

最初你怀疑这需要大约110MB的RAM吗?好吧,你错了:

CONTAINER           CPU %               MEM USAGE / LIMIT       MEM %               NET I/O             BLOCK I/O           PIDS
a8a86807064b        0.35%               370.1 MiB / 23.44 GiB   1.54%               2.62 kB / 690 B     119 MB / 3.01 MB    43

实际上它需要的几乎是预期的4倍。现在让我们看看如果我们将堆大小增加100MB会发生什么:

docker run --rm --name=neo -e NEO4J_AUTH=none -e NEO4J_dbms_memory_pagecache_size=8M -e NEO4J_dbms_memory_heap_maxSize=200M -p 7474:7474 -p 7687:7687 neo4j:3.1.1-enterprise

结果:

CONTAINER           CPU %               MEM USAGE / LIMIT       MEM %               NET I/O             BLOCK I/O           PIDS
d92e8ecde4a8        0.43%               497.8 MiB / 23.44 GiB   2.07%               7.12 kB / 59.3 kB   119 MB / 3.01 MB    49

内存使用量几乎增加了100MB。那么现在,如果我们将Neo4j页面缓冲区大小增加到100MB呢?

docker run --rm --name=neo -e NEO4J_AUTH=none -e NEO4J_dbms_memory_pagecache_size=100M -e NEO4J_dbms_memory_heap_maxSize=200M -p 7474:7474 -p 7687:7687 neo4j:3.1.1-enterprise

结果:

CONTAINER           CPU %               MEM USAGE / LIMIT       MEM %               NET I/O             BLOCK I/O           PIDS
2474e209f64e        0.38%               472.3 MiB / 23.44 GiB   1.97%               2.62 kB / 690 B     119 MB / 3.01 MB    43

启动时没有明显的变化,所以我们可以假设这可能 可能会在以后分配100MB。试试这个我 通过重复创建电影图形将一些负载应用于数据库 这导致记忆力略有增加:

CONTAINER           CPU %               MEM USAGE / LIMIT       MEM %               NET I/O             BLOCK I/O           PIDS
77f067c9695c        0.36%               514.2 MiB / 23.44 GiB   2.14%               644 kB / 3.56 MB    120 MB / 4.19 MB    51

判决

查看上面的数字,这是对Neo4j的内存要求的粗略概念(也有一些填充也允许索引内存要求):

Minimum = 300MB + JavaHeapSize + PageCacheSize

答案 1 :(得分:0)

您的数据库中有多少数据?如果您有例如1M用户将返回所有这些,这很可能会冻结您的浏览器。

你想达到什么目的?

确保为docker镜像配置堆+页面缓存,并使用外部卷作为数据目录(不是aufs)。

http://neo4j.com/docs/operations-manual/current/installation/docker/