オススメのRailsプロファイリングツール
2008年のFiveruns TuneUpに始まり、いくつものRails Profilerが生まれ、なくなり、またはまだ残ってはいるがゾンビ状態のようなものもある。2017年現在、信頼できるRails プロファイラを見つけることは、想像以上に難しかったです。下記が、私がまとめたRailsプロファイラの2017年番エコシステムのまとめになります。(何ができるか、できないか、そして、特別な機能は何か)
rack-mini-profiler
名前に”mini”を含む一方で、実際はかなり機能豊富なプロファイラがrack-mini-profilerである。rack-mini-proflierは、databaseコールを計測し、flamegraph付きでcallstackをプロファイルし、そしてメモリに関係するメトリックもいくつか提供します。
rack-mini-profilerは、Rails 4とRails 5のアプリに対して、問題なく簡単に利用することができました。
rack-mini-profiler 強み
- 簡単に利用可能
- Partialのrenderingの回数、db queryの回数などをTraceと一緒に提供する
- メモリのプロファイリングやstackprofなどの他のツールと繋がっている
- プロダクション環境下でも使用可能
- 目立ったパフォーマンスオーバーヘッドは無し
rack-mini-profiler 弱み
- 複数タイプのプロファイラ(例: timing, memory, stackprof)を一度に実行することができない
- メモリプロファイリングやstackprofなどは、個別に実行しないといけない
- AJAXリクエストに対して、変な問題を個人的に経験したことがある
DevTrace
DevTrace はScoutの無料で使えるRailsプロファイラで、scout_apm gemに含まれています。DevTraceは、Scoutが提供するものと同レベルのTraceを提供します。View Rendering, DBコール、そしてmemory allocation
Scoutのstack profilerであるScoutProfと一緒に実行すると、カスタムコードもプロファイリングすることができます。
DevTrace もrack-mini-profilerと同様、問題なく簡単に利用することができます
DevTrace 強み
- 簡単に利用可能
- Traceは、簡単に理解することができる
- リクエスト毎に、timing, memory, stackをプロファイリングする
- 目立ったパフォーマンスオーバーヘッドは無し
- チームと簡単に共有できる
DevTrace 弱み
- develop環境のみで、利用可能
- Railsのみで利用可能
Rails Panel
Ruby gemとChromeのextensionを使った、Rails PanelはChromeのdeveloper panelからリクエストの詳細を確認できます。Rails Panelは、ActiveRecordとrenderingを計測します。
Rails Panel 強み
- 目立たない - 必要な時に、Chrome extensionから確認し、必要でない時は隠れている
- 人気のeditorとの連携によって、backtraceからeditorへのリンクを提供する
- Gemとchrome extensionのインストール以外に、設定の必要無し
Rails Panel 弱み
- Chrome extensionを開いてないとリクエストの詳細を取得されない
- Railsでのみ利用可能
- Traceがrack-mini-profilerやDevTraceほど洗練されていない
- TraceがActiceRecordとRenderingに限定されている
使うのに苦労したProfilers
- Rack::Insight - Rails 4を使ったアプリで使用したが、あまりいい結果を得ることができませんでした。最初のリクエストは、Traceパネルに表示されたが、reponse timeは目立つくらい遅く、meticsは、rack-mini-profilerやScoutのDevTraceと比べると、詳細度が低く感じました。
- Peek - Rails 4アプリに対して、一部を利用することができたが、重要であるPerformance Barを含めたいくつかのパネルが機能しませんでした。 また、NewRelicやScoutなどのAPMサービスを利用しながらだと、”stack level too deep errors”を起こして一緒に使うことができませんでした。
どのprofiler使うべき?
rack-mini-profilier、DevTrace、そしてRails Panelがエラーなく実行することができた一方で、それだけでは決められないと思うので、下記がそれぞれのプロファイラの良い点になります。
rack-mini-profiler
多くの計測データに対して、抵抗はありますか?このツールは、とてもたくさんのデータを開発者に提供するので、そういったものに抵抗のないエンジニアには、rack-mini-profilerは、ピッタリのプロファイラだと思います。
また下記2つの条件においては、rack-mini-profilerが唯一の選択肢になります:
- Non-Rails apps (ex: Sinatra)
- production 環境で実行したい場合
DevTrace
Dumpされたdataからパフォーマンスメトリックをフィルタリングすることに価値を見出せますか?DevTraceはデータを抽出するようにできています。rack-mini-profilerのように、timing, memoryを提供しますが、よりコンパクトにまとまった結果を見ることができます。
Rails Panel
粒度は少し荒いかもしれませんが、よりシンプルなTraceを見たい場合は、Rails Panelが適しているかもしれません。
こちらも参考に
- Which Ruby background job framework is right for you?
- State of the 2017 Rails Stack
- Unicorn vs. Puma vs. Passenger: which app server is right for you?
DevTraceを含めたScoutに興味が湧いた方!
こちらからプロダクトデモの予約、またはsupport@scoutapm.comまでご連絡ください。
Railsのパフォーマンス改善に興味がある方、すでに使っているAPMがあるが、使いにくい・コストが高いと感じている方など、お問い合わせお待ちしております。
ここまで、閲読頂きありがとうございます!犬のイラストをクリックしていただきますと、無料でScout関連商品をお届けします!