【发布时间】:2019-02-05 16:10:22
【问题描述】:
我在 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 会自行扫描并管理内存。
【问题讨论】: