#はじめに
NECの井元です。
NewRelicさんからAdvent Calendarのお誘いを受けましたので、機能説明や使い方などは本家の方にお任せするとして、こちらではNewRelicを使って性能問題の原因を簡単に切り分けることができた事例を紹介します。
#負荷テストでの利用
とあるプロジェクトのオンプレからAWSへのリフト案件の性能検証でNewRelicを活用しました。
今回、以下の構成でEC2インスタンスにBrowser, APM, Infrastructureエージェントを、ELB、RDSサービスにはAWS連携でINFRASTRUCTUREエージェントを設定しています。
性能評価では、JMeterを使って一定の負荷をかけ、負荷がかかった状態でブラウザからアクセスし、その表示時間、リソース使用量などを測定しました。
#性能問題の検出
性能検証の結果、スマホ経由でのある処理が数回に一度の割合で10秒近くかかっていることが判明しました。
まずは、APMの応答時間を見てみます。平均 0.2秒近くでサーバ側には問題がないように見えます。
つぎに、BROWSERの PageViewで表示時間を見てみます。
あきらかに、Page Renderingがその大部分の時間をしめていることがわかります。
さらに、原因を分析するため Sssion Trace で代表的なトレースを確認してみます。
domContentLoadEventEnd から domComplete まで、つまりファイルのダウンロードなどは完了し、画像、HTMLファイルなどのブラウザでのレンダリング処理が10秒近くかかっています。
サーバ、ネットワークは問題なく、HTML、CSSなどの描写処理が原因であることが数分の解析で判明し、デザイナーに結果と合わせて対策を依頼しました。
このように、NewRelicによる測定を仕込んでおくことで、性能検証で問題があった時の切り分けが数分で簡単にできます。
#良かった点
NewRelicを使ってモニタリングしながら性能テストをすると、テスト実行時のスループットの状況、リソースの使用量、トレースなどをその時間までさかのぼって確認、分析することができます。
特に、今回のように数回に一度のみ発生する問題では、発生条件を確認して再現する必要がなく、その時点の挙動、性能状況から原因を分析することができるため、簡単に性能問題の原因を特定することができます。