Sashaã¯ãèªåã§éçºãããã®ãå«ããã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãåæããããã®æ¹æ³ãšããŒã«ã«ã€ããŠèªã£ãŠããŸãã
ãã®èšäºã¯ãDotNext 2017 Piterã«ã³ãã¡ã¬ã³ã¹ã§ã®ãµãŒã·ã£ã®ã¹ããŒãã«åºã¥ããŠããŸãã Sashaã¯ãã€ã¹ã©ãšã«ã®ãã¬ãŒãã³ã°ããã³ã³ã³ãµã«ãã£ã³ã°äŒç€ŸSelaã®ãã¯ãã«ã«ãã£ã¬ã¯ã¿ãŒãšããŠåããŠãããããã©ãŒãã³ã¹åæã®å®æœæ¹æ³ãçŽæ¥ç¥ã£ãŠããŸãã çµäºãããããè¯ãæ¹æ³ãã©ã®ããŒã«ã䜿çšããã¹ãããã©ã®ããŒã«ãé¿ããã¹ãããã«ããã®äžã§èªãã§ãã ããã
ããã©ãŒãã³ã¹åæïŒæ®µéçãªèšç»
ããã©ãŒãã³ã¹åæãã¬ãŒã ã¯ãŒã¯ããå§ããŸãããã 次ã®èšç»ã¯ãéçºè ãã·ã¹ãã 管çè ãæè¡å°é家ã«ãã£ãŠäœ¿çšãããŸãã
- åé¡ã®èª¬æãååŸããŸãã ããã¯å®éãããç°¡åã«èãããŸãããªããªããå€ãã®å Žåã顧客ã¯åé¡ãéåžžã«äžååã«ãã説æããªãããã§ãã
- ã·ã¹ãã å³ã®äœæã ããã«ãããåé¡ãã©ã®éšåã§æ§æãããŠããããèªèã§ããŸãã
- ã¯ã€ãã¯ããã©ãŒãã³ã¹ãã§ãã¯ã ããã«ãããã·ã¹ãã ã§äœãæ©èœããŠããããäœãéè² è·ã«ãªã£ãŠããããªã©ãç解ã§ããŸãã
- åé¡ã®åå ãšãªã£ãŠããã³ã³ããŒãã³ããç解ããã ãã®æ®µéã§ã¯ãåé¡ãäœã§ãããã¯ãŸã ããããŸãããããããã©ãã«ãããã¯ãã§ã«ããã£ãŠããã®ã§ããã§ã«é²æ©ããŠããŸãã
- 詳现ãªåæã ãã®æ®µéã§ã¯ãæãæéãããããŸãã
- åé¡ã®æ ¹æ¬ãèŠã€ããã
- åé¡ãä¿®æ£ããŸãã
- æ€èšŒ ãã®æ®µéã§ãåé¡ãä¿®æ£ãããã·ã¹ãã ãæ£åžžã«æ©èœããŠãããã©ããã確èªããå¿ èŠããããŸãã
- åæããã»ã¹å šäœã®ææžåã ããã¯ãããªããäœãããããã©ã®ããŒã«ãããªãã«ãšã£ãŠããŸããã£ããããããŠã©ããããŸããããªãã£ãããæ£ç¢ºã«ç¥ãããã«å¿ èŠã§ãã ããã«ãããå°æ¥åãééããç¹°ãè¿ããªãããã«ããããšãã§ããŸãã
åé¡ã®èª¬æïŒãªããããå ¥æããã®ããããªã«é£ããã®ã§ããïŒ
ã¯ã©ã€ã¢ã³ãããåé¡ã®æ£ç¢ºãªèª¬æãååŸããããšã¯ãäžèŠæããããããã¯ããã«å°é£ã§ãã
ã¯ã©ã€ã¢ã³ãã¯æ¬¡ã®ãããªåé¡ã«å¯ŸåŠã§ããŸãã
ãã¢ããªã±ãŒã·ã§ã³ã®åäœãé ãããã ãŠãŒã¶ãŒã¯ããããã€èµ·ããããæ£ç¢ºã«èšãããšã¯ã§ããŸããããããã¯æªãããšã§ãã èŠããŸããïŒã
ãŸãã¯
ãçç£æ§ãåäžãããããã®äœæ¥äºç®ããããŸããäœæ¥ç°å¢ãèŠãŠã2æ¥éåé¡ãèŠã€ããããšãã§ããŸããïŒã
ãã¡ãããè©Šãããšã¯ã§ããŸãããå²ãåœãŠãããäºç®ãéåžžã«æå¹ã«äœ¿çšããããšã¯ã»ãšãã©ãããŸããã ããæ£ç¢ºã«å®åŒåãããåé¡ã¯ã次ã®ããã«ãªããŸãã
ãåå4æ25åããã95ïŒ ã®ã±ãŒã¹ã§ASP.NETãµã€ãã«ã¢ã¯ã»ã¹ãããšã1400ããªç§ã®é 延ãèŠãããŸãïŒéåžžã®å¿çæéã¯60ããªç§ã§ãïŒã é 延ã¯å°ççãªå Žæã«é¢ä¿ãªã芳å¯ããã軜æžãããŸããã èªåã¹ã±ãŒãªã³ã°ãæå¹ã«ããŸããããããã¯åœ¹ã«ç«ã¡ãŸããã§ãããã
ãã®ãããªåé¡ã®èª¬æã¯ãçç¶ãèŠãŠãã©ããèŠãã¹ãããç解ããåé¡ã®è§£æ±ºçãšèãããããã®ïŒé 延ã60ããªç§ã«ççž®ïŒãç解ããŠããããããã§ã«ã¯ããã«æ£ç¢ºã§ãã
ã¯ã©ã€ã¢ã³ãã«å¿ èŠãªãã®ãæ£ç¢ºã«èŠã€ããããšã¯ãäžèŠæããããããã¯ããã«é£ããå ŽåããããŸãã
åäŒæ¥ã«ã¯ç¬èªã®ããã©ãŒãã³ã¹èŠä»¶ããããŸãããæ®å¿µãªããåžžã«çå®ãããŠããããã§ã¯ãããŸããã ããšãã°ã次ã®ããã«ãªããŸãã
- ãã¹ãŠã®ãã«ããã¹ããªã¯ãšã¹ãã®90ïŒ
ã¯ã200ããªç§ä»¥å
ã«å®äºããå¿
èŠããããŸãã
- å
šæãªã¯ãšã¹ãã®99ïŒ
ã¯600ããªç§ä»¥å
ã«å®äºããå¿
èŠããããŸãã
- ãã¹ãŠã®ãã«ããã¹ãã¯ãšãªã®100ïŒ
ã¯ã2000ããªç§ä»¥å
ã«å®äºããå¿
èŠããããŸãã
ãã®ãããªèŠä»¶ãååšããå Žåãã·ã¹ãã ããããã®ã³ã³ãã©ã€ã¢ã³ã¹ããã¹ãããåé¡ã解決ããæ¹æ³ãç解ããã ãã§ãã ãã ããèŠä»¶ã¯ã©ãããã§ãæ¥ããã®ã§ã¯ãªããåžžã«ããžãã¹ç®æšãšäžèŽããŠããå¿ èŠãããããšãç解ããããšãéèŠã§ãã èŠä»¶ãæ確ã«å®çŸ©ãããŠãããããAPMãœãªã¥ãŒã·ã§ã³ãŸãã¯ãã®ä»ã®æ¹æ³ã§ãã€ã§ãçµ±èšã远跡ããäœãåé¡ãçºçããå Žåã«éç¥ãåãåãããšãã§ããŸãã
ã¢ã³ããã¿ãŒã³ïŒåæãå¿ èŠãªãæ¹æ³
çµæãçæããåæã¡ãœããã«é£ã³èŸŒãåã«ãåé¡ãã©ã®ããã«åæãã¹ãã§ãªããã«ã€ããŠå°ãã話ããããšæããŸãã ãããã£ãŠã絶察ã«ãã¹ãã§ã¯ãããŸããïŒ
- ä»®å®ãç«ãŠãŸãã
- ãæ¬èœããšäžæ¡çãªä¿¡å¿µãä¿¡é Œããã
- èŠã€ããããå Žæã§ã®ã¿åé¡ã®è§£æ±ºçãæ¢ããŠãã ããïŒãã®åäœã¯ãè¡ç¯å¹æããšãåŒã°ããŸãã圌ã¯ãçŽå€±ããå Žæã§ã¯ãªããæããå Žæã§éµãæ¢ããæåãªãžã§ãŒã¯ã®é
ã£ã±ããã«ãã£ãŠç€ºãããŸããïŒã
- ã©ã³ãã ããŒã«ã䜿çšããŸãã
- 責任ãããŒã«ã«ç§»ããŸãã
å®äºããªãã£ãåæã®å€±æäŸã1ã€æããŸãã ç§ã®ä»äºã¯ããããžã§ã¯ã管çã·ã¹ãã ã§ããã¥ã¡ã³ããä¿åããã³ããŒããããšãã«ãã¯ã©ã€ã¢ã³ããå€§å¹ ãªé 延ã«ééããããšãããçç±ãç解ããããšã§ããã ã·ã¹ãã ã¯ãããŒã«ã«ãããã¯ãŒã¯äžã®SMBãä»ããŠNetAppã«æ¥ç¶ãããŸãããç§ã®ã¿ã¹ã¯ã¯ãããŒã¿ãŠã§ã¢ããŠã¹ãæäœãããšãã«çºçããå¯èœæ§ã®ãããããã¯ãŒã¯ã¬ã€ãã³ã·ãšã¬ã€ãã³ã·ãèŠã€ããããšã§ããã
WCFãšã¢ããªã±ãŒã·ã§ã³ãµãŒããŒã®ããã©ãŒãã³ã¹ãç£èŠããããŒã«ãããããããã¯ãŒã¯ãã©ãã£ãã¯ã®ã¹ããã¡ãŒããããŸããããNetAppã¹ãã¬ãŒãžã·ã¹ãã ã«ã¢ã¯ã»ã¹ã§ããŸããã§ããã äžé£ã®ãã¹ãã®åŸãå¹³åå¿çé床ã¯11ããªç§ã§ããããšãããããŸãããã24æé以å ã«1200ããªç§ã®é 延ãçºçããå ŽåããããŸããã NetAppã§äœãèµ·ãã£ãŠããã®ãã«ã€ããŠååãªæ å ±ãæã£ãŠããªãã£ããããããã©ãŒãã³ã¹ãã¹ãããŒã¿ãååŸããå¿ èŠããããŸããã
ã¯ã©ã€ã¢ã³ããããã¹ãã¬ãŒãžã·ã¹ãã ã®å¿çé床ã5ããªç§æªæºã«ãªããªããšããæ å ±ã®ã¿ãååŸããããšãã§ããŸããã ãã®å³ãäœã§ãããã«ã€ããŠã®ç§ã®è³ªåã«ïŒå¹³åãŸãã¯ããŒã¯é 延ãç§ã¯çããåŸãŸããïŒ ããã¯60ç§éã®æ倧平åå€ã§ãã ç§ã¯ãŸã ãã®äŸ¡å€ãäœã§ããããç¥ããŸããããããŠããªããããªããç¥ããªãã®ã ãšä¿¡ããŠããŸãã 圌ã¯æ¯ç§å¹³åå€ããšã£ãŠãããã¹ãŠã®å¹³åããæ倧å€ããšããããããã¯æ¯ç§æ倧å€ããšã£ãŠããæ倧å€ããšã£ãŠ...
ãã®åŸããã®ã¹ãã¬ãŒãžã·ã¹ãã ã§æå¹ãšèŠãªãããNetAppããã©ãŒãã³ã¹ã«ãŠã³ã¿ãŒã®ããã¥ã¡ã³ããèŠã€ããŸããã ããã¯ãæ¯åã§ã¯ãªããæ¯ç§ã®å¹³åããŒã¿ã§ãã ã¯ã©ã€ã¢ã³ãã«ãã®ããŒã¿ãæäŸããããã«äŸé ŒããŸããããæåŠãããŸããã åæãå®è¡ãããã®è©Šã¿ã¯çµäºããŸããã
ç§ã«ãšã£ãŠãããã¯ããã©ãŒãã³ã¹åæãå®è¡ã§ããªãå žåçãªã±ãŒã¹ã§ãã ã§ããã ãå€ãã®æ å ±ãååŸããããã«æåãå°œããã ä»®å®ã«é Œããªãã£ãããã¯ã©ã€ã¢ã³ããšã®ç解äžè¶³ã®ããæåããªãã£ãã ãããŠãããã¯ä»®å®ãšäžæ¡çãªä¿¡å¿µã«é Œãããšãã§ããªãçç±ã®è¯ãäŸã§ãã
次ã«ãããŒã«ã®äœ¿çšã®å€±æã«ã€ããŠã
å°é家ã¯ãé«äŸ¡ãªããŒã«ãè³Œå ¥ããå Žåããã¹ãŠã®åæãªãã·ã§ã³ã«äœ¿çšããå¿ èŠããããšèããå ŽåããããŸãã åæã«ééã£ãããŒã«ã䜿çšããå žåçãªäŸãæããŸãã
CPUãã§ããã¢ãŒãã§Visual Studioãããã¡ã€ãªã³ã°ããŒã«ãå®è¡ããŠãæ€çŽ¢ããããã®ããã©ãŒãã³ã¹ããã¹ãããŸãã ããããã¯ãããã»ããµãããŒãããªãããã€ãã®ããšãå®è¡ã§ããŸãããã®ãããªãã¹ããå®æœãããšã次ã®ãããªçµæãåŸãããŸãã
ãã®ã¡ãœããã¯ã¢ããªã±ãŒã·ã§ã³ã®é床ãäœäžããããããSystem.Console.WriteLineã®ããã©ãŒãã³ã¹ãæ¹åããå¿ èŠãããããšã«ãªããŸãã ãã ããæ€çŽ¢ããããã¯åã«ãããã¯ãŒã¯ããŒã¿ã®å°çãåŸ ã€ããšãã§ããããã¯ããã»ããµã«æ¥ç¶ãããŠããŸããã ãããã£ãŠããè³Œå ¥ãããããšãã£ãŠããã®äŸ¡å€ãåãæ»ãå¿ èŠãããããšããååã«åºã¥ããŠåæçšã®ããŒã«ãéžæããããšã¯ã§ããŸããã
åé¡ã®åå ãèŠã€ããïŒUSEã¡ãœãã
äœãæ¢ãã¹ããããããªãããšããããŸãããã®å Žåãäžçäžã®ãšã³ãžãã¢ããã䜿çšããæ¹æ³è«ãææ¡ããŸãã ããã¯USEïŒUtilizationãSaturationãErrorsïŒã¡ãœããã§ãããããã€ãã®æ®µéã§æ©èœããŸãã
- æåã«ããã¹ãŠã®ããŒããŠã§ã¢ããã³ãœãããŠã§ã¢ãªãœãŒã¹ãšãããã®éã®æ¥ç¶ãå«ãã·ã¹ãã ã®å³ãäœæããå¿ èŠããããŸãã
- 次ã«ãåãªãœãŒã¹ããã³åæ¥ç¶ã«ã€ããŠã3ã€ã®ãã©ã¡ãŒã¿ãŒãå®çŸ©ããå¿ èŠããããŸãã䜿çšç-䜿çšïŒããŒãããããªãœãŒã¹ã®éïŒã飜å-飜åïŒãã®ãªãœãŒã¹ã䜿çšããããã®ãã¥ãŒããããŸãïŒããã³ãšã©ãŒ-ãšã©ãŒãçºçããå Žåã
- åé¡ããã©ã¡ãŒã¿ãŒã«é¢é£ä»ããããŠããå Žåã¯ã解決ããå¿ èŠããããŸãã
ããŒããŠã§ã¢ããã³ãœãããŠã§ã¢ãªãœãŒã¹ã®USEã¡ãœããã¯æ¬¡ã®ããã«ãªããŸãã
å šäœåãææ¡ããããã«ãåã³ã³ããŒãã³ããäœç³»çã«ãã¹ãããããã®ãã§ãã¯ãªã¹ããçšæããå¿ èŠããããŸãã
Windowsã·ã¹ãã ã®ãã§ãã¯ãªã¹ãã¯æ¬¡ã®ããã«ãªããŸãã
æå
| çš®é¡
| åæããŒã«ãŸãã¯è¿œè·¡ãã©ã¡ãŒã¿
|
| | ããã»ããµïŒ_TotalïŒ\ïŒ
ProcessorTimeãïŒ
User Time ProcessïŒMy AppïŒ\ïŒ
ProcessorTime
|
| | ã·ã¹ãã \ããã»ããµãã¥ãŒã®é·ã
|
| | Intelããã»ããµèšºæããŒã«ïŒããã³ãã®ä»ïŒ
|
| | ã¡ã¢ãª\å©çšå¯èœãªMãã€ã
ããã»ã¹\ä»®æ³ãµã€ãºããã©ã€ããŒããã€ããã¯ãŒãã³ã°ã»ãã .NET CLRã¡ã¢ãª\ãã¹ãŠã®ããŒãå ã®ãã€ãæ° VMMapãRAMMap |
| | ã¡ã¢ãª\ããŒãž/ç§
|
| | Windowsã¡ã¢ãªèšºæãŠãŒãã£ãªãã£ïŒããã³ãã®ä»ïŒ
|
| | ãããã¯ãŒã¯ã€ã³ã¿ãŒãã§ã€ã¹\åä¿¡ãã€ãæ°/ç§ãéä¿¡ãã€ãæ°/ç§
|
| | ãããã¯ãŒã¯ã€ã³ã¿ãŒãã§ã€ã¹\åºåãã¥ãŒã®é·ããéä¿¡ãã±ããã®ç Žæ£ãåä¿¡ãã±ããã®ç Žæ£
|
| | ãããã¯ãŒã¯ã€ã³ã¿ãŒãã§ã€ã¹\ãã±ããã¢ãŠãããŠã³ããšã©ãŒããã±ããåä¿¡ãšã©ãŒ
|
| | ç©çãã£ã¹ã¯\ïŒ
ãã£ã¹ã¯æéãïŒ
ã¢ã€ãã«æéããã£ã¹ã¯ã¬ãã/ç§ããã£ã¹ã¯æžã蟌ã¿/ç§
|
| | ç©çãã£ã¹ã¯\çŸåšã®ãã£ã¹ã¯ãã¥ãŒã®é·ã
|
| | ChkdiskïŒããã³ãã®ä»ã®ããŒã«ïŒ
|
| | .NET CLRäŸå€\ã¹ããŒãããäŸå€ã®æ°/ç§
ASP.Net \ãšã©ãŒã€ãã³ããçºçããŸãã |
ãã®ããŒã¿ã®ã»ãšãã©ã¯ãçµã¿èŸŒã¿ã®Windowsããã©ãŒãã³ã¹ã«ãŠã³ã¿ãŒã䜿çšããŠååŸã§ããŸãã ãã®ãã¹ãã¯éåžžã«è¿ éã«å®è¡ã§ããŸãããæéãå€§å¹ ã«ç¯çŽããèŠã€ãã£ãåé¡ã®åæã«éäžã§ããŸãã
ãã®ããã»ã¹ãèªååããã«ã¯ãããŸããŸãªãœãªã¥ãŒã·ã§ã³ã䜿çšã§ããŸãã
- Windowsã·ã¹ãã ã¢ãã¿ãŒïŒPerfmonïŒ-ããã©ãŒãã³ã¹ã«ãŠã³ã¿ãŒã®ãã°ãåžžã«åéã§ããããç¹å®ã®æ¡ä»¶ãæºããããå Žåã®ã¿åéã§ããŸãã
- Typeperf-ãŠãŒã¶ãŒãæå®ããããã©ãŒãã³ã¹ã«ãŠã³ã¿ãŒã®å€ã䜿çšããŠCSVãã¡ã€ã«ãæ¯ç§çæããæ¹æ³ãç¥ã£ãŠããŸãã
- ãµãŒãããŒãã£ã®ãœãªã¥ãŒã·ã§ã³ã ããšãã°ãã¯ã©ãŠããœãªã¥ãŒã·ã§ã³ã䜿çšããŠããå Žåã¯ããããã€ããŒãããŒã«ãžã®ã¢ã¯ã»ã¹ãæäŸããŠãããã»ããµããã£ã¹ã¯ããããã¯ãŒã¯ã¢ã¯ãã£ããã£ãªã©ã®ã¢ã¯ãã£ããã£ãç£èŠããå¿
èŠããããŸãã
ããã©ãŒãã³ã¹åæïŒäœ¿çšããããŒã«
ããã©ãŒãã³ã¹åæããŒã«ã¯ã次ã®3ã€ã®ã«ããŽãªã«åé¡ã§ããŸãã
- ãããçºçããé »åºŠãå€æããã®ã«åœ¹ç«ã€ãã®ïŒã«ãŠã³ãïŒã ããšãã°ã1ç§ãããã®ãªã¯ãšã¹ãæ°
- ã©ãã ãæéããããããå€æããã®ã«åœ¹ç«ã€ãã®ïŒã¿ã€ã ã¢ãŠãïŒã ããšãã°ãASP.NETãªã¯ãšã¹ãã«ãããæéããŠã£ã³ããŠéã®åãæ¿ãã«ãããæéãªã©ã
- ãããèµ·ãã£ãŠããçç±ãå€æããã®ã«åœ¹ç«ã€ãã®ïŒã¹ã¿ãã¯ïŒã ããšãã°ãã¢ããªã±ãŒã·ã§ã³ã®ãœãŒã¹ã³ãŒãã§ç¹å®ã®æ¡ä»¶ãçºçããå Žå
ååãšããŠãæåã®ã«ããŽãªã®ããŒã«ã¯å°ããªãªãŒããŒããããäžããŸãããåŸ æ©æéã決å®ããããã«ããŒã«ã䜿çšããå Žåãããã¯é·ããªãã3çªç®ã®ã«ããŽãªã®è³éã¯å€§ããªãªãŒããŒãããã«ã€ãªãããŸãã åŸè ã¯ããå€ãã®æ å ±ãæäŸãããããããã¯é©ãããšã§ã¯ãããŸããã
ããŒã«ãéžæãããšãã¯ã次ã®5ã€ã®ç¹ã«æ³šæããããšãéèŠã§ãã
- å°ããªãªãŒããŒããã
- 粟床ïŒçµæãã©ãã ãä¿¡é Œã§ãããïŒ
- è¿
éãªçµæïŒããŒã¿ãåæããã®ã«äœæéãåŸ
ã€å¿
èŠããªãå ŽåïŒ
- 䟵ç¥æ§ïŒå®è¡äžã®ã·ã¹ãã ã§å®è¡ããæ©èœïŒ
- ç¹å®ã®é åïŒã¯ã©ã¹ãæ©èœãªã©ïŒã«çŠç¹ãåãããèœå
ãªãŒããŒããããèŠããŠãããŠãã ããïŒ
芳å¯ã¯ã·ã¹ãã ã®ç¶æ ã«åœ±é¿ãäžããå¯èœæ§ããããŸãããäžéšã®ããŒã«ã¯ä»ã®ããŒã«ããã匷åã§ãã ãããã£ãŠãããŒã«ã䜿çšããåã«ãããã¥ã¡ã³ããåç §ããããšããå§ãããŸãã ååãšããŠãããŒã«ã®äœ¿çšããæåŸ ã§ããããšã瀺ããŸãïŒããšãã°ãç¹å®ã®ç¶æ³ã§ããã»ããµã®è² è·ã5ã10ïŒ å¢å ãããªã©ïŒã
䜿çšããããŒã«ã®ããã¥ã¡ã³ãã§ãªãŒããŒãããã«ã€ããŠäœã説æãããŠããªãå Žåã¯ãèªåã§ãã¹ãããå¿ èŠããããŸãã ããã¯ãã¹ãã·ã¹ãã ã§å®è¡ããããã©ãŒãã³ã¹ã®äœäžã枬å®ããå¿ èŠããããŸãã
æ£ç¢ºæ§ïŒå®å šãªæ¡ä»¶ã®ç©èª
ããããJavaã§äœæ¥ããŠããªã人ã«ãšã£ãŠã¯ããã¯ãã¥ãŒã¹ã«ãªããŸãããéçºè ã䜿çšããJava Javaãããã¡ã€ã©ãŒã®ã»ãšãã©ã¯äžæ£ç¢ºãªããŒã¿ïŒVisualVMãjstackãYourKitãJProfilerãªã©ïŒãçæããŸãã ææžåãããJVMTI APIã§ããGetAllStackTracesã䜿çšããŸãã GetAllStackTracesé¢æ°ãåŒã³åºããšãã·ã¹ãã å ã®åã¹ã¬ãããå®è¡ãããµã³ãã«ãçæãããŸãã
ãã®äœ¿çšã®å©ç¹ã¯ã¯ãã¹ãã©ãããã©ãŒã ã§ãããé倧ãªæ¬ ç¹ããããŸãã ãã¹ãŠã®ã¹ã¬ãããå®å šãªç¶æ ã«ããå Žåã«ã®ã¿ãã¹ã¬ãããµã³ãã«ãååŸããŸãã ã€ãŸããã¹ã¿ãã¯ãã¬ãŒã¹ãèŠæ±ããå ŽåãçŸåšã®ç¬éããã§ã¯ãªããã¹ã¬ãããã¹ã¿ãã¯ãã¬ãŒã¹ã®è»¢éã決å®ããæç¹ããååŸããŸãã ãã®çµæãå®éã®ç¶æ³ãšã¯é¢ä¿ã®ãªãçµæãåŸãããŸãã
以äžã®ã¹ã¯ãªãŒã³ã·ã§ããã§ã¯ãJavaãããã¡ã€ã©ãŒã®ç²ŸåºŠã«é¢ããç§åŠã¬ããŒãã®ããŒã¿ãèŠãããšãã§ããŸãã
ã°ã©ãã§ã¯ãç¹å®ã®ãã³ãããŒã¯ã®ã©ã®ã¡ãœããããæãããããã§ãã£ããã«ã€ããŠã4ã€ã®ãããã¡ã€ã©ãŒã®ããŒã¿ãèŠãããšãã§ããŸãã 4ã€ã®ãããã¡ã€ã©ãŒã®ãã¡2ã€ïŒå·Šãšå³ïŒãjj_scan_tokenã¡ãœããã§ãããšå€æãã3ã€ç®ã®ãããã¡ã€ã©ãŒãgetPositionFromParentã¡ãœããã§ãããšå€æãã4ã€ç®ãDefaultNameStep.evaluateã§ãããšå€æããŸããã ã€ãŸãã4ã€ã®ãããã¡ã€ã©ãŒã¯ããŸã£ããç°ãªã枬å®å€ãšãŸã£ããç°ãªãæ¹æ³ãæäŸããŸããã ãããŠãããã§ã¯ãããã¡ã€ã©ãŒã§ã¯ãªããã¿ãŒã²ããããã»ã¹ããçµæãååŸããããã«äœ¿çšããAPIã§ãã
ãã®ãããæ°ããããŒã«ã䜿çšããŠããå Žåã¯ãããŸããŸãªæ¡ä»¶ïŒããã»ããµãã¢ã¯ãã£ãã«åäœããŠãããšããéæ¢ããŠãããšãããŸãã¯ãã£ã¹ã¯ããããŒã¿ãèªã¿åã£ãŠãããšãïŒã§å¿ ããã¹ãããå¿ èŠããããŸãã ãŸãããããã¡ã€ã©ãŒãæ£ããããŒã¿ãæäŸããŠããããšã確èªããŠããããªãŒããŒãããã確èªããå¿ èŠããããŸãã ããŒã¿ãæ£ãããªãå Žåããã®ãããã¡ã€ã©ãŒã¯ãã¡ãã䜿çšããªãã§ãã ããã
çµæïŒã©ããããæ©ãå ¥æã§ããŸããïŒ
ããã§ã¯ãLinuxã§.NET Coreããããã¡ã€ãªã³ã°ããæé ã®äŸã瀺ããŸãã
詳现ã«æ€èšããã®ã§ã¯ãªããããã€ãã®ãã€ã³ãã®ã¿ãåãäžããŸãã ãŸããç°å¢å€æ°ãæ§æããå¿ èŠããããŸããç°å¢å€æ°ã䜿çšãããšãããšãã°åé¡ãçºçããŸãã ããŠãããªãã¯ããããã£ããšããŸãããã ãããã®ãã¹ãŠã®æé ã®çµæãšããŠçæãããZIPãã¡ã€ã«ãååŸããŠãWindowsãã·ã³ã«ã³ããŒããPerfViewã䜿çšããŠéãå¿ èŠããããããæ瀺ã¯çµäºããŸãã ãããŠãããããŠåããŠããŒã¿ãåæã§ããŸãã ã°ãããŠãããã Linuxã§åæãå®è¡ããŠãããWindowsã§åæãéããŸã...
åãåé¡ã®ä»£æ¿ãœãªã¥ãŒã·ã§ã³ã次ã«ç€ºããŸãã ãããã®ã¹ã¯ãªããã¯ããŸãããŸãæ©èœããŸããããå°ãªããšãLinuxã§çµæãååŸããæ©èœãæäŸããŸãã
$ ./dotnet-mapgen.py generate 4118
$ ./dotnet-mapgen.py merge 4118
ïŒperf record -p 4118 -F 97 -g
ïŒperfã¹ã¯ãªãã| ./stackcollapse-perf.pl>ã¹ã¿ãã¯
$ ./flamegraph.pl stacks> stacks.svg
ãã®çµæããã¬ãŒã ã°ã©ããšåŒã°ããèŠèŠåãåŸãããŸãã Windowsããã³.NETã®å€ãã®éçºè ã¯ãŸã ããã«æ £ããŠããªããããããã«ã€ããŠè©³ãã説æããŸãã
ãã®æ¹æ³ã䜿çšãããšãããšãã°ãããã»ããµã®è² è·ãé«ããšãã«ã¢ããªã±ãŒã·ã§ã³ããã£ã¹ã¯ã«ã¢ã¯ã»ã¹ããå Žåãªã©ãããŸããŸãªã¹ã¿ãã¯ãã¬ãŒã¹ãèŠèŠåã§ããŸãã å€ãã®ç°ãªãã¹ã¿ãã¯ãããå Žåããã¬ãŒã ã°ã©ãã¯å€ãã®ããã¹ããèªã代ããã«ããããèŠèŠåããããã®è¯ãæ¹æ³ã§ãã ãã¬ãŒã ã°ã©ãã¯ãæ°åã®ã¹ã¿ãã¯ãã¬ãŒã¹ããŒãžã1ã€ã®ã€ã³ã¿ã©ã¯ãã£ããªã°ã©ãã«å€æããŸãã
ãã£ãŒãå ã®åé·æ¹åœ¢ã¯é¢æ°ã§ãã è²ã¯ã©ã³ãã ã«éžæããããããç¡èŠã§ããŸãã Y軞ã¯ã¹ã¿ãã¯ã®æ·±ãã§ããã€ãŸããããé¢æ°ãå¥ã®é¢æ°ãåŒã³åºããå Žåããã®é¢æ°ã¯ãã®äžã«é 眮ãããã°ã©ãã¯äžã«è¡šç€ºãããŸãã X軞ã¯ïŒæéã§ã¯ãªãïŒã¹ã¿ãã¯ããœãŒãããŸãã ãã®ãããªã¹ã±ãžã¥ãŒã«ãèšå®ãããšãé¢å¿ã®ããé åãæ£ç¢ºã«æ¡å€§ããããšãéåžžã«ç°¡åã«ãªããŸãã
䟵ç¥æ§ïŒå®³ãäžããªãæ¹æ³
äŸµå ¥åãããã¡ã€ã©ãŒã¯éããããããã·ã¹ãã ã®ããã©ãŒãã³ã¹ãä¿¡é Œæ§ãå¿çæ§ã«æªåœ±é¿ãäžããå¯èœæ§ããããŸãã ããšãã°ãã€ã³ã¹ãã«ã¡ã³ããŒã·ã§ã³ã¢ãŒãããã³IntelliTraceã§Visual Studioãããã¡ã€ã©ãŒã䜿çšãããšãã¢ããªã±ãŒã·ã§ã³ã¯åã³ã³ãã€ã«ãããè¿œå ã®ããŒã«ãŒã§èµ·åãããŸãã ãã®ãããªããŒã«ã¯ãå®çšŒåç°å¢ã§ã¯äœ¿çšã§ããŸããã
å¥ã®äŸã¯CLRãããã¡ã€ãªã³ã°APIã§ãããã¯äžéšã®ããŒã«ã§ãŸã 䜿çšãããŠããŸãã ããã¯ãã¿ãŒã²ããããã»ã¹ã§ã®DLLã®å®è£ ã«åºã¥ããŠããŸãã ããã¯éçºäžã«èš±å®¹ãããå ŽåããããŸãããå®çšŒåç°å¢ã§ã¯ãå®è¡äžã®ããã»ã¹ã«ã©ã€ãã©ãªãå°å ¥ããããšãåé¡ã«ãªãå ŽåããããŸãã
Linuxã®æ¥µç«¯ãªäŸã¯ãLinuxãã¬ãŒã¹ãã¬ãŒã ã¯ãŒã¯SystemTapãLTTngãããã³SysDigã§ãããã·ã¹ãã ã«ã«ã¹ã¿ã ã«ãŒãã«ã¢ãžã¥ãŒã«ãã€ã³ã¹ããŒã«ããå¿ èŠããããŸãã ã¯ãããããã®äººãä¿¡é Œã§ããŸãããããã©ãŒãã³ã¹æž¬å®ããŒã«ãå®è¡ããããã«ã«ãŒãã«ã«äœãæ°ãããã®ãããŒãããå¿ èŠãããããšã¯ãŸã å°ãçãããã§ãã
幞ããªããšã«ãWindowsã«ã¯ãèããããšããããããããªãããªã軜éã®ã€ãã³ããã¬ãŒã¹ïŒWindowsïŒãã¬ãŒã¹ãã¬ãŒã ã¯ãŒã¯ããããŸãã ãã®ãã¬ãŒã ã¯ãŒã¯ã䜿çšãããšãããã»ããµã®ãããã¡ã€ã«ãã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã®å Žæãã¢ããªã±ãŒã·ã§ã³ãã¢ã¯ã»ã¹ãããã¡ã€ã«ããã£ã¹ã¯ãžã®ã¢ã¯ã»ã¹å Žæãªã©ã決å®ã§ããŸãã
ããããETWã¯ããŸã䟵襲çã§ã¯ãªããšããäºå®ã«ãããããããETWããçµæãååŸããé床ãåé¡ã«ãªãå ŽåããããŸãã 以äžã«ãPerfViewã䜿çšããŠçæããããã°ãã¡ã€ã«ã®äŸã瀺ããŸãã
ã芧ã®ãšãããããã»ããµã®äœ¿çšç¶æ³ã«é¢ããæ å ±ã10ç§éåéããåèš15 MBã®ããŒã¿ãååŸãããŸããã ãããã£ãŠãã€ãã³ããã¬ãŒã¹ã䜿çšããŠã·ã¹ãã ãæ°æéãã¹ãã§ãããšã¯èããããŸãããããŒã¿éãå€ãããŸãã ããã«ãCLR Rundownãå®äºããã®ã«12.7ç§ãããããã®åŸããŒã¿ãå€æããŠéãã®ã«æéãããããŸããïŒæéãèµ€ã§åŒ·èª¿è¡šç€ºããŸããïŒã ã€ãŸãã10ç§ä»¥å ã«ããŒã¿ãåéããã«ã¯ã30åéãããŠããŒã¿ãåŠçããŠéãå¿ èŠããããŸãã
ããã¯ããªãè¯ãçµæãšèããããŠãããšããäºå®ã«ãããããããç§ã¯ãããããŸã奜ãã§ã¯ãããŸããã ãããã£ãŠãç§ãèªåã§æžããããŒã«ã«ã€ããŠã話ããããšæããŸãã
EtraceïŒhttps://github.com/goldshtn/etraceïŒã¯ãETWã®ãªãŒãã³ãœãŒã¹ã³ãã³ãã©ã€ã³ã€ã³ã¿ãŒãã§ã€ã¹ã§ãã ããªãã¯åœŒã«ããªããèŠããã€ãã³ããäŒããããšãã§ãã圌ã¯ãããã«ã€ããŠã®æ å ±ããªã¢ã«ã¿ã€ã ã§æäŸããŸãã ã€ãã³ããçºçãããšããã«ãã³ãã³ãã©ã€ã³ã§ç¢ºèªã§ããŸãã
> etrace --help
...
äŸïŒ
etrace --clr GC --event GC / AllocationTick
etrace-ã«ãŒãã«ããã»ã¹ãã¹ã¬ãããFileIOãFileIOInit --eventãã¡ã€ã«/äœæ
etrace --file trace.etl --stats
etrace --clr GC --event GC / Start --field PIDãTIDãçç±[12]ãã¿ã€ã
etrace --kernelããã»ã¹--eventããã»ã¹/ start --where ImageFileName = myapp
etrace --clr GC --event GC / Start --duration 60
etrace-ãã®ä»ã®Microsoft-Windows-Win32k --event QueuePostMessage
etrace --list CLRãã«ãŒãã«
ããšãã°ãetraceãéå§ããŠããGCã€ãã³ãã欲ããããšèšããŸãã ãã®ãããªã€ãã³ããçºçãããšããã«ããã®ã¿ã€ããçç±ãããã»ã¹ãªã©ã確èªããããšæããŸãã
ç§ãèªåã§æžããŠçŽ¹ä»ãããå¥ã®ããŒã«ã¯ã LiveStacksã§ãã ãŸããETWã«é¢é£ããŠããŸãã LiveStacksã¯ãèå³æ·±ãã€ãã³ãã®ã¹ã¿ãã¯ãã¬ãŒã¹ãåéããŸãïŒã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãããã»ããµã®è² è·ãã¢ããªã±ãŒã·ã§ã³ãã¢ã¯ã»ã¹ãããã¡ã€ã«ããã£ã¹ã¯ã«ã¢ã¯ã»ã¹ããå Žæãªã©ïŒã LiveStacksãšä»ã®åæ§ã®ããŒã«ã®äž»ãªéãã¯ããªã¢ã«ã¿ã€ã ã§ã®æ å ±ã®åºåã§ãã ã©ã®ããã»ã¹ãå®è¡ãããŠããããç¥ãããã«ãããŒã¿åŠçãå®äºãããŸã§åŸ ã€å¿ èŠã¯ãããŸããã
ããã©ã«ãã®ããã»ããµãããã¡ã€ãªã³ã°ã¢ãŒãã®äŸã次ã«ç€ºããŸãã LiveStacksã¯Visual Studioã§ããã»ã¹ã確èªããããã»ã¹å ã®ã³ãŒã«ã¹ã¿ãã¯ã衚瀺ããŸããããã¯ãCPUæéãæãæ¶è²»ããŸãã
å¥ã®äŸïŒã ã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã®éå§å Žæãç¹å®ã®ããã»ã¹ãŸãã¯ã·ã¹ãã å šäœã§ã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã«ã€ãªãã£ãã³ãŒã«ã¹ã¿ãã¯ã衚瀺 ãã¯ãšãªã§ãLiveStacksã¯ãªã¢ã«ã¿ã€ã ã§ã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãè¡ãããå Žæã«é¢ããæ å ±ãã³ãŒã«ã¹ã¿ãã¯ã«æäŸããŸãã
çµæãããLiveStacksã¯ãã³ã³ãœãŒã«ã«è¡šç€ºãããåŒã³åºãã¹ã¿ãã¯ãèŠèŠåããããšã«ããããã¬ãŒã ã°ã©ããçæã§ããŸãã
> LiveStacks -P JackCompiler -f> stacks.txt
ËC
> perl flamegraph.pl stacks.txt> stacks.svg
ãããã®ããŒã«ã䜿çšãããšãããŒã¿åŠçãåŸ ããã«çµæããã°ããååŸã§ããããã§ãã
å¹æçãªèšè£ ã®ããã®ã·ã¹ãã ãæ§ç¯ããæ¹æ³
æ°ãããããžã§ã¯ãã®ã·ã¹ãã ãã©ã€ãã©ãªãã¢ãŒããã¯ãã£ãæ§ç¯ãããšããå°æ¥ã®ããã©ãŒãã³ã¹åæãç°¡çŽ åããããã€ãã®ããšãäºåã«èæ ®ããå¿ èŠããããŸãã
- èå³æ·±ãã€ãã³ãïŒãã£ã¹ã¯ã¢ã¯ã»ã¹ãã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãªã©ïŒã®åŒã³åºãã¹ã¿ãã¯ãç°¡åã«ååŸã§ããããšã確èªããŠãã ããã
- éçã³ãŒãã€ã³ã¹ãã«ã¡ã³ããŒã·ã§ã³ïŒãã¬ãŒã¹ãã€ã³ãïŒãå®è£
ããŠãããã»ã¹ã«é¢ãããªã¢ã«ã¿ã€ã æ
å ±ãååŸã§ããããã«ããŸãã
- éèŠãªããã»ã¹ã¯ããªãŒããŒããããªãã§ãã·ã¹ãã ãåèµ·åããããšãªããåã«ãã°ã¬ãã«ã§èšå®ããããšã§æå¹ã«ã§ããããšã確èªããŠãã ããã
- åçã€ã³ã¹ãã«ã¡ã³ããŒã·ã§ã³ã®ãããã°ãã€ã³ãïŒãããŒãïŒãè¿œå ããŸãã
- ããã©ãŒãã³ã¹åæãå®è¡ãã人ãã·ã¹ãã ã®åäœãç解ããã®ã«äœåãªæéãè²»ããå¿
èŠããªãããã«ãäŸãšããã¥ã¡ã³ããã¡ã€ã«ãäœæããŸãã
éåžžã«åªããã€ã³ã¹ãã«ã¡ã³ããŒã·ã§ã³ãåãããµã³ãã«ãããžã§ã¯ãã¯ãWindowsäžã®.NETã§ããã10幎以äžã«ããã£ãŠå€ãã®äººã ã«äœ¿çšãããŠããŸãã äžã§è©±ããETWã€ãã³ãããããŸããèå³æ·±ãã€ãã³ãã®åŒã³åºãã¹ã¿ãã¯ããã£ããã£ããããããé¢æ°åã«å€æããæ©äŒããããŸãã ãããŠããããã¯ãã¹ãŠããã©ã«ãã§å«ãŸããŠããŸãïŒ
ãã®ãããªèšæž¬ããŒã«ã䜿çšããŠãããžã§ã¯ããäœæããããšã¯ç°¡åã§ã¯ãããŸããã ããšãã°ãLinuxçšã®.NET Core 2.0ãèŠããšããã¹ãŠãããã»ã©ãã©è²ã§ã¯ãããŸããã Linuxã«ã¯ããã©ãŒãã³ã¹ãåæããããã®åªããããŒã«ããªãããã§ã¯ãªãããããã¡ã€ã«ãšãããã°ãç°¡åãªãã©ãããã©ãŒã ãæ§ç¯ããã®ã¯ããªãé£ããããã§ãã
Linuxçšã®.NET Core 1.0ã®äœãåé¡ãªã®ãç¥ãããã§ããïŒ ãã©ãããã©ãŒã ã«ã¯ã€ãã³ãããããŸãããã³ãŒã«ã¹ã¿ãã¯ãååŸããããšã¯ã§ããŸãããã€ãã³ããçºçããããšããããããŸããïŒæ å ±éãå°ãªãïŒã å¥ã®äŸïŒåŒã³åºãã¹ã¿ãã¯ãå€æããŠé¢æ°åãååŸããã«ã¯ãå€ãã®æºåæé ãå®è¡ããå¿ èŠããããŸãã ãã®ãããããã¥ã¡ã³ãã§ã¯ãZIPãã¡ã€ã«ãWindowsã§éãããšãæšå¥šããŠããŸãïŒãã®äŸãäžèšã«ç€ºããŸããïŒã
åªå äºé ããã¹ãŠã§ãã ããã©ãŒãã³ã¹åæãå®è¡ããèœåãéçºäžã®ã·ã¹ãã ã«ãšã£ãŠéèŠãªèŠä»¶ã§ãããšèããå Žåããã®ãããªãã®ããªãªãŒã¹ããããšã¯ãããŸããã ãã¡ãããããã¯ç§ã®èŠè§£ã§ãã
çµ±èšã«æ³šæããŠãã ããïŒ
çµ±èšãšããŒã«ã¯ãã°ãã°ç§ãã¡ã欺ããŸãã ãã®ç¹ã§çæãã¹ãç¹ãããã€ããããŸãã
- å¹³åå€ã¯ç¡æå³ã§ãã
- äžå€®å€ã¯ç¡æå³ã§ãã
- ããŒã»ã³ã¿ã€ã«ãšååžã¯ãäœãããŠããããæ£ç¢ºã«ç¥ã£ãŠããå Žåã«ã®ã¿åœ¹ç«ã¡ãŸãã
- ããŒã¿ã«é©åãªèŠèŠåã䜿çšããŸãã
- å調çãªè±èœã®çŸè±¡ã«æ³šæããŠãã ããã
ããšãã°ã誰ãããå¹³åã·ã¹ãã å¿çæéã¯29ããªç§ã ããšèšããŸãã ããã¯ã©ãããæå³ã§ããïŒ ããšãã°ãå¹³åå¿çæéã29ããªç§ã®å Žåãææªã®å€ã¯50ããªç§ãŸãã¯60ããªç§ã§ãããæé«ã¯ãŒãã«è¿ããšããäºå®ã§ãã ãŸãã¯ãã»ãšãã©ã®å Žåãå¿çæéã¯10ããªç§ã§ãããã·ã¹ãã ã®åäœãéåžžã«é ããªãã¢ãŒãïŒå¿çæéã¯æ倧250ããªç§ïŒããããå¹³åå€ã29ããªç§ã§ãã
å¹³åå¿çæéãåãã§ããããã2ã€ã®ã±ãŒã¹ã瀺ã2ã€ã®ã°ã©ãã¯ããŸã£ããç°ãªãããšãããããŸãã äœãèµ·ãã£ãŠããã®ããå®éã«ææ¡ããã«ã¯ãæ°åãèŠãã ãã§ã¯äžååã§ãå®éã®ååžã調ã¹ãå¿ èŠããããŸãã
ãŠã§ãã§èŠã€ããçŽ æŽãããç 究ããããŸãã èŠçŽçµ±èšã®ã¿ãä¿¡é Œã§ããªãçç±ã瀺ããŠãããåžžã«ããŒã¿ãèŠèŠåããå¿ èŠããããŸãã
èè ã¯ãåãèŠçŽçµ±èšéïŒåãå¹³åx / yã1ã€ã®æšæºåå·®x / yãåãçžäºçžé¢ïŒã§13ã®ããŒã¿ã»ãããèŠèŠåããŸããã ãã ãããããã®ããŒã¿ã»ããã¯ãŸã£ããç°ãªã£ãŠèŠããŸãã ã€ãŸããæ°åã ããèŠããšãäœã®æå³ããããŸããã æ°åã ããèŠããšãããŒã¿ã®ããã©ãŒã ãã¯èŠããŸããã
BenchmarkDotNetã¯ãå€ãã®äººã䜿çšããã©ã€ãã©ãªã§ãã ããã¯åã«è±ªè¯ã§ãããããŒã¿ã®ã圢ç¶ãã衚瀺ããŸããïŒå°ãªããšãããã©ã«ãã§ã¯ïŒã ã³ã³ãœãŒã«ã§å®è¡ãããšãããŒã¿ã®ããã©ãŒã ãã§ã¯ãªããå¹³åãæšæºåå·®ãä¿¡é Œåºéãååäœæ°ãªã©ã®å€æ°ã®æ°å€ãåºåãããŸãã ããã¯éåžžã«éèŠã§ãã äžéšã®ã¿ã€ãã®åæã§ã¯ãããŒã¿ã®ããã©ãŒã ããèŠããªããšããããšã¯ãéèŠãªããšãèŠéãããšãæå³ããŸãã
å¹³åã«äŸåããããšã§ã¹ãããã§ãããã®ã®äŸã次ã«ç€ºããŸãã ãã®ã°ã©ãã¯é 延æéã瀺ããŠããŸãã 99ïŒ ã®ã±ãŒã¹ã§ã¯ãå¿çæéã¯200ããªç§ããããããã«çãã§ãããåšæçãªsté³ã芳å¯ãããå¯èœæ§ããããŸã-çæéã§çºçããé·ãããé 延ïŒ10ããªç§ãŸã§ïŒã§ãã
ãŸããã»ãšãã©ã®å Žåãããã©ãŒãã³ã¹åæãå®è¡ããéã«ãsté³ã«æ³šæãæãããæ±ããããŸããããã¯ããŠãŒã¶ãŒãæã ééããåé¡ã§ããå¹³åå€ãããé«ãå€ã§ãã ããããèå¥ããã«ã¯ãäžã®ã°ã©ãã®ããã«ãã¹ãŠã®ããŒã¿ãã€ã³ããèŠèŠåããããäžã®ã°ã©ãã®ããã«ååžãæ§ç¯ããå¿ èŠããããŸãã
人ã ãããŒã»ã³ã¿ã€ã«ã§ç¯ããã1ã€ã®äžè¬çãªééãã¯ãããŒã»ã³ã¿ã€ã«ã§æ°åŠçæäœãè¡ãããšã§ãã ããšãã°ãç§ã®ã¯ã©ã€ã¢ã³ããè¡ã£ãããã«ããŒã»ã³ã¿ã€ã«ãå¹³ååããããšã¯ã§ããŸããã
2å°ã®ãµãŒããŒããããšããŸãã ãµãŒããŒAã®å Žåã90ïŒ ã®æéã®é 延æéã¯90ããªç§ã§ããããµãŒããŒBã®90ïŒ ã®æéã®é 延æéã¯22ããªç§ã§ãã
ãããã®å€ãå¹³ååã§ããªãããšãç解ããããšãéèŠã§ãã èŠæ±ã®90ïŒ ã§ãå¿çã57ããªç§æªæºã«ãªãã®ã¯äºå®ã§ã¯ãããŸããã å®éããªã¯ãšã¹ãã®90ïŒ ã¯68ããªç§ãããéãå¿çããŸãã
ãããã£ãŠãé¢å¿ãååäœæ°ãªã©ãå¹³ååããããšã¯ã§ããŸããã åžžã«ããŒã¿ãšãã®æ®åã確èªããå¿ èŠããããŸãã
次ã®ãããªé³ãèãããããšããããŸãã ç§ã®ãŠãŒã¶ãŒã¯èª°ããããèŠãŸããïŒãAmazon.comã®ãŠã§ããµã€ãã®ããŒãžãäŸãšããŠäœ¿çšããŠããªããããéèŠãªã®ãã説æããŸãã 圌女ã¯328件ã®ãªã¯ãšã¹ããè¡ããŸããã ãã¹ãŠã®ã¯ãšãªãç¬ç«ããŠãããšä»®å®ãããšããã®ãã¡ã®å°ãªããšã1ã€ã99ããŒã»ã³ã¿ã€ã«ã«ããå¯èœæ§ã¯ã©ã®ãããã§ããïŒ
P = 1-0.99 328ã96ïŒ
çãã¯96ïŒ ã§ãã ãããã£ãŠãAmazon.comããŒãžã«ã¢ã¯ã»ã¹ãããšã99ããŒã»ã³ã¿ã€ã«ã§å°ãªããšã1ã€ã®ãªã¯ãšã¹ããåãåãå¯èœæ§ãéåžžã«é«ããªããŸãã ãŸãããŠãŒã¶ãŒãæ¯èŒçè€éãªã·ã¹ãã ã«ã¢ã¯ã»ã¹ããå Žåãææªã®ã·ããªãªãçºçããå¯èœæ§ã¯éåžžã«é«ããªããŸãã
倧èŠæš¡ã·ã¹ãã ã«ã¯æ¬æ ŒçãªããŒã«ã䜿çšããŠãã ããïŒ
ãã®èšäºã®ãã¬ãŒã ã¯ãŒã¯ã§æåŸã«èšåãããã®ã¯ãå€æ°ã®ãã·ã³ã§æ§æãããã·ã¹ãã ã«ç¹å¥ãªããŒã«ã䜿çšããå¿ èŠããããšããããšã§ãã ãã®ãããªããŒã«ã§ã§ããããšã¯æ¬¡ã®ãšããã§ãã
- å€æ°ã®ãã·ã³ããããã©ãŒãã³ã¹ããŒã¿ãåéããŸãã
- ãŠãŒã¶ãŒã¢ã¯ã·ã§ã³ãã»ãã·ã§ã³ãŸãã¯ãã©ã³ã¶ã¯ã·ã§ã³IDã«é¢é£ä»ããŸãã
- æ
å ±ããã«ã§ããŒã¿ãèŠèŠåããŸãã
- , , .
. â Vector Netflix. , , , - .
â AMP- New Relic , .NET. , . , .
: !
, , , . ?
- , , , .
- ? ? äœãæ©èœããªãã£ãã®ã§ããïŒ
- ?
- ?
- , ?
- , ?
- , , , .
â .NET, . DotNext, 12-13 , Debugging and Profiling .NET Core Apps on Linux . Production Performance and Troubleshooting of .NET Applications.
:
- Karel Zikmund Microsoft ( High performance Networking in .NET Core )
- JetBrains ( performance-)
- (Federico Lois) Corvalius ( Patterns for high-performance C#: from algorithm optimization to low-level techniques)
, .