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
PHPer向けWebアプリケーションのパフォーマンスチューニング入門 / web perfo...
Search
yugo
July 14, 2018
Technology
3.2k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
PHPer向けWebアプリケーションのパフォーマンスチューニング入門 / web performance tuning
PHPカンファレンス関西2018で発表した登壇資料です。
yugo
July 14, 2018
Other Decks in Technology
See All in Technology
ボードゲームの遊び相手をFoundation Modelsで作る / iOSDC Japan 2026
genda
0
170
2026-09-08 そのJavaモダナイゼーション、AIに丸投げで大丈夫?IBM Bobで変わる品質と効率
yutanonaka
1
180
PQC移行の今 -- IETF からみた現在地
satokan
3
190
ADKで始める業務改善 - AIエージェント開発時の考えと設計
harappa80
2
290
GoのInterface内部構造から学ぶ!最高パフォーマンスを出すコード設計
yappli_developers
1
290
サーバーレスをどこまで使う? WebRTC対戦ゲームで選んだVPSとの共存設計
kaidouji85
0
430
高負荷プロダクション環境におけるAWS Lambdaのリアル 〜スケールとコストを左右する実行ライフサイクルの技術仕様〜
maimyyym
2
550
AIで社員の自主発信に広報目線を組み込む
_mossann_t
0
140
【ゲームメーカーズスクランブル2026】『Shadowverse: Worlds Beyond』UIとアニメーションで実現する最高のユーザー体験を叶えるプロトタイピング
cygames
PRO
1
360
なぜ「決定性」が 決定的に重要なのか? Durable Execution 基盤の数理的理解 #serverlessjp / ServerlessDays Tokyo 2026
ytaka23
4
1.3k
技術的負債から考える、AI時代のエンジニアリング投資 — ビズリーチの技術的負債と向き合った経験から、変更し続けられるソフトウェアを考える/ technical-debt-con2026
visional_engineering_and_design
4
3.7k
アクセスキーこわい やめかたと漏らさない工夫
sassssan68
1
760
Featured
See All Featured
What's in a price? How to price your products and services
michaelherold
247
13k
Why Our Code Smells
bkeepers
PRO
340
58k
Being A Developer After 40
akosma
91
590k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
550
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
670
Music & Morning Musume
bryan
48
7.4k
Chasing Engaging Ingredients in Design
codingconduct
0
340
YesSQL, Process and Tooling at Scale
rocio
174
15k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
290
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
470
Building a Scalable Design System with Sketch
lauravandoore
464
34k
Transcript
PHPer͚WebΞϓϦέʔγϣϯͷ ύϑΥʔϚϯενϡʔχϯάೖ PHPΧϯϑΝϨϯεؔ2018 ߴڮါޗ
• KLabͰιʔγϟϧήʔϜΞϓϦέʔγϣϯͷ։ൃ • αʔόʔαΠυΤϯδχΞ • PHPɺGoɺPython • PHP Internals Book
ຊޠ༁ http://www.phpinternalsbook-ja.com ˏyugo_tak ࣗݾհ
1. ෛՙࢼݧʹ͍ͭͯ 2. ύϑΥʔϚϯεʹ͍ͭͯͷߟ͑ํ 3. ·ͱΊ
͡Ίʹɺࠓ͞ͳ͍͜ͱ
ࠓ͞ͳ͍͜ͱ • ΤϯυϢʔβʔͷϢʔβʔମݧʹணͨ͠߹ɺόοΫΤϯυͷνϡʔχϯάͷޮՌݶఆత • ϒϥβͰ͍ΖΜͳ͜ͱΛ͍ͯ͠Δ - DOMπϦʔͷߏஙɺϨϯμϦϯάɺJavascriptͷεΫϦϓτධՁɾ࣮ߦͳͲ - ωοτϫʔΫӽ͠ʹϦιʔεΛϩʔυ͢ΔॲཧͦͷҰ෦ ϑϩϯτΤϯυʹ͓͚ΔύϑΥʔϚϯενϡʔχϯά
ϢʔβʔମݧΛ্ͤ͞Δʹ ϑϩϯτΤϯυʹ͓͚ΔνϡʔχϯάඞཁෆՄܽ
ͨͪPHPer ϑϩϯτΤϯυϑϩϯτΤϯυͰେࣄ͚ͩͲɺ όοΫΤϯυόοΫΤϯυͰ୲อ͠ͳ͍ͱ͍͚ͳ͍͜ͱ͕͋Δɻ ϦϦʔε࣌ͷඪੑೳΫϦΞͰ͖Δʁ ྲྀೖ͕૿͑ͨ߹ɺαʔόʔෛՙʹ͑ΒΕΔʁ ࠓόοΫΤϯυΤϯδχΞత؍ͰύϑΥʔϚϯενϡʔχϯάʹ͍ͭͯ͠·͢
ෛՙࢼݧʹ͍ͭͯ
ෛՙࢼݧʹ͍ͭͯ ෛՙࢼݧͰԿΛ͢Δ͖͔ʁ • ඪੑೳͷઃఆ MUST • ݱߦͷγεςϜߏͰඪੑೳΛୡͰ͖Δ͔ͷ֬ೝ(=ඪੑ) MUST • ݱߦͷγεςϜߏΛεέʔϧͤ͞Δͱੑೳεέʔϧ͢Δ͔ͷ֬ೝ(=εέʔϧੑ)
MUST • γεςϜͷੑೳ͕Ͳ͜·Ͱεέʔϧ͢Δ͔ͷ֬ೝ(=ݶքੑ) SHOULD • ظؒՔಇͨ͜͠ͱʹΑΔσʔλɺϩάͷੵͳͲʹΑͬͯੑೳʹ͕Ͱͳ͍͔ͷ֬ೝ(=ٱੑ) SHOULD
ෛՙࢼݧʹ͍ͭͯ ͦΜͳʹෛՙ͕͔͔Βͳ͍ڥ͔ͩΒෛՙࢼݧ͠ͳ͍͍ͯ͘ͱ͍͏Ͱͳ͍ɻ ·ͨɺඪੑೳΛୡͨ͠ࣄ͚ͩΛ֬ೝ͢Ε͍͍ͱ͍͏Θ͚Ͱͳ͍ɻ γεςϜͷ4ͭͷੑ࣭(ඪੑɺεέʔϧੑɺݶքੑɺٱੑ)Λ֬ೝ͓ͯ͘͜͠ͱ͕ॏཁɻ ※γεςϜͷར༻ͷ͞ΕํʹΑͬͯ͜ͷશͯͷੑ࣭Λඞͣࢼݧ͢Δඞཁͳ͍ɻ ྫ͑ࣾγεςϜͳͲͷΑ͏ʹγεςϜͷར༻ऀ͕ݶఆతͰྲྀೖ͕҆ఆ͍ͯ͠Δ߹εέʔϧੑॏཁͰͳ͘ͳΔ͠ɺ ϓϩϞʔγϣϯΛ͓͜ͳ͏ࡍͷಛఆͷεύΠΫʹ͑ͤ͢͞Ε͍͍ͱ͍͏ঢ়گͰ͋Εظӡ༻Λఆͨ͠ٱςετ͍Β ͳ͍͔͠Εͳ͍
ඪੑೳͷઃఆ •webΞϓϦέʔγϣϯͷදతͳੑೳࢦඪ - εϧʔϓοτ(req/sec) - ϨΠςϯγ •ఆෛՙΛܭࢉˠඪੑೳΛઃఆ •ఆෛՙ͋͘·Ͱఆ(DAU͕˓˓ਓɺ1ਓฏۉͯ͠˓˓ϖʔδΞΫηε͢Δ) •webͷྲྀೖͷఆ্͘͠ৼΕ͢ΔՄೳੑ͕͋Δɻ •ͦͷ্ৼΕΛߟྀͯ͠ඪෛՙϨϕϧఆෛՙΑΓߴ͘ઃఆ͓ͯ͘͠
γεςϜͷඪੑೳͷ֬ೝ •ઃఆͨ͠ඪੑೳΛୡͰ͖Δ͔ͷ֬ೝ •ݱߦͷߏʹΑΔੑೳΛ֬ೝ͠ɺඪϨϕϧʹୡͰ͖ͳ͍߹νϡʔχϯάΛ͓ ͜ͳ͏ •ඪੑೳʹୡͰ͖ͳ͍ͱϦϦʔεɺσϓϩΠͰ͖ͳ͍ͷͰ࠷ॏཁ
γεςϜͷεέʔϧੑͷ֬ೝ • εέʔϧΞοϓɺεέʔϧΞτͰੑೳͦΕʹԊ্ͬͯ͢Δߏʹͳ͍ͬͯΔ͔ʁ • ΞϓϦέʔγϣϯมߋͤͣɺΠϯϑϥߏͷεέʔϧΞοϓεέʔϧΞτͷΈʹ͢Δ • Ͳ͜Λεέʔϧͤ͞Εੑೳ্͕͢Δ͔Ѳ͓ͯ͘͠
γεςϜͷݶքੑͷ֬ೝ • γεςϜͷεέʔϧੑ͕୲อͰ͖ΕɺͲ͜·Ͱੑೳ͕εέʔϧͰ͖Δͷ͔֬ೝ͓ͯ͘͠ • ඪੑೳͱεέʔϧੑೳ͕ୡͰ͖͍ͯΕجຊతʹOK͕ͩɺ༨༟͕͋Ε͓͖͍ͬͯͨ
γεςϜͷٱੑͷ֬ೝ •ظՔಇͯ͠σʔλ͕ੵͨ͠ঢ়ଶͰͷੑೳΛ֬ೝ •σʔλྔ͕૿͑ͨ࣌ɺDBׂඞཁͦ͏͔ʁ •ظӡ༻ͤͣɺσʔλͦΜͳʹͨ·Βͳ͍ͷͱ͔Ͱ͋ΕඞਢͰͳ͍
ෛՙࢼݧͷ४උ • ෛՙࢼݧڥ • ΞϓϦέʔγϣϯ • ֎෦γεςϜͷґଘ෦ͷελϒԽ • ߈ܸπʔϧ(JMeterͳͲ) •
߈ܸΠϯελϯεͷ४උ • ߈ܸγφϦΦͷ࡞ ඞཁͳͷ • γφϦΦ༻σʔλ४උ • ϞχλϦϯάπʔϧ (XHGui,NewRelic,ganglia…) • ܭଌπʔϧ (top,vmstat,iostat,sar,netstat…) • ΞΫηεϩάαϚϦπʔϧ (kataribeɺࣗ࡞πʔϧ) • ϓϩϑΝΠϥʔ (XHProf,tideways,blaclfire…) Ҋ֎४උʹ͕͔͔࣌ؒΔͷͰܭըతʹ…ʂ
߈ܸπʔϧͷબఆ ߈ܸπʔϧҎԼΛຬ͍ͨͯ͠Δඞཁ͕͋Δ • ϦΫΤετͷγϡϛϨʔγϣϯ - γφϦΦΛઃఆ࣮ͯ͠ࡍͷϫʔΫϩʔυʹ͍ۙෛՙΛ͔͚Δ͜ͱ͕Ͱ͖Δ - ϦΫΤετύϥϝʔλʔΛಈతʹઃఆͰ͖Δ • γφϦΦͷޭͷఆ݅ͷઃఆ͕Մೳ
- Ϩεϙϯεʹ˓˓ؚ͕·Ε͍ͯͳ͔ͬͨΒfailɺHTTPͷεςʔλείʔυ͕5XXܥͳΒfail • ෛՙϨϕϧͷௐ͕Մೳ - ߈ܸπʔϧଆͷೳྗ͕Γͳͯ͘ेͳෛՙΛ༩͑ΒΕͳ͍ͱ͍͏ͷ͋Γ͕ͪ • ରͷγεςϜͷωοτϫʔΫతʹ͍ۙͱ͜Ζ͔ΒෛՙΛ༩͑Δࣄ͕Ͱ͖Δ - ωοτϫʔΫϨΠςϯγ͕ߴ͍ͱɺରγεςϜʹෛՙ͕͏·͔͔͘Βͳ͍ - ωοτϫʔΫͷঢ়گʹΑΓ݁Ռ͕҆ఆ͠ͳ͍
ෛՙࢼݧͷਐΊํ ϘτϧωοΫ͍ΖΜͳͱ͜ΖͰൃੜ͢Δ • Πϯϑϥͷߏʹ͕͋Δ • OSͷઃఆʹ͕͋Δ • webαʔόʔͷઃఆʹ͕͋Δ(KeepAliveɺϫʔΧʔɺBacklog…) • PHPͷઃఆʹ͕͋Δ(APCuɺOPCache…)
• ΞϓϦέʔγϣϯͷϑϨʔϜϫʔΫͷઃఆɺར༻ํ๏ʹ͕͋Δ(debug mode) • ΞϓϦέʔγϣϯϩδοΫʹ͕͋Δ(N+1ɺDBଓํ๏ɺඇޮͳॲཧ) • DBαʔόʔͷઃఆʹ͕͋Δ(Index, buffer pool size…)
ෛՙࢼݧͷਐΊํ Ұؾʹશ෦Λରʹ͢ΔͱԿ͕ͳΜ͔ͩΘ͔Βͳ͘ͳͬͯ͠·͏! ҙ ϘτϧωοΫ͍ΖΜͳͱ͜ΖͰൃੜ͢Δ • Πϯϑϥͷߏʹ͕͋Δ • OSͷઃఆʹ͕͋Δ •
webαʔόʔͷઃఆʹ͕͋Δ(KeepAliveɺϫʔΧʔɺBacklog…) • PHPͷઃఆʹ͕͋Δ(APCuɺOPCache…) • ΞϓϦέʔγϣϯͷϑϨʔϜϫʔΫͷઃఆɺར༻ํ๏ʹ͕͋Δ(debug mode) • ΞϓϦέʔγϣϯϩδοΫʹ͕͋Δ(N+1ɺDBଓํ๏ɺඇޮͳॲཧ) • DBαʔόʔͷઃఆʹ͕͋Δ(Index, buffer pool size…)
ෛՙࢼݧͷਐΊํ • ੩తϑΝΠϧʹରͯ͠ͷϦΫΤετ - webαʔόʔΛؚΊͨͦΕҎԼͷϨΠϠͷઃఆ͕͓͔͍͠ͱ͜Ζ͕ͳ͍͔֬ೝ • HelloWorldΞϓϦέʔγϣϯͷϦΫΤετ - ϑϨʔϜϫʔΫͦΕࣗମͷར༻ํ๏ઃఆʹ͓͔͍͠ͱ͜Ζ͕ͳ͍͔֬ೝ ·ͣ1ͷwebαʔόʔʹରͯ͠ԼهͷγφϦΦΛ࣮ߦͯ͠ΈΔ
ͦͷαʔόʔͷجຊੑೳΛ֬ೝͰ͖Δ
ෛՙࢼݧͷਐΊํ 1ͷwebαʔόʔʹΑΔ࠷దԽ webαʔόʔͷεέʔϧΞτࢼݧ ·ͣ1Ͱ࠷దԽͯ͠ෳʹ͢Δͷ͕جຊ ͦͷޙɺϘτϧωοΫ͕ग़͖ͯͨͱ͜ΖΛղফ͍͖ͯ͠ɺඪੑೳͷୡΛࢦ͢
ෛՙࢼݧͷνΣοΫ߲ •ରͷγεςϜʹेͳෛՙΛ͔͚ΒΕ͍ͯΔ͔ʁ •ϘτϧωοΫ͕ࠓͲ͜ʹ͋Δ͔ѲͰ͖͍ͯΔ͔ʁ - ϘτϧωοΫҠಈ͢Δ(DBαʔόʔˠwebαʔόʔˠωοτϫʔΫଳҬͳͲ) •߈ܸπʔϧCLͷৼΔ͍Λ࠶ݱͰ͖͍ͯΔ͔ʁ
ύϑΥʔϚϯεʹ͍ͭͯͷߟ͑ํ
ύϑΥʔϚϯεʹ͍ͭͯͷߟ͑ํ •εϧʔϓοτ •ϨΠςϯγ •ෛՙͱ͖߹͏࣌ͷΞϓϩʔν
εϧʔϓοτ •୯Ґ࣌ؒ͋ͨΓʹॲཧͰ͖Δ •දతͳࢦඪrps, qps, ppsͳͲ •ෳͷίϯϙʔωϯτͰߏ͞Ε͍ͯΔγεςϜͷ߹ɺ֤ίϯϙʔωϯ τͷ࠷খͷεϧʔϓοτͰγεςϜશମͷεϧʔϓοτ͕ܾ·Δ → γεςϜʹ͓͚Δεϧʔϓοτͷ࠷খ෦ͷͱ͜Ζ(=ϘτϧωοΫ)Λ ɹղফ͢Δ͜ͱ͕ॏཁɻطʹੑೳ͕͍͍ͱ͜ΖΛνϡʔχϯάͯ͠ޮՌ͕
ͳ͍
ϨΠςϯγ •Ԡɺॲཧ࣌ؒͷ͜ͱ •ෳͷίϯϙʔωϯτͰߏ͞Ε͍ͯΔγεςϜͷ߹ɺ֤ί ϯϙʔωϯτͷϨεϙϯελΠϜͷ߹ܭͰγεςϜશମͷϨεϙ ϯελΠϜ͕ܾ·Δ εϧʔϓοτͱҧͬͯɺϘτϧωοΫͱͳ͍ͬͯͳ͍෦ͰνϡʔχϯάͰ͘ग़དྷΕ શମͱͯ͠ͷϨεϙϯελΠϜͷ্ʹͭͳ͕Γ͍͢
ϨΠςϯγͷఆٛ •Response timeͱService Time۠ผ͢Δ •Service timeॲཧʹ͔͔ͬͨ࣌ؒ •Response timeΩϡʔͰͷؚͪ࣌ؒΊΔ -ύέοτͷͪߦྻ -CPUͷϥϯΩϡʔͷͪߦྻ
-ApacheͷListen backlogͷͪߦྻ -I/Oͷͪߦྻ •؍ଌऀ͕୭͔ʹҙ ΫϥΠΞϯτ͔ΒΈͨϨεϙϯελΠϜ͍͕WebαʔόʔͷΞΫηεϩά্తʹ ͘ͳ͍߹ɺWebαʔόʔͰͷͪ࣌ؒʹ͕͔͔͍࣌ؒͬͯΔɺͳͲ
ϨΠςϯγͷಛੑ •ϨΠςϯγݸʑʹ͓͍ͯϢχʔΫ •͋Δૢ࡞ͷͦͷॠؒͷෛՙঢ়گʹ͓͍ͯͷԠ࣌ؒ •γεςϜΛߏ͢Δίϯϙʔωϯτͷ༷ʑͳৼΔ͍ʹΑΓӨڹ͞ΕΔ ֤ϨΠϠʔͷΩϟογϡͷ༗ແɺGCͷൃੜɺεϧʔϓοτͷԼͳͲ •ಉ͡ૢ࡞͕͋Δ࣌50msͰऴΘΔͱ͖͋Ε500ms͔͔Δ͜ͱ͋ Δ •ฏۉ͋·ΓҙຯΛͳ͞ͳ͍ •ൺֱ৭Μͳ݅ͦΖͬͯͳ͍ͱҙຯͳ͍
ϨΠςϯγͷ؍ଌϙΠϯτ •ϨΠςϯγͰॏཁͳͷͦͷৼΔ͍()Λ؍ଌ͢Δ͜ͱ •50msʙ100msͰ༳Β͙γεςϜͱ50msʙ1000msͰ༳Β͙γεςϜͩ ͱલऀͷγεςϜͷํ͕҆ఆ͍ͯ͠Δ •Ұఆظؒʹ͓͚Δ95th percentile, 99th percentile, Max response
timeͳͲΛάϥϑʹग़͓ͯ͘͠ •ඪੑೳͷεϧʔϓοτ·Ͱ্͍͛ͯ͘ͱϨΠςϯγͲ͏ͳΔ ͔ʁڐ༰ൣғ͔ʁ
ෛՙͱ͖߹͏࣌ͷΞϓϩʔν •“ਪଌ͢ΔͳɺܭଌͤΑ” •USE Method •PHPͷ࣮ߦΞʔΩςΫνϟΛҙࣝ͢Δ
ਪଌ͢ΔͳɺܭଌͤΑ •ΊͪΌͪ͘Όେࣄ •ಛʹͳΕͳ͍͏ͪਖ਼ղͱͳΔνϡʔχϯάΛۮવͰ͖ͯବɻͲͷϝτϦΫε Λ͢ΕͦͷνϡʔχϯάΛ͖ͩ͢ͱ͍͏ߟ͑ʹḷΓண͚ͨͷ͔ɺͦͷࢥߟ ϓϩηε͕ॏཁ •ؒҧͬͨͱ͜ΖΛνϡʔχϯά͢Δͱ༨ܭੑೳ͕མͪΔͱ͍͏͜ͱ͋Δ ྫ͑DB͕ϘτϧωοΫͳͷʹwebͷΞΫηεϩάʹه͞Ε͍ͯΔϨεϙϯε λΠϜ͕͍ͷͰwebͷϫʔΧʔΛ૿͢ͱશମͷੑೳΉ͠ΖѱԽ͢Δɺͳ Ͳ
USE Method •Utilization Saturation and Errors (USE) Method By Brendan
Gregg •֤Ϧιʔεͷ༻ɺɺΤϥʔʹ͍ͭͯண͢Δ •දతͳϦιʔε CPU ϝϞϦʔ σΟεΫ ωοτϫʔΫ ͳͲ Mutex File Descriptors ͳͲ ཧϦιʔε ιϑτΣΞϦιʔε
PHPͷ࣮ߦΞʔΩςΫνϟΛҙࣝ͢Δ • Shared Nothing Architecture • ϦΫΤετຖʹ༷ʑͳใ͕ຖճॳظԽ͞ΕɺϦΫΤετಉ࢜ͷॲཧ͕͓ޓ͍ʹಠཱ͍ͯ͠Δ • લͷϦΫΤετͷॲཧ͕࣍ͷϦΫΤετʹӨڹΛ༩͑ͳ͍ •
ϦΫΤετຖʹϝϞϦղ์͢ΔͷͰϝϞϦϦʔΫͳͲͷ৺͕গͳ͍ • ঢ়ଶΛ͍࣋ͬͯͳ͍ͷͰεέʔϧΞτΛ͍͢͠ɻεέʔϧΞτͨ࣌͠ʹϦχΞʹ ύϑΥʔϚϯε্͕͕Γ͍͢ɻ • ϦΫΤετॲཧຖͷΦʔόʔϔου͕େ͖͍ • ϦΫΤετΛ·͍ͨͩใͷอ͕࣋Ͱ͖ͳ͍(APCuͳͲΛར༻͠ͳ͍ͱ͍͚ͳ͍) ϝϦοτ σϝϦοτ
PHPͷ࣮ߦΞʔΩςΫνϟΛҙࣝ͢Δ • ͜ͷ࣮ߦΞʔΩςΫνϟʹΑΔԸܙࢁ͋Δ͕ɺͻͱͭͷϦΫΤετॲཧʹண͢ΔͱΦʔόʔ ϔου͕ଟ͘ඞཁʹͳΓຊ࣭తʹ͍ • ͜ͷ࣮ߦΞʔΩςΫνϟΛҙࣝͯ͠PHP͕ۤखͳࣄͰؤுΒͳ͍Α͏ʹ͠Α͏ • 1ϦΫΤετ͋ͨΓʹॲཧ͢ΔࣄΛݮΒͯ͠ɺεέʔϧΞτͰԣʹͳΒͯύϑΥʔϚϯεΛ্ ͛Δͷ͕ૉͳΞϓϩʔν •
PHPͩͬͯؤுͬͨΒΕΔ!
͓·͚
͓͢͢Ίॻ੶
ISUCON
ISUCON
·ͱΊ
·ͱΊ •νϡʔχϯάͰϢʔβʔମݧͷ্Λࢦ͢ͳΒϑϩϯτΤϯυͷํ͕େࣄ •ෛՙࢼݧͰγεςϜͷඪੑɺεέʔϧੑɺݶքੑɺٱੑΛҙࣝ͠Α͏ •εϧʔϓοτɺϨΠςϯγͳͲجຊత֓೦ͱ͓༑ୡʹͳͬͯෛՙʹ͖߹͓͏ •Ͱ͖Δ͚ͩ؍ଌ͢ΔบΛΈʹ͚ͭΑ͏ •ͱΓ͋͑ͣISUCONͰΑ͏
ͦ͏͍ͬͯύϑΥʔϚϯενϡʔχϯά͍͠ • webΞϓϦέʔγϣϯͷγεςϜෳࡶͳͷͰ ͍͠ͷͨΓલ • ෳࡶͳγεςϜɺෳࡶͳϫʔΫϩʔυɻख़࿅͠ ͨਓͰݟޡΔ͜ͱ͠͠ɻ • ͔ͩΒͦ͜৬ਓٕ͚ͩͰͳ͘ɺ͏গ͠Պֶత ͳΞϓϩʔνඞཁ
ਖ਼͍͠؍ଌɺํ๏ͷཱ֬ɺମܥԽ • ͍͠ʂ͚Ͳָ͍͠
Happy Performance Engineering!
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠