Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
性能テストのいろは
Search
Osamu Ishikawa
March 08, 2015
77
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
性能テストのいろは
天下一なんちゃらのアレ
Osamu Ishikawa
March 08, 2015
Featured
See All Featured
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3.2k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
630
What's in a price? How to price your products and services
michaelherold
247
13k
Prompt Engineering for Job Search
mfonobong
0
520
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
270
How to Ace a Technical Interview
jacobian
280
24k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
500
Leo the Paperboy
mayatellez
10
2.4k
The Invisible Side of Design
smashingmag
301
52k
New Earth Scene 8
popppiees
4
2.7k
Navigating Weather and Climate Data
rabernat
0
560
YesSQL, Process and Tooling at Scale
rocio
174
15k
Transcript
ੑೳςετͷ͍Ζ @jami_i
Q : ੑೳςετͬͯ·͔͢ʁ
A : ੑೳςετͬͯ·͔͢ʁ • ΄ͱΜͲ͍ͬͯͳ͍ (Πϝʔδ) • ඇػೳཁ݅ • ޙճ͠ʹ͞Ε͍͢ɾɾɾ
KBNJ@Jௐ
ͦͦʮੑೳʯͬͯ • γεςϜͷॲཧೳྗ • γεςϜ͕ͲΕ͘Β͍ͷॲཧ = ෛՙʹ͑Β ΕΔͷ͔ɻ
ੑೳςετͱ ΰʔϧ έʔε γεςϜ͕ͲΕ͘Β͍ͷෛՙʹ͑ΒΕΔͷ͔ ԿΛͬͯ͑ΒΕͨͱ͢Δ͔ Ұఆ࣌ؒͰ۠ΓఆྔԽͨ͠ͷ͕ੑೳཁ݅ͱͳΔ
WEBγεςϜͰͷੑೳධՁ
ੑೳͷ3ͭͷ࣠ ϦΫΤετ͋ͨΓ ͷॲཧ࣌ؒ ϨεϙϯελΠϜ ಉ࣮࣌ߦ εϧʔϓοτ αʔόʔϦιʔε $16 ϝϞϦ ωοτϫʔΫଳҬ
໌֬ͳఆٛΛ͓ͯ͘͜͠ͱ͕େࣄ
ϨεϙϯελΠϜ • ΫϥΠΞϯταΠυͰܭଌ͢Δͷ͕Ұൠత • Ԡʹ࣌ؒͷ͔͔͍ͬͯΔՕॴ͕ͳ͍͔Λ֬ೝ • ϦΫΤετͷૹ৴Λ։͔࢝ͯ͠ΒϨεϙϯε͕ऴྃ͢Δ·Ͱ • ϥϯυτϦοϓλΠϜ(RTT) •
͍΄͏͕ྑ͍
ಉ࣮࣌ߦ(εϧʔϓοτ) • τϥϯβΫγϣϯ/ඵͰද͢ɻ • τϥϯβΫγϣϯͷҙຯ߹͍͕ᐆດͳͷͰҙ • PV/sec ͱಉͱଊ͑Δ߹ • ਵ͢ΔϦιʔεϦΫΤετ̍ͭͱݟΔ߹
• ଟ͍΄͏͕Α͍ → ಉ࣌ʹ͚͞ΔϦΫΤετ͕ଟ͍ɻ
γεςϜϦιʔε • ᮢ͑ͷোΛى͜͞ͳ͍͜ͱΛ֬ೝ͢Δɻ • ؔ࿈͢Δαʔόʔͯ͢Ͱऔಘ͢Δ͖ • CPU, ϝϞϦ, ωοτϫʔΫଳҬ, JavaͳΒεϨουώʔϓ
• *statͰऔಘͰ͖Δ(WindowsλεΫϚωʔδϟʁ) • Ϧιʔεऔಘͷπʔϧ͋Δ • Graphite, Jennifer, Oracle Mission Control(JMX), AWSͳΒCould Watch
+α • γεςϜతͳੑೳཁ݅ʹՃ͑ͯۀతͳੑೳཁ͕݅ଘࡏ • ਃࠐ/ • ϩάΠϯ/ඵ • ग़ྗ/ •
γεςϜ୲Ͱ୯७ʹܾΊΒΕͳ͍Մೳੑଟ͍
ੑೳςετͷ͢͢Ίํ
ੑೳςετͷPDCA 1%$"αΠΫϧ8JLJQFEJB ςετܭը ςετ࣮ࢪ ੑೳ֬ೝ ੑೳվળ
1. ςετܭը
ςετܭը • ͲͷΑ͏ͳγφϦΦɾڥɾߏͰςετΛߦ͏͔ • ຊ൪ڥͰςετ͕Ͱ͖Δͷ͔ɺετϨεπʔϧԿΛ ͑Α͍ͷ͔ • ԿΛܭଌ͍ͨ͠ͷ͔Λ໌֬ʹ͓ͯ͘͠ • ܭଌ͔ΒੑೳධՁͰ͖ͳ͍ͱΔҙຯ͕ͳ͍
• ࢹ͢ΔϦιʔεͲ͏͢Δͷ͔
ετϨεπʔϧͷબ • ͲΜͳπʔϧͰෛՙΛ͔͚Δͷ͔ • ιϑτ͚ͩͰͳ͘τϥϑΟοΫδΣωϨʔλͷΑ͏ͳ ઐ༻ϋʔυ͋Δ • Լهͷ؍ͰπʔϧΛબ͢Δ • ఆ͢ΔγφϦΦΛ࣮ݱͰ͖Δ͔
• ෛՙޮΑ͍͔ • ܭଌՄೳͳͳʹ͔
γφϦΦ࡞ • ੑೳཁ݅Λݩʹ࠷ଟͱͳΔಉ࣌ΞΫηεػೳ͝ͱͷར༻ൺͳͲΛߟྀͯ͠ύλʔϯ࡞ • ఆෛՙ / ݶքෛՙ ͷ྆ํΛݟͨ΄͏͕Α͍ • ϦΫΤετΩϟογϡͷಈ͖ͳͲۃྗϒϥβͷڍಈʹ߹ΘͤΔ
• ςετ࣮ࢪʹύϥϝʔλνϡʔχϯά͢Δ͜ͱɾɾɾ • ΫϥΠΞϯτଆͰඞཁʹͳΔϦιʔεΛ֬ೝ͓ͯ͘͠ 1000req/sec ͷࢼݧ͕ඞཁͰ1͋ͨΓͷ͔͚ΒΕΔෛՙ͕50req/secͷ߹ 1000 / 50 = 20 ͷΫϥΠΞϯτ͕ඞཁʹͳΔɻ • ඞͣϨεϙϯεΞαʔγϣϯΛ͢Δ͜ͱ • ΤϥʔϨεϙϯεʹؾ͕ͭ͘͜ͱ͕Ͱ͖ͳ͍
ςετσʔλ࡞ • ͳΔ࣮͘σʔλʹ͍ۙ΄͏͕Α͍ • ͱ͍ͬͯେมͳͷͰ͋ΔఔϥϯμϜʹ͢Δఔɻ • ಉҰσʔλͩͱDBͷ࣮ߦܭըʹӨڹ͕ͰΔ • όϧΫϩʔμʔͰࣄલʹϩʔυ͓ͯ͘͠ •
embulkྑ͛͞
ςετ࣌ͷߏྫ 8&# "1 %# ෛՙΫϥΠΞϯτ զʑ
2. ςετ࣮ࢪ
ςετ࣮ࢪͷྲྀΕ • ԼهͷྲྀΕΛγφϦΦ͝ͱʹ܁Γฦ͢ ॳظԽ ܭଌ࣮ࢪ ܭଌͷ౷ܭ ΫϥΠΞϯτىಈ γεςϜϦιʔεऔಘ σʔλϩʔυ γφϦΦϩʔυ
514ͷऔಘ Ϧιʔε֬ೝ ϚΠϧετʔϯ ΫϥΠΞϯτ γεςϜ
ॳظԽɾσʔλϩʔυ • σʔλϩʔυޙඞͣ౷ܭใΛऔಘ͢Δ͜ͱʂ • ΞʔΧΠϒϩάͷ༰ྔ֬ೝ͓͍ͯͨ͠΄͏͕ྑ͍ɻ
ෛՙΫϥΠΞϯτͷىಈ • جຊۃݶ·ͰͿΜճ͚ͩ͢ • ܭଌอଘͯ͠Ͷ • ཧGraphiteͷϦΞϧλΠϜϞχλϦϯά Ͱܭଌ͍ͨ͠
γεςϜϦιʔεऔಘ • ΫϥΠΞϯτͷϥϯϓΞοϓ͕͔ྃͯ͠ΒϦιʔεΛऔΔ • ϓϩμΫτඞͣຊ൪ͱಉ༷ͷϩάΛऔಘ͢Δɻ • ϩάաଟʹΑΔσΟεΫIOԼɺϚϧνεϨουͷ͕ ൃ֮͢Δ͜ͱ͋Δ • gcϩάग़ྗ͢ΔΑ͏ʹ͓͍ͯͨ͠΄͏͕Α͍
-verbose:gc
3. ੑೳ֬ೝ
ੑೳ֬ೝ • ΫϥΠΞϯτͷϩάαʔόʔΞΫηεϩάͳͲ͔ΒੑೳΛܭࢉ ͢Δ • αʔόʔϦιʔεͷṧഭͳ͔͔ͬͨ • ಉ࣮࣌ߦ͕ݪҼͱͳΔΤϥʔ͕ൃੜ͍ͯ͠ͳ͍͔ • ۀྔ͕ੑೳཁ݅ͱͳ͍ͬͯΔ߹DBͷϨίʔυͳͲΛΧ
ϯτ͢Δ • ੑೳྼԽͷݪҼΛಥ͖ࢭΊΔ
4. ੑೳվળ
ۚͰԥΔ • CPUɾϝϞϦΛ૿ͦ͏ • SSDʹ͢Ε͓̺ • αʔόʔΛ૿ͦ͏ • LBΛͬͱߴੑೳͳػछʹ
͍͍ͦΜͳ͓ۚͳ͍ ΞϓϦͷνϡʔχϯάͰ͠ΐ͏ • ਖ਼͍͠Ϋϥε͕બ͞Ε͍ͯΔ͔(List, Set) • ਖ਼͍࣮͕͠બ͞Ε͍ͯΔ͔(ArrayList, LinkedList) • ෆཁͳϩοΫ͕ͳ͍͔
• ࠶ؼॲཧͷඌ࠶ؼʹͳ͍ͬͯΔ͔ • ͳͲͳͲ͋͛ͨΒΩϦ͕ͳ͍
·ͱΊ
ੑೳςετܭը໋͕ • ࣮ࢪ/֬ೝେͨ͠ίετͰͳ͍ • ໌֬ͳੑೳཁ݅ΛܾΊ͓ͯ͘ εϧʔϓοτ100tpsͱ͢Δ εϧʔϓοτϒϥβͷ̍ϖʔδϩʔυΛ1τϥϯβΫγϣϯͱ͠ɺ100tps Λग़ͤΔΑ͏ʹ͢Δ • ໌֬ͳΩϟογϡઓུΛݐ͓ͯͯ͘
• ੩తϦιʔεͷΩϟογϡઃܭγφϦΦʹӨڹΛ༩͑Δɻ • ෛՙΫϥΠΞϯτͷௐୡେม ⭕️ ❌
ੑೳςετͰ͑ͦ͏ͳ πʔϧͨͪ
Gatling • AkkaϕʔεͷඇಉظIOΛͬͨε τϨεπʔϧ +.FUFSͷఔͷ$16ෛՙ • ScalaDSLͰγφϦΦΛهड़͢Δɻ • HTMLܗࣜͷݟ͍͢Ϩϙʔτग़ ྗػೳ
class MySimulation extends Simulation { val conf = http.baseUrl("http://localhost") val scn = scenario("Test Senario") .exec(http("index").get("/")) .during(10 minutes) { exec( http("json").get("/json") .check(jsonPath("$.id").saveAs("id")) ) } setUp(scn.inject(atOnceUsers(5))) .protocols(conf) }
Twitter ZipKin • ࢄγεςϜ͚ϦΫΤεττϨʔεπʔϧ • Ͳͷಈ࡞ʹͲΕ͘Β͍͕͔͔࣌ؒͬͨͷ͔ΛෳϚγϯ ʹ·͕ͨͬͬͯϩΪϯά͢Δɻ