以编程方式获取 Chrome 中的内存使用情况
Posted
技术标签:
【中文标题】以编程方式获取 Chrome 中的内存使用情况【英文标题】:Programmatically get memory usage in Chrome 【发布时间】:2013-08-29 14:56:32 【问题描述】:如何以编程方式在 Google Chrome 中获取我的网站的内存使用情况(JS 和总计)?
我曾考虑使用未记录的 HeapProfiler(参见 here)从 Chrome 扩展程序中执行此操作,但我找不到从中获取数据的方法。
我想在每次发布时测量它的内存消耗,所以这需要编程。
编辑:我想出了如何让 HeapProfiler 方法工作。每个addHeapSnapshotChunk
事件都有一个 JSON 对象块。
chrome.browserAction.onClicked.addListener(function(tab)
var heapData,
debugId = tabId:tab.id;
chrome.debugger.attach(debugId, '1.0', function()
chrome.debugger.sendCommand(debugId, 'Debugger.enable', , function()
function headerListener(source, name, data)
if(source.tabId == tab.id && name == 'HeapProfiler.addProfileHeader')
function chunkListener(source, name, data)
if(name == 'HeapProfiler.addHeapSnapshotChunk')
heapData += data.chunk;
else if(name == 'HeapProfiler.finishHeapSnapshot')
chrome.debugger.onEvent.removeListener(chunkListener);
chrome.debugger.detach(debugId);
//do something with data
console.log('Collected ' + heapData.length + ' bytes of JSON data');
chrome.debugger.onEvent.addListener(chunkListener);
chrome.debugger.sendCommand(debugId, 'HeapProfiler.getHeapSnapshot', uid:data.header.uid, type:data.header.typeId);
chrome.debugger.onEvent.removeListener(headerListener);
chrome.debugger.onEvent.addListener(headerListener);
chrome.debugger.sendCommand(debugId, 'HeapProfiler.takeHeapSnapshot');
);
);
);
解析后,JSON 包含节点、边以及关于节点和边类型和字段的描述性元数据。
或者,如果我只想要总数,我可以使用 Timeline 事件。
也就是说,有没有比我在这里找到的更好的方法?
【问题讨论】:
我不确定您需要多少详细信息,但您检查过window.performance
对象吗?它简要概述了内存使用情况,不需要访问扩展。
我有,特别是window.performance.memory
。不过,它似乎与堆配置文件不匹配。我实际上不需要很多细节;总内存使用量就足够了。
【参考方案1】:
对于将来发现此问题的任何人,因为版本 20 Chrome 支持window.performance.memory
,它会返回如下内容:
totalJSHeapSize: 21700000,
usedJSHeapSize: 13400000,
jsHeapSizeLimit: 1620000000
【讨论】:
我一直在尝试这一点,即使在创建 1,000,000 多个键/值对象之前和之后,值也不会改变... 尝试使用 CLI 标志–-enable-precise-memory-info
启动 Chrome。
@Pavel Vlasov 正确版本:--enable-precise-memory-info
好的,这确实有效,但您必须确保之前没有运行 chrome.exe 进程。【参考方案2】:
另一种方法: 写一个指向这个 URL 的网页爬虫:
chrome://system/
(注意:如果此 URL 再次更改,这是列出所有 chrome 诊断页面的“主”URL:chrome://chrome-urls/
该页面有一个“mem_usage”部分,提供了内存使用的详细信息。
也许有某种方法可以将 Chrome 脚本作为用户(比如在 AutoIT 或 Python 中?)在 Chrome 中加载此 URL,然后按下更新按钮,然后解析 JSON 以获取任何选项卡的内存使用情况有兴趣。
其他方法:
来自 javascript - 使用 window.performance
来自 JavaScript - 使用 browser-report.js -
https://www.npmjs.com/package/browser-report
【讨论】:
【参考方案3】:chrome 开发通道有一个进程 api,chrome.process。可以查询一个tab的进程信息,包括各种内存信息。 http://developer.chrome.com/extensions/processes.html
【讨论】:
有没有办法从浏览器外部调用这个API?【参考方案4】:有一个 js 库:https://github.com/spite/memory-stats.js
【讨论】:
【参考方案5】:只是此线程的更新:从 chrome 83 开始,performance.measureMemory()
似乎是在 chrome 上获取内存信息的最可靠方法。即使同一个堆被多个网页共享,它也为我们提供了准确的内存信息!!。
您可以在以下位置找到更多信息:https://web.dev/monitor-total-page-memory-usage/
【讨论】:
从 Chrome 89 开始重命名为performance.measureUserAgentSpecificMemory
。此功能可能并非始终默认启用,请参阅帖子链接。以上是关于以编程方式获取 Chrome 中的内存使用情况的主要内容,如果未能解决你的问题,请参考以下文章
Python,Chrome 任务管理器 - 以编程方式访问 Chrome 任务管理器的文本而不使用 CHROMIUM
Prometheus 查询以获取 kubernetes pod 中的 CPU 和内存使用情况