我的库中有一些代码过去曾严重泄漏,我想添加回归测试以避免将来发生这种情况。我了解如何通过查看内存使用配置文件或 Valgrind 手动查找内存泄漏,但我在为它们编写自动测试时遇到了麻烦。
在运行我正在检查泄漏的操作后,我尝试使用 global.gc()
,然后使用 process.memoryUsage()
,然后重复执行此操作以尝试建立操作数和内存使用量之间存在线性关系,但内存使用量中似乎存在噪音,这使得很难准确测量。
所以,我的问题是:是否有一种有效的方法可以在 Node 中编写一个测试,该测试在操作泄漏内存时始终通过,而在操作不泄漏内存时失败?
我应该提到的一个问题是,内存泄漏发生在 C++ 插件中,并且一些泄漏的内存不是由 Node VM 管理的,因此我正在测量 process.memoryUsage().rss
。
最佳答案
自动化并记录信息以测试 Node js 中的内存泄漏。
有一个很棒的模块,名为 memwatch-next。
npm install --save memwatch-next
添加到app.js:
const memwatch = require('memwatch-next');
// ...
memwatch.on('leak', (info) => {
// Some logging code...
console.error('Memory leak detected:\n', info);
});
这将允许您自动测量是否存在内存泄漏。
- 现在进行测试:
Apache jMeter 是一个很好的工具。更多信息here .
如果您使用 http,则可以使用 jMeter 来浸泡测试应用程序的端点。
SOAK测试是为了验证系统在较长时间内的稳定性和性能特征,当您寻找内存泄漏、连接泄漏等时,它很有用。
- 持续集成软件:
在部署到生产之前,如果您使用Jenkins等持续集成软件,您可以创建一个 Jenkins 作业来为您执行此操作,它将使用测试后提供的参数来测试应用程序是否会部署应用程序或报告存在内存泄漏。 (取决于您的 Jenkins 作业配置)
希望它有帮助,请向我通报进展情况;
祝你好运
关于node.js - 如何自动测试 Node 中的内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44293127/