btn_arrowcmn-facebookcmn-tiktokcmn-twittercmn-xcmn-youtubecorroborationengineerEngineerhamburgericon-angleicon-arrow-bottom-lineicon-arrow-diagonal-01icon-arrow-diagonal-02icon-arrow-next-01icon-arrow-next-02icon-arrow-strokeicon-arrowicon-close-btnicon-externalicon-facebookicon-fukidashi-01icon-fukidashi-02icon-fukidashi-03icon-fukidashi-04icon-fukidashi-05icon-fukidashi-06icon-fukidashi-07icon-fukidashi-08icon-fukidashi-09icon-fukidashi-10icon-fukidashi-11icon-fukidashi-12icon-fukidashi-13icon-fukidashi-14icon-fukidashi-15icon-fukidashi-16icon-fukidashi-17icon-fukidashi-18icon-fukidashi-19icon-hatebuicon-instagramicon-is-index-illust-01icon-is-index-illust-02icon-is-index-illust-03icon-lineicon-linked_inicon-pinteresticon-rank-dash-offseticon-rank-frameicon-rank-no-frameicon-rank-trophy-item-01icon-rank-trophy-item-02icon-rank-trophy-staricon-triangle-01icon-triangle-02icon-twittericon-xicon-youtubeis-bg-book-01is-bg-book-02is-bg-book-03is-bg-book-04is-bg-book-05is-bg-book-06is-bg-boxis-bg-cupis-bg-desktopis-bg-flagis-bg-glassis-bg-hatenais-bg-human-01is-bg-human-02is-bg-human-03is-bg-human-04is-bg-pcis-bg-plusis-bg-smartphoneis-feature-01-lineis-font-daiis-font-gokuis-font-jiis-font-senis-footer-illust-01is-footer-illust-02is-nav-arrowis-prologue-boxlicense-foreignlicenselogo-gree

【TECH BLOG #53】NewRelicを活用したパフォーマンスチューニング

グリーエンターテインメント株式会社のエンジニア、RKです。

ITの世界は流れが早く、アプリ運営やコーディングの世界もより良い方法を模索する日々かと思います。自分が所属するゲームアプリの運営タイトルでも長期の運営により「正常に動いているが、改善できたらもっと効率化できるのに」という課題が時折でてきます。そんな時に行うのが今回のテーマである「パフォーマンスチューニング」です。

今回はゲームアプリの運営中に実施したパフォーマンスチューニングとして、NewRelicでの改善点の絞り込みと処理速度やインフラ負荷の改善方法についてご紹介いたします。

NewRelic

最初にNewRelicというサービスについてご説明したいと思います。
NewRelicはアプリケーションに関連するパフォーマンスを確認できるプラットフォームで、モニタリングやデバッグなど多くの要素を兼ね備えています。所属するタイトルではアプリでアクセスされるwebサーバー内にエージェントを配置し、主に以下の要素を収集し確認しています。

Transactions(アクセスページ毎のモニタリング)
・Response time → セグメント毎の処理時間
・Throughput → 1分間のリクエスト数
・Breakdown table → アクセス内での各処理時間や比率
・Transaction traces → 返答までの時間が大きい処理の解析
・Most time consuming → 処理時間比率
Databases
・RedisやMemcached → キャッシュサービスの処理時間や呼び出し元
・Query time → クエリの処理時間
・Throughput → 1分間のリクエスト数
・Time consumption by caller → 呼び出し側の所要時間と比率
・Most time consuming → databaseでの処理時間比率

※その他多くのモニタリングがありますが、パフォーマンスチューニングのテーマに沿ったものを抜粋

NewRelicを使用した改善箇所の絞り込み

お客さまからの声やタイトルの課題として大きかったレスポンス時間(お客さまがアプリケーションの応答を待つ時間)の改善をメインとして改善箇所を選定します。まずはお客さまのストレスになりえるレスポンスまでの時間が長いアクセスを確認しました。メニュー内にある「Transactions」情報でアプリ内のどの処理が一番時間を消費しているか確認をして、処理時間が大きいアクセスの中で改善効果が高い箇所を探します。

改善箇所の選定
・レスポンス時間が長い場合、改善の余地が大きい
・アクセス数が多い場合、改善する事での効果が高い
・処理時間の比率が高いアクセスを改善する事でwebサーバーへの負荷改善も望める

改善するアクセスの目星をつけたら「Breakdown table」「Transaction traces」で内部の処理時間がかかっている部分を確認します。高負荷なポイントを見つけた上で実際のコード調査を行うと、改善点を見つけるスピードを高めたり、事前に改善効果を見積もる事も可能です。今回は「Breakdown table」内で同じテーブルへの平均問い合わせ件数が高い事が見つかったので、該当のデータ取得処理を見直しました。

改善

NewRelicで見つけた手がかりを元に調査を進め改善点を見つけました。
事前に確認をしていた事で調査も時間がかからず、処理速度の改善も試算できました。

リリース後の確認

改善のリリース後に、再度NewRelicで効果測定を行いました。

(以前の対応時に取得した画像のためUIや年月日が古いものとなります)

リリースタイミング前後のデータを比較し、レスポンス時間やDatabaseへのアクセス頻度などが想定通りの数値となっているか確認します。モニタリングを使用する事で効果測定のデータ分析も行えるところはNewRelicの利点です。

まとめ

アプリ開発や運営を支援するツールは世の中に多くあり、グリーエンターテインメントでは積極的にツールの検討・導入・活用を進めております。新規機能の開発や仕様追加など多くの仕事を抱えていると、どうしても正常な機能のパフォーマンスチューニングは後回しになりがちですが、ツールを活用する事で多くの道が開けます。

・ツールを使用する事で変化に気づきやすく確認の工数を削減
・数値やグラフなど直感的にわかりやすい指標を元に改善提案が可能
・原因や改善箇所の絞り込みを行える事で作業工数を削減
・リリース後の確認がわかりやすい

今後も上手くツールを活用して、遊んでくださるお客さまに満足していただけるアプリを開発・運営していきたいと思います。最後まで読んでくださり、ありがとうございました。

グリーエンターテインメント株式会社 広報担当

東京都港区六本木6-11-1 六本木ヒルズゲートタワー

E-mail:info-ent@ml.gree.net