如何获取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
相关产品推荐
相关产品推荐

