微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Neo4j 随机高 CPU

如何解决Neo4j 随机高 CPU

Neo4j 3.5.12 社区版
Ubuntu 服务器 20.04.2
内存:32 Gb
具有 4 个或 8 个 cpu 的 EC2 实例(我对其进行了更改以适应目前的处理)
数据库文件:6.5Gb
Python、Wsgi、烧瓶

dbms.memory.heap.initial_size=17g
dbms.memory.heap.max_size=17g
dbms.memory.pagecache.size=11g

我发现服务器上的 cpu 使用率很高,这似乎是一种随机模式。我已经分析了我知道人们当时正在访问的页面的所有查询,并且它们都在所有情况下都经过优化,执行时间低于 50 毫秒。 cpu 使用似乎与用户数量无关,无论如何,用户数量在大多数情况下都非常低(最多 40 个并发用户)。我也检查了 cron 作业中的所有查询

我显着减少了数据库注释,这对性能没有影响。

我通过使用 MATCH (n) OPTIONAL MATCH (n)-[r]->() RETURN count(n.prop) + count(r.prop); 将所有节点预加载到 ram 来预热数据库

这种模式是,cpu 使用率会非常低(正如我对这些用户数的设置所期望的那样),然后在大多数 cpu 内核上的处理上升到 90% 的高位,机器变成对新请求没有反应。更改为 8cpu 实例会对其进行排序,但对于这种级别的流量,应该不需要。

enter image description here

我想使用查询日志记录查询,但社区版不支持

谢谢。

解决方法

运行 CPU 分析器(例如 perf)来记录 CPU 时间花费在哪里。然后,您可以将其可视化为 FlameGraph,或者,由于您的爆发仅以随机间隔发生,因此可以使用 Netflix 的 FlameScope

随着时间的推移将其可视化

由于 Neo4j 是一个 Java 应用程序,因此可能值得一看 async-profiler,它在分析 Java 应用程序时是无价的(它生成类似的 FlameGraphs 并且可以输出与 FlameScope 或江铃)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。