as

Settings
Sign out
Notifications
Alexa
Amazonアプリストア
Ring
AWS
ドキュメント
Support
Contact Us
My Cases
開発
設計と開発
公開
リファレンス
サポート

JavaScriptメモリの調査

JavaScriptメモリの調査

JavaScriptのメモリ例外は、アプリのクラッシュを引き起こし、ユーザーエクスペリエンスを低下させます。JavaScriptのヒープ制限(TVプロファイルの場合は200MB)を超えると、Hermesガベージコレクター(HermesGC)のメモリ不足エラーが発生します。一般的な要因として、メモリリーク、大規模なデータ構造、非効率的なリソースクリーンアップなどが挙げられます。

このページでは、メモリの問題を特定、分析、解決する手順について説明します。

手順1: クラッシュの理由を特定する

  1. デバイスから、集約クラッシュレポート(ACR)をダウンロードして開きます。
  2. ACRファイルでCrashReason:SIGSEGVを探します。
  3. アプリログの「HermesGC OOM」をチェックして、JavaScriptヒープメモリオーバーフローが発生していることを確認します。

ACRの例:

CrashDescriptor:1b26a2ab4b104aa474b84218e69d2780
CrashLang:Native
Process:com.org.keplerApp
LibraryName:keplerscript-runtime-loader-2.so
CrashReason:SIGSEGV

ログの例:

Nov 21 20:10:13.389612 firestick-010bc8cead0041f0 local0.info keplerscript-ru[7087]: 27 I KeplerScript:[Logging.cpp:40] HermesGC OOM: [] reason = Max heap size was exceeded (1 from category: vm_allocate_category), numCollections = 177, heapSize = 205520896, allocated = 201732128, va = 205520896, external = 88.

HermesGC OOMログエラーを含むSIGSEGVは、実行時にJavaScriptヒープメモリの問題が発生していることを示しています。

手順2: メモリリークのシナリオを特定する

  1. Visual Studio(VS)Codeを開きます。
  2. Memory Monitorを起動します。
  3. JavaScriptのヒープグラフをトラッキングして、200MBのしきい値に近づいているかどうかを確認します。
JavaScriptヒープメモリが200MBのクリティカルな制限に近づいていることを示すスクリーンショット。
  1. セッションを記録してクラッシュシナリオをキャプチャします。

手順3: JavaScriptヒープスナップショットをキャプチャする

  1. Chrome DevToolsをVega向けReact Nativeアプリにアタッチします。Chrome DevToolsの起動にある手順に従ってください。
メモリ分析のためにChrome DevToolsをVegaアプリに接続する手順を示すスクリーンショット。
  1. [Memory] タブに移動し、[Heap Snapshot] を選択します。
ヒープスナップショットをキャプチャするためのChrome DevToolsの [Memory] タブのスクリーンショット。
  1. [Take snapshot] をクリックします。

以下の画像はヒープスナップショットの例です。

キャプチャされたヒープスナップショットのスクリーンショット。ダウンロードオプションがあります。
  1. 下矢印をクリックして、スナップショットをホストコンピューターにダウンロードします。

手順4: JavaScriptヒープスナップショットを分析する

MemlabまたはChrome DevToolsを使用して、JavaScriptヒープスナップショットを分析します。

Memlabによる分析

  1. Memlabをインストールします。

    クリップボードにコピーしました。

     npm install -g memlab
    
  2. 解析を実行します。

    クリップボードにコピーしました。

    memlab find-leaks --baseline <初期のスナップショット> --target <リーク後のスナップショット> --final <クリア後のスナップショット> --trace-all-objects
    

    Memlabは次の3つのヒープスナップショットを比較します。

    • ベースライン - 初期状態
    • ターゲット - 潜在的なリークが発生した後の状態
    • ファイナル - クリーンアップ後の状態

    --trace-all-objects引数を指定すると、すべてのターゲットページオブジェクトに潜在的なリークのマークが付けられます。

    memlab find-leaksは3つのヒープスナップショットを比較し、要約をテーブル形式で表示します。

ヒープスナップショットを比較したMemlabの分析テーブルのスクリーンショット。メモリリークの調査に使用できます。
  1. クリアされていないオブジェクトをテーブルから検索します。

  2. 永続オブジェクトの割り当てを解除するためのコードを確認します。

  3. 保持トレースを確認します。

    Memlabは、リークがあったオブジェクトを保持サイズでランク付けします。保持トレースを使用して、オブジェクトツリー内のリークのあるオブジェクトを特定します。

メモリリークのオブジェクトパスを明らかにするMemlabの保持トレースのスクリーンショット。

Memblabの詳細については、以下を参照してください。

Chrome DevToolsによる分析

  1. Chrome DevToolsを開き、[Memory] タブに移動します。

  2. JavaScriptヒープスナップショットをアップロードします。

  3. さまざまなビューを使用してJavaScriptヒープスナップショットを分析します。

Chrome DevToolsのヒープスナップショットの分析画面と、複数のビューオプションを示すスクリーンショット。
  • [Shallow Size] で並べ替えて、最も重いオブジェクトを見つけます。
  • [Retained Size] で並べ替えて、最も影響の大きいオブジェクトを特定します。

さまざまな観点から分析するため、複数のビュー([Summary][Comparison][Containment][Statistics])を切り替えます。

スナップショット分析については、以下を参照してください。


Last updated: 2025年9月30日