シナリオ:SashaがAlwaysOn Profilingを使用してパフォーマンスの問題を検出する 🔗
BirdlympicsはButtercup Gamesが発売したJavaゲームです。各ラウンドの最初に、プレイヤーは3人のレーサーを選びます。各レースの後、Birdlympicsは結果をPostgreSQLデータベースに保存し、それぞれの鳥の統計情報をフィードします。次のアニメーションは、Birdlympicsゲームの動作を示しています:

Buttercup GamesのマーケティングチームがBirdlympicsのプロモーションキャンペーンを開始した日、開発者リーダーのSashaは、ゲームをホストしているマシンのCPU消費量が高いというアラートを受け取りました。SashaはSplunk Infrastructure Monitoringでホストの詳細情報を開き、異常に高いCPU消費量に気づきます:

Sashaは、JVMプロセスがCPU負荷の大部分を占めていることに気づきました。パフォーマンスの問題の原因は、Birdlympicsのコードにあるかもしれません。Splunk APMでBirdlympicsのサービスマップを調査し、どの鳥が最も速いかを計算するコントローラーのレイテンシが高いことに気づきました:

Sashaは、AlwaysOn Profilingを有効にしてSplunk Javaエージェントを使用してゲームをインストルメントしたため、Splunk APMを使用して問題をトラブルシューティングし、ボトルネックを修正します。以下の手順を踏みます:
遅いスパンとそのスタックトレースを調査する 🔗
何が高負荷の原因なのかを理解するために、SashaはSplunk APMを開き、「Birdlympics」環境を選択し、Traces を選択しました。利用可能なトレースをフィルタリングして、最小継続時間が1秒になるようにします。ほぼすべての結果に stats/races/fastest
の操作が含まれています:

Sashaは最も遅いトレースを開いてスパンを調査します。多くのスパンではコールスタックが使用でき、Birdlympicsがその時点でどの関数をどの順序で呼び出したかのを示しています。Sashaはスパンの1つを展開し、スタックトレースをスクロールして、ボトルネックの背後にあるコードを特定します:

Sashaは、データベースに接続するいくつかのクラスを特定します。Span Performance ビューを見ると、StatsController.fastestRace
関数が処理負荷の84%を占めていることが分かります。fastestRace
関数は、レース終了時にどの出場者がより速かったかを計算し、データベース呼び出しを実行します:
![トレースの[スパンパフォーマンス]タブ。総ワークロードに寄与している操作が表示されています。](../../_images/span-performance1.png)
フレームグラフを使用して集計データを参照する 🔗
スタックトレースによってSashaは正しい道をたどっていますが、さらに多くの証拠があれば、最適化すべき点を確認することができます。Sashaは、スパンビューから View in AlwaysOn Profiler を選択します。フレームグラフがアプリケーショ ンコードのみをハイライト表示するようにビューをフィルタリングし、スクロールしてスタックの分析を続けます:

パフォーマンスに影響を与えているアプリケーションコードの大部分は、BirdDao.java
ファイルの69行目から来ています。関数が費やした時間をまとめた、スタックのセルフタイムのフレームは、予想より高くなっています:
![トレースの[スパンパフォーマンス]タブ。総ワークロードに寄与している操作が表示されています。](../../_images/stack-frames1.png)
コードにバグやボトルネックがないかチェックする 🔗
Splunk APMとそのフレームグラフから収集した情報を使って、Sashaはコードエディターを開き、BirdDao.java
をチェックします。問題はかなり些細なものであることが分かりました。69行目の非効率的なループがデータベースクエリの増加を引き起こしており、それが高負荷時のCPU消費を引き起こしているのです:

コードを修正し、再度パフォーマンスを測定する 🔗
コードを改善し、アプリケーションを再起動すると、パフォーマンスへの影響はほとんどなくなり、フレームグラフでは、ボトルネックの原因となっていた関数のスタックフレームがかなり狭くなっていることがわかります。Sashaはこの朗報をマーケティングチームに伝え、マーケティングキャンペーンを実施できると保証しました。
次の画像は、Splunk Infrastructure Monitoringのホストナビゲーターを示すものです。ハイライトされた四角は、このゲームサーバーをホストしている仮想マシンです:

まとめ 🔗
Sashaは、Splunk Infrastructure Monitoring、Splunk APM、AlwaysOn Profiling を組み合わせて使用することで、Birdlympicsのゲームにおける2つの重大なパフォーマンス問題を迅速に特定して修正し、リソースの拡張の必要性を回避しながらマーケティングキャンペーンを継続することができました。
SashaがAlwaysOn Profilingを使ってメモリの問題を特定する方法については、シナリオ:SashaがAlwaysOn Profilingを使用してメモリ使用量を分析する を参照してください。
さらに詳しく 🔗
AlwaysOn Profilingの詳細と使用開始方法は、Splunk APMのAlwaysOn Profilingの概要 を参照してください。
プロファイリングのフレームグラフの詳細は、フレームグラフを理解し、使用する を参照してください。
Splunk APMのその他のシナリオについては、Splunk APMを使用したエラーのトラブルシューティングとアプリケーションパフォーマンスの監視のシナリオ を参照してください。
ホストの監視の詳細については、モニターホスト を参照してください。