【问题标题】:titandb gremlin-server running out of memory how to set #jsr223.groovy.engine.keep.globalstitandb gremlin-server 内存不足如何设置#jsr223.groovy.engine.keep.globals
【发布时间】:2023-08-26 13:48:01
【问题描述】:

我正在运行几个 titandb / gremlin-server.sh 实例,但它在高负载下不断耗尽内存。如何以及在哪里设置文档中提到的属性?

我想将#jsr223.groovy.engine.keep.globals 设置为幻像。

谢谢

缓存管理

如果 Gremlin Server 处理大量独特的脚本,则 缓存将超出 Gremlin 服务器可用的内存,并且 OutOfMemoryError 将出现。脚本参数化有很长的路要走 解决这个问题并且内存不足应该不是问题 对于那些情况。如果有问题或没有脚本 由于给定用例的参数化(可能使用 with use of 会话),可以更好地控制脚本的性质 从客户端缓存,通过发出带有参数的脚本 帮助定义垃圾收集器应该如何处理引用。

该参数名为#jsr223.groovy.engine.keep.globals 并具有 四个选项:

hard - 在 JVM 的生命周期内缓存中可用(默认为 未指定)。

soft - 保留到内存“低”并且应该在之前回收 抛出 OutOfMemoryError。

weak - 即使内存充足也会收集垃圾。

phantom - 在被评估后立即移除 脚本引擎。

通过指定除 hard 以外的选项,OutOfMemoryError 在 应避免使用 Gremlin 服务器。当然,这种方法会来 不利的一面是编译的脚本可能会被垃圾收集,并且 因此从缓存中删除,迫使 Gremlin Server 重新编译 稍后。

【问题讨论】:

  • Titan 调用 ./scripts/empty-sample.groovy 这是我应该设置的地方吗?

标签: titan gremlin tinkerpop3


【解决方案1】:

这是一个按请求的功能:

可以从客户端更好地控制脚本缓存的性质,方法是发出带有参数的脚本以帮助定义垃圾收集器应如何处理引用。

您必须使用名为#jsr223.groovy.engine.keep.globals 的参数构造您的请求,并且在您的情况下它的值应为phantom

对于 REST,我认为你会这样做:

curl -X POST -d "{\"gremlin\":\"100-x\", \"bindings\":{\"x\":1, \"#jsr223.groovy.engine.keep.globals\":\"phantom\"}}" "http://localhost:8182"

【讨论】:

  • 谢谢斯蒂芬。我现在只需要弄清楚如何使用 gremlin-php 和套接字来传递它。