Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Railsアプリのよくある パフォーマンス問題の種
Search
naohiro-t
January 23, 2020
Programming
0
190
Railsアプリのよくある パフォーマンス問題の種
naohiro-t
January 23, 2020
Tweet
Share
More Decks by naohiro-t
See All by naohiro-t
Fast JSON API - How fast is it really?
naohiro_t
1
390
Other Decks in Programming
See All in Programming
Amazon Q CLI開発で学んだAIコーディングツールの使い方
licux
3
130
知って得する@cloudflare_vite-pluginのあれこれ
chimame
1
130
SwiftでMCPサーバーを作ろう!
giginet
PRO
2
210
階層化自動テストで開発に機動力を
ickx
1
450
状態遷移図を書こう / Sequence Chart vs State Diagram
orgachem
PRO
3
310
AI Ramen Fight
yusukebe
0
120
TypeScriptでDXを上げろ! Hono編
yusukebe
3
890
Comparing decimals in Swift Testing
417_72ki
0
140
No Install CMS戦略 〜 5年先を見据えたフロントエンド開発を考える / no_install_cms
rdlabo
0
390
Android 16KBページサイズ対応をはじめからていねいに
mine2424
0
810
PHPカンファレンス関西2025 基調講演
sugimotokei
6
1k
Quality Gates in the Age of Agentic Coding
helmedeiros
PRO
1
110
Featured
See All Featured
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
21
1.4k
We Have a Design System, Now What?
morganepeng
53
7.7k
The Invisible Side of Design
smashingmag
301
51k
How to Ace a Technical Interview
jacobian
278
23k
It's Worth the Effort
3n
185
28k
Designing for Performance
lara
610
69k
Why Our Code Smells
bkeepers
PRO
337
57k
GraphQLとの向き合い方2022年版
quramy
49
14k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.8k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
50
5.5k
Code Review Best Practice
trishagee
69
19k
Transcript
Application Monitoring for Ruby, Elixir, Python, PHP Railsアプリのよくある パフォーマンス問題の種 Naohiro
Takahashi
[email protected]
自己紹介 Naohiro Takahashi
[email protected]
Software Developer/Sales Engineer at Scout @naohiro_tt
• N+1 • count vs size • Memory Bloat 種
N+1の影響力知っていますか? N+1
N+1
joins? includes? preload? eager_load? 1. 絞り込みしたいだけなら、joins 2. 関連テーブルのデータにアクセスするなら includesから始めてみる 3.
SQLが2個発行されている場合には、eager_load とperformanceを比べる
改善してみた
改善してみた
改善してみた
count vs size 1. countは毎回クエリを発行する 2. sizeは一度読み込んでいたものに対しては、 collection のlengthを取得するのみ
count vs size
count vs size
count vs size
count vs size
count vs size
・・・
Memory bloat
Heroku R14
Railsのmemory bloatについて知っておくべきこと • メモリ使用量が自然に減少することはない • ヘビーユーザーが原因になっていることが多い • アロケーションの最大値に注目 • アロケーションとメモリ使用量は、必ずしも相関しない
• アプリスタート直後は、メモリ使用量が増加しやすい
Memory: Memory Bloat Insights
Memory: Memory Bloat Insights
Memory: Memory Bloat Insights
レスポンススピードを改善することにより、 CVR向上、UXの向上が見込めます。 ▪ ユーザーの47%はウェブサイトが2秒以内にロードすることを基 本と考えている ▪ 読み込み時間が3秒以上の場合、40%のユーザーは離脱する ▪ ページ読み込みが1秒遅い場合、7%CVRが減少する ▪
ユーザーの52%はページの読み込みが早いと、よりエンゲージ メントが高まる傾向にある ▪ ユーザーの72%はUXが良くないと感じたECは次回以降積極的 に使わない傾向にある *米国でのレスポンスタイムによるECサイトでの影響の事例 APMの必要性
Doggoに聞く、Scoutの優位性 - その1 UI・UXが、初めてでも直感的に使いやすくなっております
1. レスポンスタイムがすぐに分かる 3. ボトルネックの原因をその場で把握 2. ドラッグドロップで範囲選択 APMは一般的にレスポンスタイムやリクエスト数を表示します。 Scoutのダッシュボードではページを遷移すること なく、任意の期間をソートし特定のレスポンス遅延等を引き起こした原因の大枠を把握することができます。 直感的なUI・UX
Doggoに聞く、Scoutの優位性 - その2 Insightsにより、パフォーマンスボトルネックの明確になっ ております。
N+1 クエリが発生しているリクエストを自動的に検出、表示します。 Insights: N+1
アプリケーションの中で、特に遅い DBクエリを自動検出、表示します。 Insights: Slow Query
メモリーブロート問題を自動検出、表示します。 Insights: Memory Bloat
Doggoに聞く、Scoutの優位性 - その3 AutoInstrumentsによって、Controller一行ごとを自動的 に計測しております(現在、Railsのみ対応)
他社APMでは、モニタリング用のコードを追加しないと計測できない詳細な情報 (現在のところ、 Controller一行ごとの時間)、Scoutが自動的に計測します Auto Instruments 1. Sleep::runが5秒使用
Doggoに聞く、Scoutの優位性 - その4 Github Integrationによりソースコードとの紐付けが可能 となっております
1. ボトルネックの原因のコードを表示 2. コードの作者を表示、対応の依頼が可能 3. チームで共有可能 Scoutは、頻繁に使用されるアクション (DBクエリ、HTTPリクエスト、テンプレートレンダリング等 )を始め、他にも多 くのアクションのトラッキングに長けています。
Scoutのトレースは、ボトルネックとなるソースコードと紐付いている ので、実際の原因特定までの時間を大幅に削減することができます。 ソースコードとの紐付けが可能
Doggoに聞く、Scoutの優位性 - その5 開発環境では、無料でScoutのDevTraceを使用可能に なっております。
開発環境でも、手軽に無料でパフォーマンス改善可能 DevTrace
KeyをScoutから取得し、 環境変数、又は ファイルから設定 言語別のエージェントを インストール gem “scout_apm” アプリを起動! (モニタリング開始) 1
2 3 導入方法
ユーザーの声
Doggoに聞く、Scoutの優位性 - ラスト 柔軟な価格設定になっております
None
14日間無料トライアル実施中! Naohiro Takahashi Developer/Sales Engineer in JP
[email protected]