You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Chrome标签页的总内存占用(Memory Footprint)

如何获取Chrome标签页的总内存占用(匹配Chrome任务管理器的Memory Footprint)

问题描述

我需要获取Chrome标签页的总内存占用(与Chrome任务管理器中显示的「Memory Footprint」一致),目前仅能通过performance.memory获取JavaScript堆大小,但该指标无法覆盖标签页的全部内存占用。

当前使用的代码仅能获取JS堆相关指标:

(async function getMemoryFootprint() {
    const puppeteer = require("puppeteer");
    const browser = await puppeteer.launch({ headless: false });
    const page = await browser.newPage();
    await page.goto('https://www.youtube.com/');
    
    const client = await page.target().createCDPSession();
    await client.send("HeapProfiler.enable");
    await client.send("HeapProfiler.collectGarbage");
    await client.send("HeapProfiler.collectGarbage");
    await client.send("HeapProfiler.disable");

    const memoryMetrics = await page.metrics();
    await browser.close();

    console.log(`Total JS Heap Size: ${memoryMetrics.JSHeapTotalSize} bytes`);
    console.log(`Used JS Heap Size: ${memoryMetrics.JSHeapUsedSize} bytes`);
})();

解决方案

要获取和Chrome任务管理器一致的「Memory Footprint」,可以通过Chrome DevTools Protocol(CDP)的Memory.getProcessMemoryInfo接口,该接口返回的privateBytes字段对应标签页进程的私有内存占用,包含了JS堆、DOM资源、渲染数据等所有标签页相关的内存开销。

修改后的代码如下:

(async function getMemoryFootprint() {
    const puppeteer = require("puppeteer");
    const browser = await puppeteer.launch({ headless: false });
    const page = await browser.newPage();
    await page.goto('https://www.youtube.com/');
    
    const client = await page.target().createCDPSession();
    // 触发垃圾回收,确保内存数据准确
    await client.send("HeapProfiler.collectGarbage");
    
    // 获取进程内存信息,对应Chrome任务管理器的Memory Footprint
    const processMemory = await client.send("Memory.getProcessMemoryInfo");
    // 获取JS堆指标用于对比
    const memoryMetrics = await page.metrics();
    
    await browser.close();

    console.log(`Memory Footprint (Private Bytes): ${processMemory.privateBytes} bytes`);
    console.log(`Total JS Heap Size: ${memoryMetrics.JSHeapTotalSize} bytes`);
    console.log(`Used JS Heap Size: ${memoryMetrics.JSHeapUsedSize} bytes`);
})();

关键说明

  • Memory.getProcessMemoryInfo返回的privateBytes就是Chrome任务管理器中显示的「Memory Footprint」,代表标签页进程独占的内存大小,覆盖了所有标签页相关的内存占用。
  • 调用HeapProfiler.collectGarbage可以主动触发垃圾回收,避免临时未回收的内存影响数据准确性。

内容的提问来源于stack exchange,提问作者Anton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 10:53:34