Graph titan hbase solr图形加载gremlin服务器java.lang.OutOfMemoryError:超出GC开销限制

Graph titan hbase solr图形加载gremlin服务器java.lang.OutOfMemoryError:超出GC开销限制,graph,hbase,titan,gremlin,gremlin-server,Graph,Hbase,Titan,Gremlin,Gremlin Server,我们正在尝试使用gremlin服务器远程连接在titan中创建一个巨大的图(大约100000个顶点)。我们遵循了上提供的示例代码,通过gremlin服务器创建到titan的远程连接。我们能够创建索引,顶点,边查询简单的图形创建没有任何问题 但是,当我们尝试使用生成器创建一个巨大的图形时(它使用已建立的远程连接直接在服务器中创建顶点和边),我们会得到以下错误: 6041316 [gremlin-server-exec-6] WARN org.apache.tinkerpop.gremlin.s

我们正在尝试使用gremlin服务器远程连接在titan中创建一个巨大的图(大约100000个顶点)。我们遵循了上提供的示例代码,通过gremlin服务器创建到titan的远程连接。我们能够创建索引,顶点,边查询简单的图形创建没有任何问题

但是,当我们尝试使用生成器创建一个巨大的图形时(它使用已建立的远程连接直接在服务器中创建顶点和边),我们会得到以下错误:

 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}}].
java.lang.OutOfMemoryError: GC overhead limit exceeded
    at org.codehaus.groovy.reflection.CachedClass$3.initValue(CachedClass.java:106)
    at org.codehaus.groovy.reflection.CachedClass$3.initValue(CachedClass.java:84)
    at org.codehaus.groovy.util.LazyReference.getLocked(LazyReference.java:49)
    at org.codehaus.groovy.util.LazyReference.get(LazyReference.java:36)
    at org.codehaus.groovy.reflection.CachedClass.getMethods(CachedClass.java:260)
    at groovy.lang.MetaClassImpl.addInterfaceMethods(MetaClassImpl.java:419)
    at groovy.lang.MetaClassImpl.fillMethodIndex(MetaClassImpl.java:342)
    at groovy.lang.MetaClassImpl.initialize(MetaClassImpl.java:3264)
    at org.codehaus.groovy.reflection.ClassInfo.getMetaClassUnderLock(ClassInfo.java:254)
    at org.codehaus.groovy.reflection.ClassInfo.getMetaClass(ClassInfo.java:285)
    at org.codehaus.groovy.reflection.ClassInfo.getMetaClass(ClassInfo.java:295)
    at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.getMetaClass(MetaClassRegistryImpl.java:261)
    at org.codehaus.groovy.runtime.InvokerHelper.getMetaClass(InvokerHelper.java:873)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.createPojoSite(CallSiteArray.java:125)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.createCallSite(CallSiteArray.java:166)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:133)
    at Script72559.run(Script72559.groovy:1)
    at org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine.eval(GremlinGroovyScriptEngine.java:534)
    at org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine.eval(GremlinGroovyScriptEngine.java:374)
    at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:233)
    at org.apache.tinkerpop.gremlin.groovy.engine.ScriptEngines.eval(ScriptEngines.java:102)
    at org.apache.tinkerpop.gremlin.groovy.engine.GremlinExecutor.lambda$eval$0(GremlinExecutor.java:258)
    at org.apache.tinkerpop.gremlin.groovy.engine.GremlinExecutor$$Lambda$137/1500273035.call(Unknown Source)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
图形生成在开始时速度很快,逐渐变慢,大约31000个顶点失败,抛出上述错误

我们已尝试更改默认缓存参数,如下所示

cache.db-cache=true
cache.db-cache-clean-wait=0
cache.db-cache-time=10000
cache.db-cache-size=0.1
我们还尝试通过设置cache.db cache=false来停用缓存。但这些步骤对我们都不起作用

#Our environment:
CDH 5.7.1
Titan 1.1.0-SNAPSHOT
Solr 4.10.3
HBase 1.2.0

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

问题是忘记使用参数化脚本

Gremlin服务器缓存传递给它的所有脚本:使用参数化脚本可以减少缓存,因为只缓存普通脚本(g.V(x))

例如,不使用参数化脚本而使用String.format(就像我们所做的那样)意味着单独缓存所有gremlin脚本,这非常昂贵,并且会导致OutOfMemoryError


我希望这会对某人有所帮助;)

您试图在一次提交中创建多少个元素?尝试一次提交较少数量的顶点/边,而不是一次提交100K。另外,请确保使用参数化脚本。问题几乎肯定与参数化有关。@stephen:更改缓存参数化时,我看不到任何区别,在创建了31000之后总是失败vertices@JasonPlurad:我使用到gremlin服务器的远程连接,所以我认为不需要提交事务。我可以看到执行过程中创建的每个顶点,而无需提交。然而,每当我在10个顶点周围生成一个图遍历提交(g.tx().commit)。用于创建顶点和边的命令已参数化