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
Agile performance testing
Search
Andreas Bjärlestam
March 30, 2016
Programming
0
110
Agile performance testing
Agile performance testing with Amazon AWS, tmux and siege
Andreas Bjärlestam
March 30, 2016
Tweet
Share
More Decks by Andreas Bjärlestam
See All by Andreas Bjärlestam
Climate compensate with a pull request
bjarlestam
0
32
SPDY and HTTP2
bjarlestam
1
1.2k
SPDY or maybe HTTP2.0
bjarlestam
4
63
jquery mobile
bjarlestam
0
71
Devise - taking care of your users
bjarlestam
0
72
REST with JAX-RS
bjarlestam
1
90
REST
bjarlestam
2
170
Other Decks in Programming
See All in Programming
AI Agent 時代的開發者生存指南
eddie
4
2k
iOSでSVG画像を扱う
kishikawakatsumi
0
150
バッチ処理を「状態の記録」から「事実の記録」へ
panda728
PRO
0
180
Claude CodeによるAI駆動開発の実践 〜そこから見えてきたこれからのプログラミング〜
iriikeita
0
320
『毎日の移動』を支えるGoバックエンド内製開発
yutautsugi
2
270
Devvox Belgium - Agentic AI Patterns
kdubois
1
130
kiroとCodexで最高のSpec駆動開発を!!数時間で web3ネイティブなミニゲームを作ってみたよ!
mashharuki
0
830
CSC305 Lecture 09
javiergs
PRO
0
300
TFLintカスタムプラグインで始める Terraformコード品質管理
bells17
2
350
実践Claude Code:20の失敗から学ぶAIペアプログラミング
takedatakashi
16
6.5k
Writing Better Go: Lessons from 10 Code Reviews
konradreiche
3
5.5k
When Dependencies Fail: Building Antifragile Applications in a Fragile World
selcukusta
0
110
Featured
See All Featured
Testing 201, or: Great Expectations
jmmastey
45
7.7k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
127
54k
Thoughts on Productivity
jonyablonski
70
4.9k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
31
2.7k
Building Adaptive Systems
keathley
44
2.8k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
37
2.6k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
36
6.1k
A Tale of Four Properties
chriscoyier
161
23k
Building Applications with DynamoDB
mza
96
6.7k
BBQ
matthewcrist
89
9.8k
Balancing Empowerment & Direction
lara
5
700
Faster Mobile Websites
deanohume
310
31k
Transcript
Understanding your system Andreas Bjärlestam! 2016-03-30! _____ .__.__ / _
\ ____ |__| | ____ / /_\ \ / ___\| | | _/ __ \ / | \/ /_/ > | |_\ ___/ \____|__ /\___ /|__|____/\___ > \//_____/ \/ _____ ______ ____________/ ____\___________ _____ _____ ____ ____ ____ \____ \_/ __ \_ __ \ __\/ _ \_ __ \/ \\__ \ / \_/ ___\/ __ \ | |_> > ___/| | \/| | ( <_> ) | \/ Y Y \/ __ \| | \ \__\ ___/ | __/ \___ >__| |__| \____/|__| |__|_| (____ /___| /\___ >___ > |__| \/ \/ \/ \/ \/ \/ __ __ .__ _/ |_ ____ _______/ |_|__| ____ ____ \ __\/ __ \ / ___/\ __\ |/ \ / ___\ | | \ ___/ \___ \ | | | | | \/ /_/ > |__| \___ >____ > |__| |__|___| /\___ / \/ \/ \//_____/
Do you know on top of your head: • How
many req/s your system can handle? • What response >me it has? • How it scales? • What the bo@lenecks are? • How stable it is over >me?
Many s>ll do big bang performance tes>ng
Stop seeing performance tests as verifica>on It should be an
integrated part of your development cycle Con>nuously analyze your system
You should do it all the >me!
I’m lazy, so performance tes>ng must be quick and simple
isola>on
Your test client should do nothing but loadtes>ng, no interference
Amazon AWS + tmux = win!
You can leave it on and come back to check
every now and then
Combine with monitoring: Newrelic Kibana Graphite
> sudo yum install siege
> siege -c10 -t30s -d1 -i -f urls.txt
siege • Quick and simple • Instant visual feedback •
Good summary of most important metrics • Good enough for most scenarios = You can work in quick itera>ons
Create a Traffic Model
Your best guess of how the system will be used
When replacing a system Get access logs from the old
system Analyze which parts of the system that generate the most load Plot them over >me to get a feeling for peaks and average load
If you replay access logs against your system with siege
you can gain a lot of insights and find problems like unhandled urls, unnecessary redirects etc
Build a urls.txt file Based on traffic model Fill a
file with urls that represent your expected traffic, one url per line Think about the propor>ons of different types of urls
Build a urls.txt file Expec>ng broad traffic -> many urls
Expec>ng narrow traffic -> not so many
Build a urls.txt file h@p://example.com h@p://example.com/user/s>na h@p://example.com/user/olof h@p://example.com/user/sven h@p://example.com/user/siv h@p://example.com/user/ellen
h@p://example.com/country/sweden h@p://example.com/country/norway
Build a urls.txt file curl cut jq grep etc are
your friends
Build a urls.txt file You can send POST as well
h@p://example.com/user/s>na POST age=23 h@p://example.com/user/s>na POST a=1&b=2 h@p://example.com/user/s>na POST <./s>na.txt
Finding the system limits
10 req/s OK 100 req/s OK 500 req/s Slooow 300
req/s OK
Scale up with more CPU or processors and try again
Does it scale linearly?
This is a good >me to think about the bo@lenecks
of your system I/O CPU Sync / Async
Adjust and try again
Keep an eye on system metrics Response >me CPU load
Memory usage Error rates etc
Stability tes>ng
Start a linux machine on AWS Set up a session
with tmux Start siege Leave it running
> siege -c10 -t24h -i -d1 -f urls.txt
Put your system under con>nuous load from your first commit
Keep an eye on system metrics every now and then
Good to know: siege counts error responses and will stop
if it encounters more than 1024 errors
TLDR Stop doing performance tests like its 1999 Put your
system under load from day 1 Run tests interac>vely, be crea>ve Gain understanding AWS + tmux + siege is awesome!
tmux cheat sheet > tmux new -s loadtest starts a
new session named loadtest ctrl-b + d exits session > tmux list-sessions lists all current sessions > tmux a@ach -t loadtest a@aches to the session named loadtest
If siege does not fit your use case You could
try - gatling - locust - wrk They are bigger (more complex) hammers