Suche senden
Hochladen
Ruby/Rails Benchmarking and Profiling with TDD
•
2 gefällt mir
•
1,191 views
Yasutomo Uemori
Folgen
大阪Ruby会議02での発表資料です https://regional.rubykaigi.org/osaka02/
Weniger lesen
Mehr lesen
Ingenieurwesen
Melden
Teilen
Melden
Teilen
1 von 69
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
そのRails Engine、 本当に必要ですか?
そのRails Engine、 本当に必要ですか?
nixiesan
あなたのところに専用線が届くまで
あなたのところに専用線が届くまで
Tomohiro Sakamoto(Onodera)
脱RESTful API設計の提案
脱RESTful API設計の提案
樽八 仲川
情シス必要論 re:Birth
情シス必要論 re:Birth
Mitsuhiro Yamashita
202205 AWS Black Belt Online Seminar Amazon VPC IP Address Manager (IPAM)
202205 AWS Black Belt Online Seminar Amazon VPC IP Address Manager (IPAM)
Amazon Web Services Japan
自己紹介LT(公開版)
自己紹介LT(公開版)
Ken Muryoi
もしSIerのエンジニアがSRE本を読んだら
もしSIerのエンジニアがSRE本を読んだら
Tomoki Ando
Rdraモデリングをしよう
Rdraモデリングをしよう
Zenji Kanzaki
Empfohlen
そのRails Engine、 本当に必要ですか?
そのRails Engine、 本当に必要ですか?
nixiesan
あなたのところに専用線が届くまで
あなたのところに専用線が届くまで
Tomohiro Sakamoto(Onodera)
脱RESTful API設計の提案
脱RESTful API設計の提案
樽八 仲川
情シス必要論 re:Birth
情シス必要論 re:Birth
Mitsuhiro Yamashita
202205 AWS Black Belt Online Seminar Amazon VPC IP Address Manager (IPAM)
202205 AWS Black Belt Online Seminar Amazon VPC IP Address Manager (IPAM)
Amazon Web Services Japan
自己紹介LT(公開版)
自己紹介LT(公開版)
Ken Muryoi
もしSIerのエンジニアがSRE本を読んだら
もしSIerのエンジニアがSRE本を読んだら
Tomoki Ando
Rdraモデリングをしよう
Rdraモデリングをしよう
Zenji Kanzaki
戦う情シス!全社 API で社内アプリ開発を加速させよう
戦う情シス!全社 API で社内アプリ開発を加速させよう
Yuki Hattori
技術者として抑えておきたい Power BI アーキテクチャ
技術者として抑えておきたい Power BI アーキテクチャ
Yugo Shimizu
Fargate起動歴1日の男が語る運用の勘どころ
Fargate起動歴1日の男が語る運用の勘どころ
Yuto Komai
マイクロサービスにおける 結果整合性との戦い
マイクロサービスにおける 結果整合性との戦い
ota42y
今なら間に合う分散型IDとEntra Verified ID
今なら間に合う分散型IDとEntra Verified ID
Naohiro Fujie
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
Amazon Web Services Japan
Re: ゼロから始める監視設計
Re: ゼロから始める監視設計
Masahito Zembutsu
ビッグデータ処理データベースの全体像と使い分け
ビッグデータ処理データベースの全体像と使い分け
Recruit Technologies
Kinesis Firehoseを使ってみた
Kinesis Firehoseを使ってみた
Masaki Misawa
「自分のとこでは動くけど…」を無くす devcontainer
「自分のとこでは動くけど…」を無くす devcontainer
Yuta Matsumura
ネットワーク構築訓練 入門
ネットワーク構築訓練 入門
株式会社 NTTテクノクロス
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
mosa siru
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
MySQLチューニング
MySQLチューニング
yoku0825
商流物流金流.pdf
商流物流金流.pdf
Zenji Kanzaki
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
Yahoo!デベロッパーネットワーク
リクルートのWebサービスを支える共通インフラ「RAFTEL」
リクルートのWebサービスを支える共通インフラ「RAFTEL」
Recruit Technologies
TCP/IPプロトコルスタック自作入門
TCP/IPプロトコルスタック自作入門
雅也 山本
忙しい人の5分で分かるMesos入門 - Mesos って何だ?
忙しい人の5分で分かるMesos入門 - Mesos って何だ?
Masahito Zembutsu
[AKIBA.AWS] EC2の基礎 - パフォーマンスを100%引き出すオプション設定 -
[AKIBA.AWS] EC2の基礎 - パフォーマンスを100%引き出すオプション設定 -
Shuji Kikuchi
Active job meets kubernetes
Active job meets kubernetes
Yasutomo Uemori
capybara で快適なテスト生活を
capybara で快適なテスト生活を
Ryunosuke SATO
Weitere ähnliche Inhalte
Was ist angesagt?
戦う情シス!全社 API で社内アプリ開発を加速させよう
戦う情シス!全社 API で社内アプリ開発を加速させよう
Yuki Hattori
技術者として抑えておきたい Power BI アーキテクチャ
技術者として抑えておきたい Power BI アーキテクチャ
Yugo Shimizu
Fargate起動歴1日の男が語る運用の勘どころ
Fargate起動歴1日の男が語る運用の勘どころ
Yuto Komai
マイクロサービスにおける 結果整合性との戦い
マイクロサービスにおける 結果整合性との戦い
ota42y
今なら間に合う分散型IDとEntra Verified ID
今なら間に合う分散型IDとEntra Verified ID
Naohiro Fujie
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
Amazon Web Services Japan
Re: ゼロから始める監視設計
Re: ゼロから始める監視設計
Masahito Zembutsu
ビッグデータ処理データベースの全体像と使い分け
ビッグデータ処理データベースの全体像と使い分け
Recruit Technologies
Kinesis Firehoseを使ってみた
Kinesis Firehoseを使ってみた
Masaki Misawa
「自分のとこでは動くけど…」を無くす devcontainer
「自分のとこでは動くけど…」を無くす devcontainer
Yuta Matsumura
ネットワーク構築訓練 入門
ネットワーク構築訓練 入門
株式会社 NTTテクノクロス
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
mosa siru
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
MySQLチューニング
MySQLチューニング
yoku0825
商流物流金流.pdf
商流物流金流.pdf
Zenji Kanzaki
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
Yahoo!デベロッパーネットワーク
リクルートのWebサービスを支える共通インフラ「RAFTEL」
リクルートのWebサービスを支える共通インフラ「RAFTEL」
Recruit Technologies
TCP/IPプロトコルスタック自作入門
TCP/IPプロトコルスタック自作入門
雅也 山本
忙しい人の5分で分かるMesos入門 - Mesos って何だ?
忙しい人の5分で分かるMesos入門 - Mesos って何だ?
Masahito Zembutsu
[AKIBA.AWS] EC2の基礎 - パフォーマンスを100%引き出すオプション設定 -
[AKIBA.AWS] EC2の基礎 - パフォーマンスを100%引き出すオプション設定 -
Shuji Kikuchi
Was ist angesagt?
(20)
戦う情シス!全社 API で社内アプリ開発を加速させよう
戦う情シス!全社 API で社内アプリ開発を加速させよう
技術者として抑えておきたい Power BI アーキテクチャ
技術者として抑えておきたい Power BI アーキテクチャ
Fargate起動歴1日の男が語る運用の勘どころ
Fargate起動歴1日の男が語る運用の勘どころ
マイクロサービスにおける 結果整合性との戦い
マイクロサービスにおける 結果整合性との戦い
今なら間に合う分散型IDとEntra Verified ID
今なら間に合う分散型IDとEntra Verified ID
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
Re: ゼロから始める監視設計
Re: ゼロから始める監視設計
ビッグデータ処理データベースの全体像と使い分け
ビッグデータ処理データベースの全体像と使い分け
Kinesis Firehoseを使ってみた
Kinesis Firehoseを使ってみた
「自分のとこでは動くけど…」を無くす devcontainer
「自分のとこでは動くけど…」を無くす devcontainer
ネットワーク構築訓練 入門
ネットワーク構築訓練 入門
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
MySQLチューニング
MySQLチューニング
商流物流金流.pdf
商流物流金流.pdf
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
リクルートのWebサービスを支える共通インフラ「RAFTEL」
リクルートのWebサービスを支える共通インフラ「RAFTEL」
TCP/IPプロトコルスタック自作入門
TCP/IPプロトコルスタック自作入門
忙しい人の5分で分かるMesos入門 - Mesos って何だ?
忙しい人の5分で分かるMesos入門 - Mesos って何だ?
[AKIBA.AWS] EC2の基礎 - パフォーマンスを100%引き出すオプション設定 -
[AKIBA.AWS] EC2の基礎 - パフォーマンスを100%引き出すオプション設定 -
Ähnlich wie Ruby/Rails Benchmarking and Profiling with TDD
Active job meets kubernetes
Active job meets kubernetes
Yasutomo Uemori
capybara で快適なテスト生活を
capybara で快適なテスト生活を
Ryunosuke SATO
Application Bootstrap
Application Bootstrap
Takafumi ONAKA
PHP Application E2E with Capybara
PHP Application E2E with Capybara
Yoshiaki Yoshida
Ruby on Rails を用いたWEBアプリケーションの開発
Ruby on Rails を用いたWEBアプリケーションの開発
Koichi Shimozono
ScalaでASICやFPGA用の回路を設計するChisel
ScalaでASICやFPGA用の回路を設計するChisel
Kei Nakazawa
Sinatra軽量Web開発 - LOUPE Study #1
Sinatra軽量Web開発 - LOUPE Study #1
Takuya Mukohira
高トラフィックサイトをRailsで構築するためのTips基礎編
高トラフィックサイトをRailsで構築するためのTips基礎編
Kazuya Numata
Railsのフロントエンド開発を考える
Railsのフロントエンド開発を考える
Hirata Tomoko
逆引きクイックセミナー
逆引きクイックセミナー
Koichiro Ohba
20091119_sinatraを使ってみた
20091119_sinatraを使ってみた
ngi group.
RESTとRailsスタイル
RESTとRailsスタイル
Toru Kawamura
Rails templateで開発の初速を上げよう
Rails templateで開発の初速を上げよう
豊明 尾古
Benchmarkspec
Benchmarkspec
RubyCorporation, Inc
Benchmarkspec
Benchmarkspec
Yuichiro Shibata
Skinny Framework で始めた Scala
Skinny Framework で始めた Scala
Ryuji Yamashita
オブラブ冬合宿以降にやったことのふりかえり
オブラブ冬合宿以降にやったことのふりかえり
Yasunobu Kawaguchi
ビッグじゃなくても使えるSpark Streaming
ビッグじゃなくても使えるSpark Streaming
chibochibo
アウトプットはスキルアップもするしトクもする
アウトプットはスキルアップもするしトクもする
Mitsuhiro Yamashita
Next GAE Heroku を使って 3分でRailsアプリをリリース
Next GAE Heroku を使って 3分でRailsアプリをリリース
よしだ あつし
Ähnlich wie Ruby/Rails Benchmarking and Profiling with TDD
(20)
Active job meets kubernetes
Active job meets kubernetes
capybara で快適なテスト生活を
capybara で快適なテスト生活を
Application Bootstrap
Application Bootstrap
PHP Application E2E with Capybara
PHP Application E2E with Capybara
Ruby on Rails を用いたWEBアプリケーションの開発
Ruby on Rails を用いたWEBアプリケーションの開発
ScalaでASICやFPGA用の回路を設計するChisel
ScalaでASICやFPGA用の回路を設計するChisel
Sinatra軽量Web開発 - LOUPE Study #1
Sinatra軽量Web開発 - LOUPE Study #1
高トラフィックサイトをRailsで構築するためのTips基礎編
高トラフィックサイトをRailsで構築するためのTips基礎編
Railsのフロントエンド開発を考える
Railsのフロントエンド開発を考える
逆引きクイックセミナー
逆引きクイックセミナー
20091119_sinatraを使ってみた
20091119_sinatraを使ってみた
RESTとRailsスタイル
RESTとRailsスタイル
Rails templateで開発の初速を上げよう
Rails templateで開発の初速を上げよう
Benchmarkspec
Benchmarkspec
Benchmarkspec
Benchmarkspec
Skinny Framework で始めた Scala
Skinny Framework で始めた Scala
オブラブ冬合宿以降にやったことのふりかえり
オブラブ冬合宿以降にやったことのふりかえり
ビッグじゃなくても使えるSpark Streaming
ビッグじゃなくても使えるSpark Streaming
アウトプットはスキルアップもするしトクもする
アウトプットはスキルアップもするしトクもする
Next GAE Heroku を使って 3分でRailsアプリをリリース
Next GAE Heroku を使って 3分でRailsアプリをリリース
Mehr von Yasutomo Uemori
GCP・GKEで作るスケーラブルなゲーム開発環境
GCP・GKEで作るスケーラブルなゲーム開発環境
Yasutomo Uemori
サービスクラス、その前に
サービスクラス、その前に
Yasutomo Uemori
Rails on Dockerとの戦い
Rails on Dockerとの戦い
Yasutomo Uemori
Rubocopとの付き合い方
Rubocopとの付き合い方
Yasutomo Uemori
オンラインゲームのRails複数db戦略
オンラインゲームのRails複数db戦略
Yasutomo Uemori
Rails api way in aiming
Rails api way in aiming
Yasutomo Uemori
ゲーム会社でのRuby : rails活用事例
ゲーム会社でのRuby : rails活用事例
Yasutomo Uemori
Mehr von Yasutomo Uemori
(7)
GCP・GKEで作るスケーラブルなゲーム開発環境
GCP・GKEで作るスケーラブルなゲーム開発環境
サービスクラス、その前に
サービスクラス、その前に
Rails on Dockerとの戦い
Rails on Dockerとの戦い
Rubocopとの付き合い方
Rubocopとの付き合い方
オンラインゲームのRails複数db戦略
オンラインゲームのRails複数db戦略
Rails api way in aiming
Rails api way in aiming
ゲーム会社でのRuby : rails活用事例
ゲーム会社でのRuby : rails活用事例
Ruby/Rails Benchmarking and Profiling with TDD
1.
Ruby/Rails Benchmarking and Profiling with
TDD 2019/09/14 Osaka Ruby Kaigi02 Yasutomo Uemori (wakaba260)
2.
me.inspect => { “HN”: "wakaba260", “name”:
"Yasutomo Uemori", “company”: "株式会社Aiming", “twitter”: "https://twitter.com/wakaba260yen", “github”: "https://github.com/yuemori", “skills”: ["rails api", "docker", "kubernetes", "GCP"] }
3.
突然ですが
4.
Ruby/Railsの プロファイルや ベンチマーク
5.
とったことある人?
6.
今日の話はこんな人向けの話 - Ruby/Railsのベンチマークやプロファイリングに興味がある - パフォーマンス改善にどう手を付けていいかわからない ⇛ 主に初心者向けの話
7.
Agenda 話すこと - Benchmark and
Performance Testing - チューニングを行ったときの取り組み 話さないこと - Rackサーバのチューニング - 改善をしたときの実装内容
8.
Benchmark and Performance Testing
9.
はじめに大事なこと
10.
推測するな 計測せよ
11.
プログラミングで時間がかかっている場所を 推測してはいけない。
12.
どうやって 計測しよう🤔
13.
Testing そうだ、テストを書こう
14.
なぜTestを書くのか 我々は普段からアプリケーションに対しテストを書いている - エラーがないこと - バグが修正されたこと -
仕様どおりに動くこと こういったことを再現性高く保証するためにテストがある ⇛ パフォーマンスについてもテストを書きたい
15.
Red GreenRefactor Standard TDD
16.
Benchmark ProfileRefactor Performance TDD
17.
Benchmark ProfileRefactor 実行速度を計測
18.
Benchmark ProfileRefactor 原因箇所を特定
19.
Benchmark ProfileRefactor コードを改善
20.
Benchmark ProfileRefactor 改善されたことを確認
21.
Benchmark ProfileRefactor Measure Measure Improve
22.
Benchmark ProfileRefactor Measure Measure Improve 計測、計測、そして改善
23.
💎今回テストを書くのに使ったgemたち ・Testing:RSpec ・Benchmark:module Benchmark ・Profile:https://github.com/tmm1/stackprof
24.
Benchmark プロファイリングとあわせてベンチマークは必ずとっておこう - 実際にどのぐらい時間がかかるか?を把握する - プロファイリングを有効にすると、実行速度自体が下がる -
一回だけの実行ではばらつきが出やすいのでウォームアップや実 行回数もポイント
25.
Benchmark module ・公式のベンチマークライブラリ ・簡単な計測ならこれだけで十分
26.
Profiling 速度計測後はプロファイリングを行い、ボトルネックを特定する - 速度を計測したあと、どこが遅いかを推測で直さない - 利用しているミドルウェアや外部サービスが遅いなどもある程度わ かる
27.
Stackprof a sampling call-stack
profiler for ruby 2.1+ ・mode, interval, outを指定してサンプリング対象のコードを ブロックで呼び出すだけ ・CPU Clock Time: CPUの利用時間。 Wall Clock Time: 開始から終了までの時間。Railsの場合はこれ 参考:https://scoutapm.com/blog/profiling-rails-with-stackprof
28.
Stackprof
29.
Stackprof 総サンプリング回数
30.
Stackprof そのメソッドが呼び出しているメソッドの時間も含めた、 TOTALのサンプリング回数
31.
Stackprof 純粋にそのメソッドの サンプリング回数
32.
Stackprof 処理に時間がかかっている箇所
33.
Stackprof 呼び出している処理のため、 時間がかかっている箇所
34.
Stackprof-webnav
35.
Stackprof-webnav 行単位で時間がかかっている箇所を表示できる
36.
Stackprof-webnav 一番時間がかかっている場所を特定!
37.
Stackprof --flamegraph ・上記のようなflamegraphのhtmlを生成してくれる ・呼び出しのスタックトレースや時間などが可視化されるので便利
38.
実践 https://github.com/yuemori/performance_test_app demo1 demo2
39.
最低限のテストは 出来るようになった
40.
Problem ?
41.
Problem めんどくさい
42.
Problem めんどくさい ・手動実行に頼っている ・目視確認に頼っている ⇛ 一度直った問題が再発してないかを確認しにくい ⇛ もっと複雑なケースだとテストケースの再現性も問題
43.
Performance Spec
44.
Performance Spec
45.
Performance Spec
46.
詳細 https://github.com/yuemori/performance_test_app
47.
余談 既にそういったgemがあることに後から気づいた - https://github.com/piotrmurach/rspec-benchmark - https://github.com/rails/rails-perftest また必要になったときにはこれらを使うかどうかも検討したい
48.
ここまでのまとめ 手早くパフォーマンス改善を行うためにはどうしたらいいか - パフォーマンスチューニングにおいては計測が重要 - いろんなgemを使って計測を楽にする -
計測とチューニングのサイクルを確立する
49.
パフォーマンス 改善時のとりくみ
50.
パフォーマンス改善時の取り組み - 改善箇所の調査 - パフォーマンステスト -
パフォーマンス改善方法論の共有
51.
社内テスト内容から遅いAPIの調査 - 改善箇所を検討するために遅いAPIはどこかを調査 - アクセスログからレポートを作成 -
指標 - 総リクエスト数 - 平均レスポンス速度 - 最大レスポンス速度 - 50%、90%、99%、99%...のレスポンス速度
52.
社内テスト内容から遅いAPIの調査
53.
・・・どこから手を付けていこう?🤔 社内テスト内容から遅いAPIの調査
54.
社内テスト内容から遅いAPIの調査:チューニングの検討 - サービスとして遅い箇所が問題になるもの - 例)毎回ログインに時間がかかる -
共通処理で遅いもの - 例)毎回呼び出される認証が遅い - 遅い原因が他の問題を引き起こすもの - 例)N+1問題が原因なためDBへの負荷が懸念される
55.
呼び出し頻度は少ないが取得系なので、 かなり酷いN+1なことが予想されるので直したい 社内テスト内容から遅いAPIの調査
56.
同じくN+1っぽいが、ほとんど呼ばれないため 優先度を下げる 社内テスト内容から遅いAPIの調査
57.
平均速度は上位に比べると早いが、 速度劣化の仕方が激しいので原因を見ておきたい 社内テスト内容から遅いAPIの調査
58.
気になるほど遅いわけではないが、 呼び出し回数が飛び抜けて高いのでもう少し早くしたい 社内テスト内容から遅いAPIの調査
59.
社内テスト内容から遅いAPIの調査:計測方法 - ログから計測 - 今回はStackdriver
+ BigQuery + DataPortal - 構造化ログを出しておくことで集計が容易になる - サービスの利用 - NewRelicやDatadogなど - productionではおすすめ - CIやローカルで実行するのに難がある
60.
パフォーマンステスト - 紹介した実装をベースにテスト環境を整備 - DBのボトルネック調査にクエリレポートを追加実装 -
ActiveSupport::Notificationsを使ってクエリをトレース
61.
パフォーマンステスト:クエリレポート - railsの提供するイベントから計測、集計 - テスト時に実行されるSQLのレポートを作成して可視化
62.
パフォーマンス改善方法論の共有 チューニングを個人に依存しないようにしたいと考えていた - 実際にチューニングを行ったときのことをチーム内勉強会で共有 - ドキュメントの作成 ⇛ 方法論を共有することでチューニングをチームのものにする
💪
63.
パフォーマンス改善方法論の共有:ドキュメントの作成
64.
パフォーマンス改善方法論の共有:ドキュメントの作成
65.
パフォーマンス改善方法論の共有:レビュー - パフォーマンス改善のPRを出した時はdescriptionに結果を記載 - 改善時にチェックしたポイントをわかりやすくする -
before/afterを掲載して改善されていることを伝える
66.
パフォーマンス改善方法論の共有:レビュー
67.
パフォーマンス改善方法論の共有:レビュー
68.
まとめ - パフォーマンス改善の心得:推測するな、計測せよ - パフォーマンスのテストコードを書いて改善を楽にしよう -
パフォーマンス改善は楽しいので是非Tryしてみてください
69.
ご静聴 ありがとうございました
Jetzt herunterladen