gpt4 book ai didi

node.js - 用nodejs调试一个栈溢出异常

转载 作者:搜寻专家 更新时间:2023-10-31 23:38:47 26 4
gpt4 key购买 nike

我正在使用 nodejs 解析大量文件。在我的过程中,我正在解析音频文件、视频文件和其他文件。

解析文件的函数如下所示:

/**
* @param arr : array of files objects (path, ext, previous directory)
* @param cb : the callback when every object is parsed,
* objects are then throwed in a database
* @param others : the array beeing populated by matching objects
**/
var parseOthers = function(arr, cb, others) {

others = others === undefined ? [] : others;

if(arr.length == 0)
return cb(others); //should be a nextTick ?

var e = arr.shift();

//do some tests on the element and add it
others.push(e);
//Then call next tested callImediate and nextTick according
//to another stackoverflow questions with no success
return parseOthers(arr, cb, others);
});

Full code here (小心它是一团糟)

现在有大约 3565 个文件(不是那么多),脚本会捕获“RangeError:超出最大调用堆栈大小”异常,但没有任何踪迹。

我尝试了什么:

  • 我已经尝试使用 node-inspectornode debug script 对其进行调试,但它从未挂起,就像它在没有调试的情况下运行一样(调试是否会增加堆栈?)。
  • 我已经尝试使用 process.on('uncaughtException') 来捕获异常,但没有成功。

我没有内存泄漏。

如何找到异常跟踪?

编辑 1

增加 --stack_size 接缝可以很好地工作。 有没有其他方法可以防止这种情况发生?

(那里大约有 1300 个)

编辑2

根据:

$ node --v8-options | grep -B0 -A1 stack_size

默认堆栈大小(以 kBytes 为单位)为 984。

编辑3

更多的解释:

  • 我从不阅读此类文件本身
  • 我在这里处理一组路径,我不递归地解析文件夹
  • 我正在查看路径并检查它是否已存储在数据库中

我的猜测是填充的数组对于 nodejs 来说变得太大了,但内存看起来很好,这很奇怪......

最佳答案

大多数 Stackoverflow 情况都不容易或有时无法调试。即使针对问题进行调试,也可能找不到触发点。

但我可以建议您一种轻松分担任务负载的方法(包括队列管理):

JXcore (Node.JS 上的多线程分支)更适合您的情况。只需创建一个任务池并设置一次处理 1 个文件的任务方法。它将管理您的队列 1 乘 1 多线程。

var myTask = function ( args here )
{
logic here
}

for(var i=0;i<LIST_OF_THE_FILES;i++)
jxcore.tasks.addTask( myTask, paramshere, optional callback ...

或者如果逻辑定义超出了单个方法的范围;

var myTask = function ( args here )
{
require('mytasketc.js').handleTask(args here);
}

for(var i=0;i<LIST_OF_THE_FILES;i++)
jxcore.tasks.addTask( myTask, paramshere, optional callback ...

备注

每个线程都有自己的 V8 内存限制。

线程间的上下文是分开的

确保任务方法最后关闭文件

链接

您可以在 multithreaded Javascript tasks 上找到更多信息

关于node.js - 用nodejs调试一个栈溢出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21752323/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com