Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Programmatically get memory usage in Chrome

How can I programmatically get memory usage (JS and total) of my website in Google Chrome?

I looked at doing it from a Chrome extension using the undocumented HeapProfiler (see here), but I can't find a way to get data from that.

I want to measure the memory consumption it at every release, so this needs to be programmatic.

EDIT: I figured out how to get the HeapProfiler method to work. Each addHeapSnapshotChunk event has a chunk of a JSON object.

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');     });   }); }); 

When parsed, the JSON has nodes, edges, and descriptive metadata about the node and edge types and fields.

Alternatively, I could use Timeline events if I just want totals.

That said, are there any better ways than what I've found out here?

like image 455
Paul Draper Avatar asked Aug 27 '13 01:08

Paul Draper


People also ask

How do I check Chrome memory usage?

Use the Chrome Task Manager as a starting point to your memory issue investigation. The Task Manager is a realtime monitor that tells you how much memory a page is currently using. Press Shift+Esc or go to the Chrome main menu and select More tools > Task manager to open the Task Manager.

How do I check my memory usage code?

If you need to measure a memory consumption programmatically you can use dotMemory Unit Current version can be used with unit tests via ReSharper unit test runner, but soon the next version with standalone runner will be available. var mcp1 = dotMemory. Check(); methodX(); dotMemory.

How do I access my browser memory?

You can use the Browser Task Manager (hit Shift+Esc on Windows or use Window > Task Manager on Mac) to see how much memory your tabs and browser extensions are using: You can also use the Memory tab in the F12 Developer tools to peek at heap memory usage.

What is memory footprint in Chrome?

Memory footprint shows how much RAM each process is taking up. This is a great way to see Chrome's memory usage by tab. If you find your PC struggles to change between programs, check which Chrome tabs are using up memory and close them.


2 Answers

For anyone that finds this in the future, since version 20 Chrome supports window.performance.memory, which returns something like:

{   totalJSHeapSize: 21700000,   usedJSHeapSize: 13400000,   jsHeapSizeLimit: 1620000000 } 
like image 124
bcherny Avatar answered Sep 22 '22 13:09

bcherny


An alternative approach: write a web page scraper pointing to this URL:

chrome://system/

(note: in case this URL changes again, this is the 'master' URL that lists all the chrome diagnostic pages: chrome://chrome-urls/

the page has a section 'mem_usage' that gives details of memory usage.

maybe there is some way to script Chrome as a user (say in AutoIT or Python?) that loads this URL in Chrome, and then presses the Update button, and then parses the JSON to get the memory usage for whatever tabs you are interested in.


OTHER approaches:

  • from JavaScript - use window.performance

  • from JavaScript - use browser-report.js -

https://www.npmjs.com/package/browser-report

like image 25
Sean Avatar answered Sep 21 '22 13:09

Sean