読者です 読者をやめる 読者になる 読者になる

カッパでも分かるiOSアプリゲーム開発

カッパがひたすらゲーム制作に関することを書くブログです。Railsに関するTipsもたまにまとめてます。

herokuが重すぎるので New Relic で原因調査をしてみた

スポンサードリンク

プロフェッショナルのための 実践Heroku入門 プラットフォーム・クラウドを活用したアプリケーション開発と運用 (書籍)
f:id:InvokeTwoA:20151023183618p:plain「herokuが重すぎるー」
f:id:InvokeTwoA:20151215172640p:plain「30秒のタイムアウトはユーザーにとってストレス半端ないですね。治さなくては……」

New Relic とは?

  • パフォーマンス分析サービス
  • だいたい無料で使える
  • Rails なら gem を入れれば、設定ファイルにライセンスキーを設定するだけでパフォーマンス測定できる

newrelic.com

まずは会員登録

  • 英語の質問が多い
  • 特に難しい質問はこれ

Are you a human person?

f:id:InvokeTwoA:20151023183618p:plain「! これは自分たちカッパに対する挑戦か」
f:id:InvokeTwoA:20151215172640p:plain「我々以外にする必要が殆ど無い質問ですな」

あとパスワード入力でvalidateされてしまった。

At least one special character is required.

1文字だけ特別な文字を入れる必要あり

会員登録が終わったら「Get started with New Relic」のページへ

自分の使用しているプログラミング言語を選択。
→今回はRailsなのでRubyを選択

  • gem に追加

gem 'newrelic_rpm'

  • bundle install する

bundle install

続いてスタートページで設定ファイルの yml を取得。config配下に置く

config/newrelic.yml

  • application name などは適切に変える
  • deployする

herokuにも new relic のアドオンを設定する

elements.heroku.com

この画面でインストールをする。Freeプランで充分

new relic の画面で Settings の Availability monitoring に行く

  • pngを送るurlを入力すれば完了

数分待つとパフォーマンス結果が表示される

f:id:InvokeTwoA:20160725235304p:plain

f:id:InvokeTwoA:20151023183618p:plain「こ、これは!」
f:id:InvokeTwoA:20151215172640p:plain「Request Queuingで明らかに時間がかかってるぅ!」

どのcontroller が重いかまで表示してくれる

今回は Redline の更新履歴を表示する ActivitiesController#index が最も表示に時間かかかっていた。
試しにページにアクセスしてみると……

f:id:InvokeTwoA:20151023183618p:plain「重い! なんて重いページなんだ!」
f:id:InvokeTwoA:20151215172640p:plain「デフォルトで30日前までの更新履歴を表示する設定になってるじゃないか……」

config/settings.yml
 activity_days_default:
   format: int
   default: 3
  • 30日を3日に変更

f:id:InvokeTwoA:20151023183618p:plain「これで改善するのかなぁ」
f:id:InvokeTwoA:20151215172640p:plain「redline wiki の activities の取得がちょっと危険な感じがするので設定値を変える以外に根本的なロジック変更をした方が良いかも」
f:id:InvokeTwoA:20151215172640p:plain「特にうちのwikiはいつ誰がどのページを更新したかくらいの情報くらいしか必要としてないもんねぇ」