New Relic(Application Performance Management)を利用して、アプリケーションの性能を改善してみましょう!

こんにちは。GMOアドマーケティングエンジニアのchoiです。

今回ご紹介するのはApplication Performance Management(= APM)です。
そして、APMを利用してアプリケーション(言語: Ruby On Rails)の性能を測定、改善してみます。

■ Application Performance Management (= APM)とは?
文字通りにアプリケーションの性能管理という意味です。
アプリケーションの性能を測定やモニタリングすることで、クライアントにもっと質がいいアプリケーションを提供することが可能となります。
APMといえばJenniferAppDynamicsNew Relicなどがありますが、今回改善してみるアプリケーションの言語(Ruby On Rails)をサポートするのはNew RelicしかいないのでNew Relicを利用して改善してみます。(JavaやPHPなどのサポートをするのは多いですが、Railsをサポートするのはあまりなさそうです。)

■ New Relic インストール
1. アカウント作成
まずは、以下のアドレスでからアカウントを作成します。
New Relic

2. 言語選択
アカウントを作成してログインし、APMをクリックすると以下の画面が表示されます。
Rubyを選択します。
dfdfdfdfdf

3. インストール
以下のイメージの順番の通りにNew Relicをインストールします。
111111111111111111111111111111

ghngjgjfbfbfb

4. アクセス
アプリケーションからNew Relicにデータが送信されることを確認したら、APMをクリックし My Applicationをクリックします。
(アプリケーションの名などはConfig/newrelic.ymlファイルで設定しておいた名となります。)

bbbg6uyu6u76

5. 完了
以下のようにグラフなどが表示されたら完了です。
all-new

■ New Relic 機能
New Relicで、提供する基本的な機能についていくつかを紹介します。

1. web transactions time
transactionsの実行にかかった時間を表示します。
transactions
Middleware: Rails側の処理時間(routingなどの時間)
Ruby: 実際に開発したアプリケーションの処理時間
MySQL: クエリーの要請~レスポンスまでの時間
Web external: 外部APIの処理時間(request、response)

2. transaction trace
トランザクションの処理時間を詳しく見ることができます。どの部分が遅いのかを把握してチューニングすることができます。

trac-new-win2

trac-new-win3
3. Apdex score

サーバーでリクエストの処理時間とブラウザーでリクエストの処理時間が見れます。特定時間の間にリクエストの処理時間が設定しておいた時間を満たさないとalertを発生します。

apdex-new
デフォルトは以下の通りです。
サーバー: 0.5秒
ブラウザー: 7秒

4. Throutghput
1分単位のリクエストを確認できます。どの帯にリクエスト量が多いのかが分かります。

throutghput-new

5. database
クエリーの時間を知ることができます遅いクエリーなどを測定してチューニングができます。
databassss-new

6. error
アプリケーションでエラーが発生した場合、どのエラーだったのかどのURLにアクセスしようとしたかなどのエラーが追跡できます。

error-new-win34 error-new-win35

■ 実戦
実際にNew Relicを利用して、アプリケーションの改善をしてみます。

1. transaction trace
transaction traceを利用して、処理速度が遅い箇所を探します。
平均の処理時間:  810ms
new-trac-win12113

2. 原因分析
transaction traceの画面の右にはクリックしたトランザクションに対しての詳細を確認することができます。
平均の処理時間: 810msで、Net::HTTPの処理が一番遅いのを特定できます。

korekore242-win

3. 改善方法を探す。
私の場合は、
– 既存にHTTP通信で利用していたGEMを利用せずに、以下のようなさまざまなサイトで速度のよいGEMを探して切り替えました。
http://qiita.com/cuzic/items/694646c42162de4da0c8

– HTTP通信関連のコードを読みながら、改善箇所を探して改善しました。
このメッソド内では、同期で2回のリクエストを行う処理があって、それを非同期に変えました。

4. 改善結果
平均の処理時間: 810msから417msに改善されました!

new-kaizen2311

■ まとめ
一言でいうと、便利で使いやすいと思います。
最初はインストールや使い方を覚える必要がありますが、使い方に慣れたら性能がいいアプリケーションをユーザーに提供することがもっとやりやすくなると思いました。