我正在arangoDB 3.3.11下运行Foxx应用程序。用类似的方式进行压力测试;
var traverser=new traversal.Traverser(config);
//Loop through an list of entities and do traversal on each of them
BigArray.forEach(function(e){
var vertex=db._document(e);
traverser.traverse(result,vertex)
})
遍历本身没有什么特别之处,只是它的config.visitor
是在且仅当满足某些条件的情况下才推动顶点的。
config.visitor=function(config,result,vertex,path){
//Write a vertex if conditions are right. Vertex normal size json object
if(hashTable[vertex.id])
result.push(vertex);
}
这样,内存会慢慢建立并崩溃,然后返回canceled request
{"error":true,"errorMessage":"canceled request","code":410,"errorNum":21}
与堆大小警告一起
reached heap-size limit, interrupting V8 execution (heap size limit 3254779904, used 3140128304)
在循环内使用遍历是否有任何警告?如果阵列较小,则该应用程序仍然可以运行,但是如果阵列足够复杂且足够大,则会发生错误。我一直认为每次遍历都是一个独立的函数,并且在每次迭代中,GC都会自行扫描并管理内存。
答案 0 :(得分:1)
请使用AQL traversals以获得更好的性能,并减少V8执行的限制。
V8的字符串限制为256 MB,对于较大的遍历来说,似乎这个限制可能会被旧的遍历实现所触及,可悲的是我们对此无能为力。