带有高级顶点的JanusGraph OOM异常

时间:2019-02-19 21:30:06

标签: out-of-memory janusgraph

这是一个有关针对JanusGraph执行操作时发现的java.lang.OutOfMemoryError: GC overhead limit exceeded问题的问题。

设置

我正在运行JanusGraph版本0.2.0,并将Cassandra作为基础存储。我正在使用here中所述的默认配置值,但将我的存储后端描述为cql和存储主机的配置除外。

我要在图中插入大量用户-每个人都有(1)电子邮件,(2)用户ID和(3)相关的分组标签。对于这种情况,所有用户都在同一个分组中,我们将其称为groupA。 插入操作是按顺序进行的,每个操作都在上一次完成后立即执行。

在每次插入操作期间,我创建一个代表电子邮件的顶点,一个代表用户ID的顶点,然后创建或更新代表groupA的顶点。我在(1)电子邮件<->用户ID顶点之间创建一条边,并在(2)用户ID <-> groupA顶点之间创建一条边。

观察到的问题

我使用了探查器来观察过程中的堆空间使用情况。插入开始时没有问题,但是随着插入次数的增加,使用的堆空间也增加了。最终,随着使用更多的内存,我运行了几个小时后遇到了内存不足的异常。

-

然后我第二次重复插入,但是这次我没有包含groupA顶点。这次,内存使用随时间显示了标准的锯齿模式,如下所示。

Heap Usage with Group Vertex Removed from Insertions

这使我得出结论,我观察到的内存不足问题是由于涉及此高度groupA顶点的操作引起的。

潜在客户

我目前怀疑JanusGraph上有一些缓存过程,用于存储最近访问的元素。由于高度组顶点的邻接列表很大,因此可能会缓存大量数据,仅当我创建从组顶点到用户ID顶点的边缘越来越多时,数据才会增加。

使用我的探查器,我发现org.janusgraph.graphdb.relations.RelationCache类的内存使用率相对较高,因此这似乎很重要。

我的问题

我的问题是:随着时间的流逝,JanusGraph的内存使用率越来越高是什么原因?

1 个答案:

答案 0 :(得分:0)

考虑频繁提交。当您插入数据时,它们将保留在事务缓存中,直到提交事务为止。另外,请查看数据库缓存的配置。您将找到有关缓存here的更多信息。