2016-05-10 16 views
24

私はChromeの開発ツールを使用してjavascriptアプリケーションをプロファイリングしています。クロムのjavascriptメモリプロファイラのシステムオブジェクトとは

私は、成長する唯一のメモリ領域がシステムオブジェクトの合計であることが分かります。

どのようなシステムオブジェクトが漏洩したかを示すツールの詳細がないので、どのような動作が起こるのか理解できましたか。

私はタイムライン機能のヒープが

500メガバイトを超える

initial snapshot"

snapshot after multi-hour usage

を成長使用していたとき、私はアプリの割り当てを見て撮影したが、それは時間の経過とともに大きく変化していません... wOxxOmによってコメントで述べたようにクロムに JSHeapSnapshot.js実装によれば

snapshot after usage of timeline tool

+0

ヒープ統計の質問で言及しているパラメータは、 "システムオブジェクト合計"ではありません。 「システムオブジェクト」は異なり、「合計」は異なります。 – Abhijeet

+0

ヒープの増加の原因を見つける最も簡単な方法は、比較ビューで2つのスナップショットを比較することです。 DOMツリーの一部ではありませんが、まだコードによって参照されているDOMノードである可能性があります。 – zeroflagL

+2

以前は「V8ヒープ」(https://crbug.com/346335)、技術的には「距離」= 100000000のオブジェクト(https://cs.chromium.org/chromium/src/third_party/WebKit) /Source/devtools/front_end/heap_snapshot_worker/JSHeapSnapshot.js?q=%22getStatistics%22+-file:test+-file:debug/&sq=package:chromium&dr=C&l=407)。 [用語](https://developers.google.com/web/tools/chrome-devtools/profile/memory-problems/memory-101?hl=ja)を参照してください。私は、システムのヒープは、デバッガ自体のために成長するかもしれないと思う。ChromeのShift-Escタスクマネージャやchrome:// tracing/ – wOxxOm

答えて

5

、所与のための比較ノード距離を100000000に設定し(distances[ordinal] >= WebInspector.HeapSnapshotCommon.baseSystemDistanceWebInspector.HeapSnapshotCommon.baseSystemDistance = 100000000)、通過すると、サイズが円グラフのSystemセグメントに蓄積されます。最後の修正は、この値は言及ユーザーオブジェクトがシステム空間オブジェクト (例えば、デバッガ)と、別のユーザーオブジェクトの両方によって保持されている場合、

は現在、システムオブジェクトが かもしれない

commitリテーナツリーの初期に示されています。これは、距離が で、他のユーザオブジェクトを保持する距離よりも小さい場合に発生します。

パッチは、システム空間オブジェクトからユーザオブジェクトへのリンクを優先度がより低いものとして取り扱います。したがって、これらのリンクは、リテイラー ツリーの下部に表示されます。

これは、JavaScriptヒープ上のシステムスペースオブジェクトが、デバッガや他の内部コンポーネント(V8、WebKitなど)によって利用されていることを示します。それらは、スクリプト割り振りヒープ・オブジェクトの直接制御の外にあります。

wOxxOmもV8ヒープに使用されていたことを言いました。つまり、V8が割り当てたオブジェクトで、実行中のスクリプトの範囲外です。

プロファイリングの実行とスナップショットの取得は、そのカテゴリのヒープオブジェクトでも割り当てを実行する可能性が高いため、時間の経過とともにシステムの割り当てを行うパターンが発生します。

関連する問題