Я запускал приложение Foxx под arangoDB 3.3.11.Стресс-тест был проведен аналогичным образом:
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)
Есть ли какие-либо предостережения при использовании обхода внутрицикл?С маленьким массивом приложение все еще работает, но с сложным и достаточно большим массивом возникает ошибка.Я всегда думал, что каждый обход - это независимая функция, и в каждой итерации сборщик мусора запускает и управляет памятью самостоятельно.