我正在尝试让Neo4j数据库服务器处理我的DigitalOcean Droplet。服务器是容器化的(Docker)并且在本地工作正常,但是当推送到服务器时,查询无法执行,我留下了以下内容。
容器本身在运行时不显示任何日志,正如您从上面的屏幕截图中看到的那样,远程接口工作正常。它不是基于权限的错误,因为挂载的卷在运行容器时会写入文件夹。
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%并且有足够的交换空间,但问题仍然存在。
答案 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/