titan hbase solr graph load gremlin server java.lang.outofmemoryerror:超出gc开销限制

2skhul33  于 2021-06-10  发布在  Hbase
关注(0)|答案(1)|浏览(526)

我们正在尝试使用gremlin服务器远程连接在titan中创建一个巨大的图(大约100000个顶点)。我们遵循了https://github.com/pluradj/titan-tp3-driver-example 通过gremlin服务器创建到titan的远程连接。我们能够创建索引,顶点,边查询简单的图形创建没有任何问题;
但是,当我们尝试使用生成器创建一个巨大的图形(它使用建立的远程连接直接在服务器中创建顶点和边)时,会出现以下错误:

  1. 6041316 [gremlin-server-exec-6] WARN org.apache.tinkerpop.gremlin.server.op.AbstractEvalOpProcessor - Exception processing a script on request [RequestMessage{, requestId=81f949ad-0e37-4293-bcaa-0714cb159c3b, op='eval', processor='', args={gremlin=g.V().has('idObj', 'OC97').next().addEdge('OC_LC', g.V().has('idObj', 'LC9643').next()), batchSize=64}}].
  2. java.lang.OutOfMemoryError: GC overhead limit exceeded
  3. at org.codehaus.groovy.reflection.CachedClass$3.initValue(CachedClass.java:106)
  4. at org.codehaus.groovy.reflection.CachedClass$3.initValue(CachedClass.java:84)
  5. at org.codehaus.groovy.util.LazyReference.getLocked(LazyReference.java:49)
  6. at org.codehaus.groovy.util.LazyReference.get(LazyReference.java:36)
  7. at org.codehaus.groovy.reflection.CachedClass.getMethods(CachedClass.java:260)
  8. at groovy.lang.MetaClassImpl.addInterfaceMethods(MetaClassImpl.java:419)
  9. at groovy.lang.MetaClassImpl.fillMethodIndex(MetaClassImpl.java:342)
  10. at groovy.lang.MetaClassImpl.initialize(MetaClassImpl.java:3264)
  11. at org.codehaus.groovy.reflection.ClassInfo.getMetaClassUnderLock(ClassInfo.java:254)
  12. at org.codehaus.groovy.reflection.ClassInfo.getMetaClass(ClassInfo.java:285)
  13. at org.codehaus.groovy.reflection.ClassInfo.getMetaClass(ClassInfo.java:295)
  14. at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.getMetaClass(MetaClassRegistryImpl.java:261)
  15. at org.codehaus.groovy.runtime.InvokerHelper.getMetaClass(InvokerHelper.java:873)
  16. at org.codehaus.groovy.runtime.callsite.CallSiteArray.createPojoSite(CallSiteArray.java:125)
  17. at org.codehaus.groovy.runtime.callsite.CallSiteArray.createCallSite(CallSiteArray.java:166)
  18. at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
  19. at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
  20. at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:133)
  21. at Script72559.run(Script72559.groovy:1)
  22. at org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine.eval(GremlinGroovyScriptEngine.java:534)
  23. at org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine.eval(GremlinGroovyScriptEngine.java:374)
  24. at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:233)
  25. at org.apache.tinkerpop.gremlin.groovy.engine.ScriptEngines.eval(ScriptEngines.java:102)
  26. at org.apache.tinkerpop.gremlin.groovy.engine.GremlinExecutor.lambda$eval$0(GremlinExecutor.java:258)
  27. at org.apache.tinkerpop.gremlin.groovy.engine.GremlinExecutor$$Lambda$137/1500273035.call(Unknown Source)
  28. at java.util.concurrent.FutureTask.run(FutureTask.java:266)
  29. at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
  30. at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
  31. at java.lang.Thread.run(Thread.java:745)

图的生成在开始时很快,然后逐渐变慢,在31000个顶点附近失败,从而抛出上述错误。
我们尝试如下更改默认缓存参数

  1. cache.db-cache=true
  2. cache.db-cache-clean-wait=0
  3. cache.db-cache-time=10000
  4. cache.db-cache-size=0.1

我们还尝试通过设置cache.db cache=false来停用缓存。但是没有一个步骤对我们有用。

  1. # Our environment:
  2. CDH 5.7.1
  3. Titan 1.1.0-SNAPSHOT
  4. Solr 4.10.3
  5. HBase 1.2.0

你能指导我们如何克服这个问题吗?

7uzetpgm

7uzetpgm1#

问题是忘记使用参数化脚本http://tinkerpop.apache.org/docs/current/reference/#parameterized-脚本
gremlin服务器缓存传递给它的所有脚本:使用参数化脚本可以减少缓存,因为只缓存不常见的脚本(g.v(x))
例如,不使用参数化脚本而使用string.format(就像我们所做的那样)意味着单独缓存所有gremlin脚本,这非常昂贵并且会导致outofmemoryerror
我希望这能帮助别人;)

相关问题