我之前发布过neo4j邮件列表(https://groups.google.com/forum/#!topic/neo4j/zn-7lKHVvNI),但是没有收到社区的任何回复,所以我在这里发帖...
我注意到neo4j社区版的内存泄漏行为似乎是什么。对2.1.2(也针对2.0.3进行测试)和512MB堆运行此测试代码(https://gist.github.com/mlaldrid/85a03fc022170561b807)会在几十万个密码查询后导致GC流失。最终我得到一个OutOfMemory错误或者码头超时。
然而,当我针对neo4j企业版的eval副本运行相同的测试代码时,它继续进行3.5M查询,没有任何与512MB堆限制相冲突的迹象。之后我杀了测试,确信行为与社区版本有很大的不同。
我的问题是:为什么社区和企业版中的内存泄漏行为会有所不同?这是企业版的“高级缓存”功能解决的问题吗?它是社区版的已知但不透明的限制吗?
感谢您对此问题的任何见解。
答案 0 :(得分:3)
这是最近在社区版(弱缓存和软缓存)中可用的4种缓存类型中的2种中发现的内存泄漏。它不会影响企业,因为企业使用' hpc'默认缓存。
它只影响您不太可能从数据库中的现有数据读取的部署,或者系统上大部分负载都是写入的部署。
我们已经解决了这个问题,将在后续版本中发布。目前,如果您的用例不幸导致触发此问题,那么您需要使用强大的'缓存或者没有'在社区中,或者在下一个补丁发布之前切换到企业。
答案 1 :(得分:0)
我发布了jvisualvm的Sampler输出
我想这回答了问题,因为泄漏仍然存在于2.2.0
中编辑:
问题是使用ExecutionEngine。我在GraphDatabaseService上使用了execute方法,它解决了我的问题