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
ガトリングを撃ちまくりたいお年頃
Search
Tomohiko Himura
December 17, 2016
Programming
1.5k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ガトリングを撃ちまくりたいお年頃
https://gbdaitokai.connpass.com/event/37730/
Tomohiko Himura
December 17, 2016
More Decks by Tomohiko Himura
See All by Tomohiko Himura
Marpでmermaidは簡単だときいたけど
eiel
1
2.5k
バイナリ読むのにElixirしてみた
eiel
0
120
アジャイルはさておきMake People Awesomeしたい
eiel
0
220
レビューは最優先にするようにしている
eiel
0
370
再考 Fourkeys メトリクス
eiel
2
720
Test mockをSnapshot testする
eiel
0
180
devenvに入門した
eiel
1
190
関数プログラミングの考え方
eiel
1
390
逆コンウェイ作戦はフィードバックループを作るために 逆向きの流れをつくること (5分版)
eiel
0
510
Other Decks in Programming
See All in Programming
Laravel Boostに学ぶ、AIにPHPを書かせる技術 〜OSSの実装から蒸留するエージェント制御の王道〜
kentaroutakeda
3
640
そこに3びきプロダクトがいるじゃろう——生成AI時代における“価値が届かない理由”の構造
kosuket
0
390
freee が目指す データ マネジメント戦略 AI-Ready 時代を支える 攻めのガバナンスとは
freee
PRO
0
160
琵琶湖の水は止められてもNet--HTTPのリトライは止められない / You might be able to stop the water flow of Lake Biwa but you can't stop Net::HTTP retries
luccafort
PRO
0
530
複数の Claude Code が"放置"されてしまう問題をCLI ダッシュボードを自作して解決した話
sumihiro3
1
640
GDG Korea Android: 2026 I/O Extended ~ What's new in Android development tools
pluu
0
210
生成AIで帳票OCRが「簡単に」作れる時代になった?
kon_shou
0
340
Japan Community Day at Kubecon + CloudNativeCon Japan 2026: Learning Container Privilege Control by Building My Own Low-Level Container Runtime
ternbusty
1
120
数百円から始めるRuby電子工作
tarosay
0
120
テーブルをDELETEした
yuzneri
0
130
壊れたパーサから始める関数型設計と構成的なパーサ #fp_matsuri
raiga0310
2
440
Go言語とトイモデルで学ぶTransformerの気持ち / fukuokago23-transformer
monochromegane
0
160
Featured
See All Featured
Measuring & Analyzing Core Web Vitals
bluesmoon
9
950
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
3
390
Speed Design
sergeychernyshev
33
2k
Git: the NoSQL Database
bkeepers
PRO
432
67k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Fireside Chat
paigeccino
42
4k
Bash Introduction
62gerente
615
220k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
600
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
2
3.7k
KATA
mclloyd
PRO
35
15k
My Coaching Mixtape
mlcsv
0
190
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
200
Transcript
ΨτϦϯάΛ ܸͪ·͘Γ͍͓ͨࠒ 2016-12-17 ߹ಉษڧձ in େձԬࢁ -2016 Winter-
ͻΉΒ ͱͻ͜ ౡ͔Βདྷͨ ΞϓϦέʔγϣϯνϣοτπΫϨϧ github eiel twitter eielh
近所にある整体
None
ࠓͷ͓
注意事項 あんまり実用的ではない例が ちらほらありますがご了承ください。
最近ガトリングを 撃ち続けています
None
None
None
ガトリングじゃ何もでなかった
というわけで作ってみました
None
アジェンダ • 負荷テストツール Gatling • 「ただ、撃ち貫くのみ」 • いろいろ撃ち貫いてきた • まとめ
ෛՙςετπʔϧ Gatling
None
大人数で同時にブラウザを 操作しているかのようにできるツール
Gatling • Scala, Akka, Nettyで作られた • オープンソースの負荷テストツール • ハイパフォーマンス •
HTMLの静的レポートが生成できる • ブラウザ操作でテストシナリオがつくれる • Scalaのコードが生成される
どんな人におすすめか
ウェブアプリケーションが 作れるようになってきた
お客さんに価値を届けられる
そのアプリケーション アクセスがたくさんきても 本当に大丈夫ですか?
負荷がかかったときの 状態を確認するツール
RubyとかPHPとか書いてるけど
たまには Scala書きたいよね
ScalaTestとも統合されてて 機能テストツール的にも使えそう
͍ํͷࡶͳઆ໌
シナリオを用意する
Scalaで 直接書くこともできますが
レコーダを起動して
プロキシを設定して
ブラウザで操作する
package computerdatabase.advanced import io.gatling.core.Predef._ import io.gatling.http.Predef._ import scala.concurrent.duration._ import java.util.concurrent.ThreadLocalRandom
class AdvancedSimulationStep05 extends Simulation { object Search { val feeder = csv("search.csv").random val search = exec(http("Home") .get("/")) .pause(1) .feed(feeder) .exec(http("Search") .get("/computers?f=${searchCriterion}") .check(css("a:contains('${searchComputerName}')", "href").sav .pause(1) .exec(http("Select") .get("${computerURL}") Scalaのコードが生成される
Scala書けなくても使える
レポートの生成
None
ͨͩɺܸͪ؏͘ͷΈ IUUQEJDOJDPWJEFPKQB&"% &"&"&#&#&## &"&#&
ガトリング…
いっぱい並べて 撃ってみたいじゃないですか
ガトリング並べて リアルタイムモニタリング してみました
<DEMO>
None
ΨτϦϯάɾΫϥελʔ
SERFで がとりんぐ☆くらすたーを構築
ΨτϦϯάɾΫϥελʔͰ OPEFTKTΞϓϦέʔγϣϯΛܸͪൈ͘
࣌ܥྻ%#ʹใΛूΊ ϦΞϧλΠϜʹՄࢹԽ
$ serf event fire
None
正直な話 Gatling 一台で充分な負荷を かけることができます。 撃たれる側を強化すべきでした。
͍Ζ͍Ζܸͪ؏͍͖ͯͨ
たぶん wrk でやるのがいい と思いますが、 いろいろガトってみました。
ガトる内容 • 2分ぐらい • ガト 1台 • ジョジョにユーザが増えて2万まで • 1ユーザ1秒に一度アクセス
• 基本チューニングはしない
nodejs
nodejs
圧倒的安定性 エラー率 0% スループット 2981rps レスンポンスタイム 平均 2.216s nodejs
nodejs
nodejs
Golang
Golang
途中でファイルディスクプタ不足に エラー率 45% スループット 1776rps レスンポンスタイム 平均 0.011s Golang
Golang
Golang
python(wsgi)
python(wsgi)
python(wsgi) 比較的安定した感じ エラー率 45% スループット 650rps レスンポンスタイム 平均 0.8s
python(wsgi)
python(wsgi)
Ruby(puma + rack)
Ruby(puma + rack)
秒間80しか捌けてない エラー率 91% スループット 889rps レスンポンスタイム 平均 0.968s Ruby(puma +
rack)
Ruby(puma + rack)
None
php(apache)
php(apache)
apache壁が効いてる エラー率 53% スループット 1174rps レスンポンスタイム 平均 0.043s php(apache)
php(apache)
php(apache)
Haskell(wai + warp)
Haskell(wai + warp)
Goと同じ傾向 エラー率 45% スループット 1781rps レスンポンスタイム 平均 0.011s Haskell(wai +
warp)
Haskell(wai + warp)
Haskell(wai + warp)
erlang(cowboy)
erlang(cowboy)
erlang(cowboy) Goと似た傾向だけど少し違う エラー率 40% スループット 1752rps レスンポンスタイム 平均 0.114s
erlang(cowboy)
erlang(cowboy)
Scala(akka-http)
Scala(akka-http)
Scala(akka-http) nodejsを超える性能 エラー率 0% スループット 3342rps レスンポンスタイム 平均 1.871s
Scala(akka-http)
Scala(akka-http)
FSS SQT 4DBMB OPEFT IBTLFMM FSMBOH
FSS SQT (P 1)1 1ZUIPO 3VCZ
·ͱΊ
負荷テストツール Gatlingを紹介しました
複数のGatlingで 強い負荷をかけるデモをしました
いろんなものを 撃ち抜いてみました
負荷をかけると いろんな問題にぶつかります
アジャイルは価値を届けろというが
ユーザは いつも動いていて 反応が素早いシステムを求めてきやがる
価値あるサービスを リアクティブに構築するには
まだまだ勉強不足
こんな時代だからこそ
負荷テスト駆動開発 STDD
そして
アクターシステム ノンブロッキングIO
などの理解を深めないと いけないなと思いました
まとめ • Gatling • サービスにたくさん人が来るの練習をできる • 楽しい。 • nodejs チューニングしてないのにすげえ
• (ロジックあったらしらんけど) • アクターわからん。楽しい。 • Stress Test Deriven Development