web-dev-qa-db-ja.com

プログラムでメモリ使用量をChrome

Google Chromeでウェブサイトのメモリ使用量(JSと合計)をプログラムで取得するにはどうすればよいですか?

ドキュメント化されていないHeapProfilerを使用して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 イベントを使用できます。

とはいえ、私がここで見つけた方法よりも良い方法はありますか?

25
Paul Draper

将来これを見つけた人のために、バージョン20以降Chromeは window.performance.memory をサポートし、次のようなものを返します:

{
  totalJSHeapSize: 21700000,
  usedJSHeapSize: 13400000,
  jsHeapSizeLimit: 1620000000
}
23
bcherny

別のアプローチ:次のURLを指すWebページスクレイパーを記述します。

chrome:// system /

(注:このURLが再度変更された場合、これはすべてのchrome診断ページをリストする「マスター」URL:chrome:// chrome-urls /

ページには、メモリ使用量の詳細を示すセクション「mem_usage」があります。

Chromeをユーザーとして(たとえば、AutoITまたはPythonで?)スクリプト化して、このURLをChromeにロードし、[更新]ボタンを押して、JSONを解析して取得する方法があるかもしれません。興味のあるタブのメモリ使用量。


その他のアプローチ:

  • javaScriptから-window.performanceを使用

  • javaScriptから-browser-report.jsを使用-

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

10
Sean

chrome devチャネルには、プロセスapi、chrome.processがあります。あらゆる種類のメモリ情報を含むタブのプロセス情報をクエリできます。 http:// developer。 chrome.com/extensions/processes.html

3
Brian Schlenker

そのためのjsライブラリがあります: https://github.com/spite/memory-stats.js

2
gaitat