Pgx 内存不足错误:最大堆外大小配置为不超过 8,192 MB



我在使用 Oracle 的 PGX API 时遇到了问题。

我加载了一个大图并应用了连续的过滤器,但在计算了一些计算后,我销毁了临时图。

GraphChangeSet<Integer> subGraphChangeSet = 
currentSubGraph.createChangeSet();
list.forEach(v -> subGraphChangeSet.updateVertex((Integer) v.getId())
.setProperty("BLOCKED", true));
PgxGraph subGraphForRequest = subGraphChangeSet.build();
// ...
PgxGraph subGraphFiltered = subGraphForRequest
.filter(new VertexFilter("vertex.BLOCKED == true"));
float edges = (float) subGraphFiltered.getNumEdges();
PgqlResultSet results = subGraphFiltered.queryPgql("SELECT label(e), COUNT(*) " +
"MATCH () -[e]-> () GROUP BY label(e) ");
for (PgxResult result: results)
map.put(property, (float) result.getLong(2) / edges);
subGraphFiltered.destroy();
subGraphForRequest.destroy();

但是当我尝试执行查询时,我遇到了[ERROR] OutOfMemoryError: QUERY_PGQL failed maximum off-heap size is configured to not exceed 8,192 MBs.异常。

所以我尝试使用VM OPTS -Xms512m -Xmx4g,但PGX仍然忽略了这些参数。我什至尝试-XX:-UseGCOverheadLimit,但什么也没发生。我尝试修改pgx.conf文件以更改max_off_heap_size参数的值,但也没有发生任何反应。

经过更多的研究,我在文档中发现我们能够使用系统属性

系统属性

此外,任何PGX引擎或运行时字段都可以通过Java系统属性进行设置,方法是将-Dpgx.=参数写入正在运行的JVM。注意:设置系统属性将覆盖任何其他配置。例如,要将最大堆外大小设置为 256GB,而不考虑其他配置的说法,请使用

java -Dpgx.max_off_heap_size=256000 ...

PGX 文档

这对我来说是有用的。

相关内容

最新更新