コンテンツへスキップ

メモリリークを検出

画面遷移を繰り返し、開始ページに戻った後も残るオブジェクトを調べます。ブラウザで観測されたメモリの蓄積を確認できます。

レポートフラグメント

どのグループがイテレーション間で増加するかを確認

画面遷移と戻る操作のサンプルです。数値はレポートの説明用であり、サイトの検査結果ではありません。

ルート変更

/catalog → /product → /catalog × 5

移動は終わっても前のページの状態オブジェクトがメモリに残り、繰り返すたびに増えます。どの参照が保持しているか確認してください。

Object型のルートビューモデル
変更前 → 変更後
846 → 1451
差分
+605
差分 / イテレーション
+121
Set<observerTarget>
変更前 → 変更後
34 → 74
差分
+40
差分 / イテレーション
+8
ネイティブメモリ
変更前 → 変更後
41.2 → 54.7 MB
差分
+13.5 MB
差分 / イテレーション
+2.7 MB

レポートを説明するためのサンプルデータです。実際のページの結果は検査後に表示されます。

使い方

シナリオを繰り返し、パス間の差分をカウントします

シナリオ

ページ内のリンクを選択

スキャナーは表示されている内部リンクを最大3つ探します。各リンクへの移動と開始ページへの復帰を5回繰り返します。

差分

メモリ使用量を比較

ウォームアップ後、移動を繰り返しても残るメモリを測定します。初回読み込みでは見えない蓄積を確認できます。

増加グループ

蓄積する対象を表示

レポートには増加するコレクション、イベントリスナー、DOMノード、オブジェクト型が表示されます。コレクションは情報が得られた場合、変更したコードの位置も示します。

分析モジュール

メモリリークレポートに含まれる内容

シナリオ

チェックされたシナリオ

レポートにはURL、チェックされたユーザーパス、イテレーション数、リークフラグが保存されるため、検出結果を再現できます。

リークURL反復回数
差分

総メモリ増加量

同じ画面遷移で、全体の増加量と反復ごとの増加量を比較します。蓄積は保持されたオブジェクトを調べる手掛かりですが、意図したキャッシュやアプリケーションの状態もメモリーを使い続ける場合があります。

合計増減反復ごとメモリ統計
コレクション

Array, Map, Set, Object

増加するコレクションは個別にリストされます:変更前と変更後のサイズ、差分、イテレーションごとの差分、コレクションが変更された場所のスタックトレース。

MapObjectスタックトレース
リスナー

イベントリスナーとノード

レポートにはシナリオ前後のリスナー数、結果の差分、サブスクリプションが増加するリークしているリスナーノードが表示されます。

前 / 後ノード数の増減反復ごと
DOM

DOMノードの増加

レポートにはDOMノードの増加とリークしているノードの説明が表示され、デタッチされたDOMや繰り返されるインターフェース初期化を発見しやすくなります。

ノード数説明切り離し済み
ヒープオブジェクト

ヒープオブジェクト型

増加するオブジェクト型について、レポートにはカウント差分、サイズ差分、保持サイズ差分、イテレーションごとの値が含まれます。環境データが存在する場合、total、native、V8ヒープが個別に表示されます。

件数の増減サイズの増減保持中
FAQ

メモリリークに関するよくある質問

反復ごとの差分、増え続けるコレクション、リスナー、DOMノード、レポート後の対応についての簡潔な回答。

メモリの増加はすべてリークですか?
いいえ。アプリは必要なデータを保持することがあります。スキャナーは移動を繰り返した際の蓄積を探しますが、アプリに必要なデータは判断できません。何がオブジェクトを保持し、復帰後に解放すべきか確認してください。
分離されたDOMノードとは何ですか?
ドキュメントから削除されてもJavaScriptの参照によりメモリに残る要素です。例えば閉じたダイアログの要素への参照が残る場合があります。ノードの説明で調査範囲を絞り、保持する参照はコードで確認してください。
イベントリスナーのリークを検出できますか?
はい。レポートにはリスナー数の前後比較、合計差分、反復ごとの差分、ノード数差分を含むリークしているリスナーノードが表示されます。これにより、一度だけのサブスクリプションと繰り返しごとに追加されるハンドラーを区別しやすくなります。
どのページと操作をチェックしますか?
ページ全体を再読み込みせずに移動するSPAが対象です。表示された内部リンクを最大3つ選び、移動と復帰を繰り返します。フォーム、検索、ダイアログを開く操作は個別にチェックしません。適切なリンクがない場合は失敗となりますが、リークがないという意味ではありません。
リークを発見した後はどうすればよいですか?
レポートの画面遷移を再現してください。戻るたびにリスナー数が増える場合は、コンポーネントが追加する箇所とクリーンアップの実行を確認します。leakの表示だけに頼らず、保持している参照を調べてください。修正後は同じ経路と反復回数で比較します。
Cookie

Cookieを使用しています

当サイトでは、より良い体験を提供するためにCookieを使用しています。Cookieの使用方法の詳細については、以下をご覧ください。 プライバシーポリシー.