Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
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
Lambdaの常識はどう変わる?!re:Invent 2025 before after
iwatatomoya
0
290
Oracle Technology Night #95 GoldenGate 26ai の実装に迫る1
oracle4engineer
PRO
0
150
Karate+Database RiderによるAPI自動テスト導入工数をCline+GitLab MCPを使って2割削減を目指す! / 20251206 Kazuki Takahashi
shift_evolve
PRO
1
460
21st ACRi Webinar - Univ of Tokyo Presentation Slide (Ayumi Ohno)
nao_sumikawa
0
120
日本Rubyの会の構造と実行とあと何か / hokurikurk01
takahashim
4
910
生成AI時代の自動E2Eテスト運用とPlaywright実践知_引持力哉
legalontechnologies
PRO
0
210
計算機科学をRubyと歩む 〜DFA型正規表現エンジンをつくる~
ydah
3
190
手動から自動へ、そしてその先へ
moritamasami
0
280
EM歴1年10ヶ月のぼくがぶち当たった苦悩とこれからへ向けて
maaaato
0
270
モダンデータスタック (MDS) の話とデータ分析が起こすビジネス変革
sutotakeshi
0
410
AI 駆動開発勉強会 フロントエンド支部 #1 w/あずもば
1ftseabass
PRO
0
160
エンジニアとPMのドメイン知識の溝をなくす、 AIネイティブな開発プロセス
applism118
4
780
Featured
See All Featured
Code Review Best Practice
trishagee
74
19k
Being A Developer After 40
akosma
91
590k
A designer walks into a library…
pauljervisheath
210
24k
GitHub's CSS Performance
jonrohan
1032
470k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
253
22k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.6k
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
GraphQLとの向き合い方2022年版
quramy
50
14k
Making Projects Easy
brettharned
120
6.5k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
970
[RailsConf 2023] Rails as a piece of cake
palkan
58
6.1k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.1k
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!
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠