スレッドの状態について
スレッドには、Running、Runnable、Runnable (Preempted)、Sleeping、Uninterruptible Sleep、Stopped、Idle、Exitなど、さまざまな状態があります。各状態の正確な定義は、アプリパフォーマンスのモニタリングと記録の「スレッドの状態」を参照してください。パフォーマンスに関する問題の原因の特定
スレッド状態の視覚化によって、レイテンシの増加、応答不能、クラッシュ、一貫性のない動作など、アプリのパフォーマンスに関する問題を把握できます。パフォーマンスに関する問題で、スレッドの状態情報を使用して特定可能な考えられる原因を次の表に示します。Vega Studio Performance Extensionの使用
Vega Studio Performance Extensionを使用すると、Activity MonitorやMemory MonitorのRecording Viewでスレッド状態を視覚化できます。JSアプリのパフォーマンスの問題をトラブルシューティングするには、次の手順を実行します。- Activity Monitorで記録を開始します。
- 問題のある動作をアプリ内で再現します。
- 記録を停止してRecording Viewを生成します。これには、スレッド状態の情報を含むTracesビューが含まれます。
スレッド状態データの分析
アプリのパフォーマンスの問題を特定するには、次の手順を実行します。- Tracesビューでスレッド状態データを分析します。
- スレッド状態のデータが、スレッドの実行時間が長い、CPU使用率が高い、CPUの競合など、前述の原因のいずれかに対応しているかどうかを調べます。
ユースケース
次の例は、スレッド状態の視覚化がアプリのパフォーマンスのトラブルシューティングと最適化にどのように役立つかを示しています。ユースケース1:非効率的なアルゴリズムが原因で実行時間が長いスレッドのトラブルシューティング
VegaVideoAppのテスト中に、ホーム画面や詳細ページを表示したときに、応答性が低下する問題が発生しました。 問題を特定するために、問題のある動作をアプリで再現しながら、Activity Monitorで記録を開始しました。記録を停止すると、Activity Monitorによって、スレッド状態の情報を示すTracesビューを含むRecording Viewが生成されました。Tracesを調べたところ、JSスレッドが最大5秒間実行されていたことがわかりました。これは、非効率的なアルゴリズムが原因でスレッドの実行時間が長くなっていることを示しています。
CPUプロファイラーのフレームグラフを調べたところ、getClassicsメソッドが原因でDetailsScreenの実行に5秒かかっていました。
アプリのコードを見直してみると、データの並べ替えやフィルタリングを行う際のコードが非効率的であり、パフォーマンス遅延の問題が発生していることがわかりました。
ユースケース2:スクロールアプリのCPU使用率が高い場合のトラブルシューティング
React Native Flatlistコンポーネントを使用して、200行を異なる色で表示するシンプルなスクロールアプリを作成しました。Activity Monitorで確認すると、スクロール中にThread State Viewに「Running」の状態が頻繁に表示され、CPU使用率が高いことが示されました。CPUプロファイラーのフレームグラフでも高いアクティビティが示されました。これは、FlatListコンポーネントが効率的に機能していないことを示唆しています。
次のコード例は、Flatlistコンポーネントをアプリに追加する方法を示しています。
FlashlistがFlatlistより優れている点については、ベストプラクティスを参照してください。

