gpt4 book ai didi

node.js - 如何在 NodeJS 中检测 "file handle leak"?

转载 作者:行者123 更新时间:2023-12-04 17:32:24 26 4
gpt4 key购买 nike

由于以下情况,我刚刚失去了几天:

我正在运行一个 NodeJS 控制台应用程序,主要来自 VS Code。该应用程序从网络上抓取各种数据和文件。自然地,它处理大量的 HTTP 请求和磁盘读写。

在某个时间点,我注意到该应用程序开始在运行过程中退出。 VS Code 中没有说明原因。我排除了常见的原因:

  • 这不是异常或未处理的错误:“在所有异常时中断”没有帮助,并且日志中没有异常消息。 process.on('uncaughtException', ...) 也没有帮助。
  • 都不是被拒绝的 Promise:process.on('unhandledRejection', ...) 没有结果。

这向我表明了更深层次的原因,比如内存泄漏。但是应用程序的内存使用率几乎保持不变,而且不高。

经过更多调试后,我注意到在崩溃前不久,所有 writeFile promise 都挂起。该应用无法再写入文件。

最后,崩溃的原因是文件句柄泄漏,即调用了fs.createReadStream,文件流没有closed .在大约 5,000 个打开的文件句柄处,进程崩溃了,没有任何关于原因的指示。

有没有一种方法可以检测到崩溃的原因,比如我可以启用的一些日志记录可以显示原因?如果是内存泄漏,我会看到一个增加应用程序的内存使用量,可能还有一些“内存压力”警告。但是该进程运行良好(至少如 SysInternals 的 Process Explorer 所示),然后它就崩溃了,没有任何关于原因的提示。

最佳答案

也许这个库可以帮助你。

库调用泄漏句柄 https://www.npmjs.com/package/leaked-handles , ut用于测试

关于node.js - 如何在 NodeJS 中检测 "file handle leak"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58202998/

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