跳到主要内容

开始使用

在本节中,您将学习如何使用 memlab 检测内存泄漏。 请确保您已在本地机器上完成安装步骤。 我们首先定义场景文件,在其中指定 memlab 应如何与我们的页面交互。

编写测试场景

场景文件是一个 js 文件,它导出函数以提供有关如何导航到页面并与之交互的详细信息。 现在让我们复制以下示例并将其另存为 ~/memlab/scenario.js 文件,以便稍后找到它。

// initial page load's url
function url() {
return "https://www.youtube.com";
}

// action where you suspect the memory leak might be happening
async function action(page) {
await page.click('[id="video-title-link"]');
}

// how to go back to the state before action
async function back(page) {
await page.click('[id="logo-icon"]');
}

module.exports = { action, back, url };

有关更多详细信息,请查看IScenario API 文档

注意

您可以将场景文件保存在任何位置。 我们稍后将使用此文件运行 memlab。

运行 memlab

在控制台中运行 memlab 以确保已安装。 您应该在控制台中看到帮助说明。

现在让我们将我们之前创建的 ~/memlab/scenario.js 文件传递给 memlab,如下所示

$ memlab run --scenario ~/memlab/scenario.js
注意

强烈建议被测 Web 应用程序提供未压缩的代码,这使得泄漏报告中的保留者跟踪和符号更容易理解。

memlab 将实时更新一个面包屑,显示与目标网页交互的进度

page-load(baseline)[s1] > action-on-page(target)[s2] > revert(final)[s3]
Connecting to web server...

memlab 运行完成后,控制台将显示每个导航步骤的 JavaScript 堆大小以及按其潜在根本原因分组的所有泄漏对象。 详细信息可能因您的情况而异,但它会是这样的

page-load[23MB](baseline)[s1] > action-on-page[37.3MB](target)[s2] > revert[35.9MB](final)[s3]

面包屑中每个步骤的细分

  • page-load(基线) - 这是我们的起点,我们看到加载页面时分配了多少内存
  • action-on-page(目标) - 执行操作后 - 在我们的例子中,是点击 id 为 "video-title-link" 的链接 - 我们看到分配了多少内存
  • revert(最终) - 这是我们执行返回/反向操作的时候。 在此示例中,是返回主页。

继续在此处阅读,了解如何调试 memlab 报告的内存泄漏跟踪。

如果您想了解 memlab 如何检测内存泄漏,请单击此处