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
PHPer向けWebアプリケーションのパフォーマンスチューニング入門 / web perfo...
Search
yugo
July 14, 2018
Technology
1
2.9k
PHPer向けWebアプリケーションのパフォーマンスチューニング入門 / web performance tuning
PHPカンファレンス関西2018で発表した登壇資料です。
yugo
July 14, 2018
Tweet
Share
Other Decks in Technology
See All in Technology
OCI Security サービス 概要
oracle4engineer
PRO
0
6.5k
BLADE: An Attempt to Automate Penetration Testing Using Autonomous AI Agents
bbrbbq
0
290
DMARC 対応の話 - MIXI CTO オフィスアワー #04
bbqallstars
1
160
Lexical Analysis
shigashiyama
1
150
安心してください、日本語使えますよ―Ubuntu日本語Remix提供休止に寄せて― 2024-11-17
nobutomurata
0
980
CysharpのOSS群から見るModern C#の現在地
neuecc
1
3.1k
AWS Lambdaと歩んだ“サーバーレス”と今後 #lambda_10years
yoshidashingo
1
170
iOS/Androidで同じUI体験をネ イティブで作成する際に気をつ けたい落とし穴
fumiyasac0921
1
110
ノーコードデータ分析ツールで体験する時系列データ分析超入門
negi111111
0
410
ISUCONに強くなるかもしれない日々の過ごしかた/Findy ISUCON 2024-11-14
fujiwara3
8
860
信頼性に挑む中で拡張できる・得られる1人のスキルセットとは?
ken5scal
2
530
VideoMamba: State Space Model for Efficient Video Understanding
chou500
0
190
Featured
See All Featured
Making Projects Easy
brettharned
115
5.9k
A better future with KSS
kneath
238
17k
Teambox: Starting and Learning
jrom
133
8.8k
For a Future-Friendly Web
brad_frost
175
9.4k
How GitHub (no longer) Works
holman
310
140k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.1k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
[RailsConf 2023] Rails as a piece of cake
palkan
52
4.9k
RailsConf 2023
tenderlove
29
900
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
44
2.2k
Writing Fast Ruby
sferik
627
61k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
42
9.2k
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!
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠