$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
PHPer向けWebアプリケーションのパフォーマンスチューニング入門 / web perfo...
Search
yugo
July 14, 2018
Technology
2
3.1k
PHPer向けWebアプリケーションのパフォーマンスチューニング入門 / web performance tuning
PHPカンファレンス関西2018で発表した登壇資料です。
yugo
July 14, 2018
Tweet
Share
Other Decks in Technology
See All in Technology
ソフトウェアエンジニアとAIエンジニアの役割分担についてのある事例
kworkdev
PRO
0
260
TED_modeki_共創ラボ_20251203.pdf
iotcomjpadmin
0
150
子育てで想像してなかった「見えないダメージ」 / Unforeseen "hidden burdens" of raising children.
pauli
2
330
MySQLとPostgreSQLのコレーション / Collation of MySQL and PostgreSQL
tmtms
1
1.2k
AI with TiDD
shiraji
1
300
20251218_AIを活用した開発生産性向上の全社的な取り組みの進め方について / How to proceed with company-wide initiatives to improve development productivity using AI
yayoi_dd
0
690
オープンソースKeycloakのMCP認可サーバの仕様の対応状況 / 20251219 OpenID BizDay #18 LT Keycloak
oidfj
0
180
AI との良い付き合い方を僕らは誰も知らない
asei
0
270
AWS re:Invent 2025~初参加の成果と学び~
kubomasataka
1
190
ハッカソンから社内プロダクトへ AIエージェント「ko☆shi」開発で学んだ4つの重要要素
sonoda_mj
6
1.7k
MySQLのSpatial(GIS)機能をもっと充実させたい ~ MyNA望年会2025LT
sakaik
0
120
Kiro を用いたペアプロのススメ
taikis
4
1.9k
Featured
See All Featured
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
0
100
[SF Ruby Conf 2025] Rails X
palkan
0
630
Building a Modern Day E-commerce SEO Strategy
aleyda
45
8.4k
Claude Code のすすめ
schroneko
67
210k
New Earth Scene 8
popppiees
0
1.2k
How STYLIGHT went responsive
nonsquared
100
6k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
300
How to build a perfect <img>
jonoalderson
0
4.7k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
RailsConf 2023
tenderlove
30
1.3k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
150
We Are The Robots
honzajavorek
0
120
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!
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠