Webéçºã®äžçã§ã¯ãå€ãã®å ŽåãWebã¢ããªã±ãŒã·ã§ã³çšã®ãµãŒããŒãéžæããããæ¢åã®ãµãŒããŒã®ããã©ãŒãã³ã¹ããã§ãã¯ãããšããã¿ã¹ã¯ãçºçããŸãã ãããããäºæ³ãããè² è·ã«èããããããã«ãæ°ãããµãŒããŒã賌å
¥ããå¿
èŠããããŸãã 顧客ãæ¢åã®ãµãŒããŒãå±éçšã«éä¿¡ããå ŽåããããŸãã ãããã«ãããã¢ããªã±ãŒã·ã§ã³ããããã€ããŠèµ·åããåŸãããã©ãŒãã³ã¹ãäœäžããå Žåã¯ãããŒã ã«å°ããŸãã
äž»ãªåé¡ã¯ãç¹å¥ãªïŒèªã¿åããè€éãªïŒããŒã«ã䜿çšããã«ããããŠãã¡ããããªãªãŒã¹åã«ããµãŒããŒã®ããã©ãŒãã³ã¹ãè¿
éã«è©äŸ¡ããå¿
èŠãããããšã§ãã ãµãŒããŒããç¹å®ã®ã¡ããªãã¯ãåé€ãããããã«ã¢ããªã±ãŒã·ã§ã³ã®æ¢ç¥ã®ã€ã³ãžã±ãŒã¿ãŒãæããŠããã®ãµãŒããŒã§ã®ã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ã®æšå®å€ãååŸã§ããå¿
èŠããããŸãã
人çã§ã¯ããã¹ãŠã®éçºè
ããã®ã¿ã¹ã¯ãéæã§ããããã§ã¯ãªããæ®ãã®ãã¹ãŠã®éçºè
ããããéæããããšã¯éããŸããã
ãã®èšäºã§ã¯ããµãŒããŒã®ããã©ãŒãã³ã¹ãè©äŸ¡ããããã«äœ¿çšããææ³ãšããŒã«ã«ã€ããŠèª¬æããŸãã
å
žåçãªç¶æ³
1çª
éçºããŒã ã¯ãªãªãŒã¹äžã§ããã補åã®æåã®ããŒãžã§ã³ããªãªãŒã¹ããæºåãéããªãããŠããŸãã 次ã®ã¹ãããã¯ãæŠéãµãŒããŒã«ã¢ããªã±ãŒã·ã§ã³ããããã€ããããšã§ããããã¯ããããžã§ã¯ãã®æ¡ä»¶ã«åŸã£ãŠã賌å
¥ããŠæ§æããå¿
èŠããããŸãã äžè¬çãªéäŒã§ããããžã§ã¯ããããŒãžã£ãŒã¯ããã®ãåçŽãªã質åã解決ãã責任è
ãèŠã€ããããšãææ¡ããŸãã å¿
èŠãªéé¡ã次ã®å埩ã®äºç®ã«å
¥ããŸããã ååãšããŠããã®ã¿ã¹ã¯ãåžæãã人ã¯ããŸãã:)ã ããã«ãçŽæ¥ã®å§ä»»-ãVasyaããã®ã¿ã¹ã¯ãå®è¡ããŠãã ããïŒã-ãæ©èœããŸãããVasyaã¯ãããã«ããã«é¢é£ããŠæšæ¥å®äºããªããã°ãªããªãå°ãªããšã12åã®ç·æ¥/éèŠã¿ã¹ã¯ãå³åº§ã«èŠã€ããŠãªã¹ãããŸãïŒãããŠãäžè¬çã«ã -管çè
ã§ã¯ãããŸãã "ïŒã èªå·±ä¿åã®äžè¬çãªæèŠã«åŸã£ãŠãããŒã ã¯ãããžã§ã¯ããããŒãžã£ãŒã«ãã®ãããªå°é家ãã©ãã«æ¢ãã¹ãããæ£ç¢ºã«èª¿åãããŠäŒããŸãïŒé£ã®ãŠããããããè¿ããªãïŒã
çªå·2
ãããžã§ã¯ãã®æ¡ä»¶ã«åŸã£ãŠããµãŒããŒã¯é¡§å®¢ããæäŸãããŸãã ãããžã§ã¯ãã®éå§æã«ã¯çŽ æŽãããç¶æ
ã«èŠããŸããããªãªãŒã¹ã«æ¥ããšãã¯ããã§ã¯ãããŸããã ã¯ã©ã€ã¢ã³ãã®è³ªåããµãŒããŒã¯åŒ·åã§ããïŒãã«å¯Ÿããå€æŽã®ãªãçãã¯æ¬¡ã®ãšããã§ãã å±éåŸããããžã§ã¯ããããŒãžã£ãŒã¯ãWebã¢ããªã±ãŒã·ã§ã³ã®å¿çã®ã¿ã€ãã³ã°ãæ²ããã«èŠãŸãã ã誰ã責任ãè² ãã¹ãããããäœããã¹ããããšããäžå¿«ãªèãããããŸãã ãµãŒããŒæ§æãèªåã§éžæããå¿
èŠããããšããç解ããããŸãããäžæ¹ã§ãé£æ¥ãŠãããã®å°é家ã¯èŠã€ãããŸããã§ããã å®éããã®åŒ·åãªãµãŒããŒã¯å®äŸ¡ãªVPSã§ããããã©ã¡ãŒã¿ãŒã¯é©åã«èŠããŸããããã¹ããªãœãŒã¹ã仲éã®è»éãšå
±æããŠããããšãããããŸããã ã¯ã©ã€ã¢ã³ãã¯ã5幎åã«ãµãŒããŒã®ä»£éãæ¯æããŸãã:)ãäœãå€æŽããŸããïŒèšãåã«ïŒã
çªå·3
äžçŽã¬ãã«-ã¯ã©ã€ã¢ã³ãã«ã¯ãµãŒããŒãšç®¡çè
ãããŸãã ãµãŒããŒã®ãã©ã¡ãŒã¿ãŒã¯æºè¶³ã®ãããã®ã§ã¯ãããŸããããã¢ããªã±ãŒã·ã§ã³ã®å±éåŸãã²ã©ããã¬ãŒããé
延ãé
延ãçºçããŸãã éçºãµãŒããŒã®ãã©ã¡ãŒã¿ãŒã¯3å匱ãã§ãããã¢ããªã±ãŒã·ã§ã³ã®å®è¡é床ã¯8åé«éã§ãã 管çè
ãç¬èªã®æèŠãæã£ãŠããããããµãŒããŒã®äº€æãæ°ãããµãŒããŒã®è³Œå
¥ã«é¢ããææ¡ã¯åãå
¥ããããŸããããããªãã®ãã¢ããªã±ãŒã·ã§ã³ã®é床ãäœäžããŸãã ã¯ã©ã€ã¢ã³ãã¯èª°ãä¿¡ããã¹ãããç¥ããŸããã 圌ã¯ãŸããæ°ããè²»çšã䌎ãã¢ã€ãã¢ã奜ãŸãªãããã管çè
ã®è°è«ã¯éèŠã§ãã ãããžã§ã¯ããããŒãžã£ãŒã¯ããã¢ããªã±ãŒã·ã§ã³ãé
ããªãçç±ããšããŒã ã®æ確ãªèª¬æãšããµãŒããŒã®ã眪æªæãã®æ°ã瀺ã蚌æ ãå¿
èŠãšããŸãã ãã€ãã®ããã«ãããŒã ã«ã¯ååãªæéãããããã誰ããåãã§ã¿ã¹ã¯ãåŒãåããé£ã®éšçœ²ã®å°é家ã«ããŒã«ã飲ãã§ãã©ããæããããšãããã³ããããããŸãã
çŽé¢ããç¶æ³ãšè§£æ±ºããå¿
èŠãããã¿ã¹ã¯ãèŠçŽããŸãã
-ã¢ããªã±ãŒã·ã§ã³ãšè² è·ã®ããã®ãµãŒããŒã®éžæ
-æ¢åã®ãµãŒããŒã®æ©èœã®è©äŸ¡
-ããªããããªã«é
ãã®ïŒããšãã質åã«çããããããã«ãªããŸãã
枬å®ããŒã«ã®èŠä»¶
ãµãŒããŒã®ããã©ãŒãã³ã¹ã枬å®ããæãæ£ç¢ºãªæ¹æ³ã¯ãåæã«æãæçœã§ããã€ãŸãããµãŒããŒã«ã¢ããªã±ãŒã·ã§ã³ãã€ã³ã¹ããŒã«ããå®éã®è² è·ãã¢ã¯ãã£ãã«ããå¿
èŠããããŸãã ãã®æ¹æ³ã§ã¯æ£ç¢ºãªçµæãåŸãããŸãããå€ãã®çç±ã«ãã圹ã«ç«ããªã:)
- éçšãéå§ããåã«ããµãŒããŒã®è©äŸ¡ãäºåã«ç¥ãããã§ãã
- 枬å®æ¹æ³ã¯é«éã§å®äŸ¡ã§ãªããã°ãªããŸããã
- 枬å®ããŒã«ã¯äœ¿ããããããµãŒããŒã«ã€ã³ã¹ããŒã«ã§ããå¿
èŠããããŸãã
- 枬å®çµæã¯ç°¡åã«è§£éããã³æ¯èŒããå¿
èŠããããŸãã
枬å®å¯Ÿè±¡
ãµãŒããŒã賌å
¥ããããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãã€ã³ã¹ããŒã«ãããsshdãå®è¡ãããŠããŸãã ã³ã³ãœãŒã«ãéãããµãŒããŒã«å
¥ããŸãã é»ãã³ã³ãœãŒã«ãç·è²ã®æåãç¹æ»
ããã³ãŒã¹ãã次ã¯äœïŒããšéãã«å°ããŸãã ç§ãã¡ãäœã枬å®ããã®ãããããŠçç£æ§ã¯äœããäœãããã®ããèããæã§ãã
ãããŸã§ã®è³ªåã¯åçŽã§ãããããã³ãããŒã¯ãéå§ãããšããã¹ãŠãæ確ã«ãªããŸããã ããŠãã³ã³ãœãŒã«äžã§ç¹æ»
ããã«ãŒãœã«ãèŠããšãæèã¯åæ¢ããå¿
èŠãªã³ãã³ããäžããããšãã§ããŸããã
Webã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ããã倧ãã決å®ãããã®ïŒ
- CPU + RAMã®é床
- ãã£ã¹ã¯ãµãã·ã¹ãã ã®é床
- èšèªã©ã³ã¿ã€ã ã®ããã©ãŒãã³ã¹ïŒãã®å Žåã¯PHPïŒ
- ããŒã¿ããŒã¹ã®ã»ããã¢ããïŒMySQLãŸãã¯PostgreSQLããããŸãïŒ
- ãããŠããã¡ãããã¢ããªã±ãŒã·ã§ã³èªäœããïŒäœ¿çšãããªãœãŒã¹ããïŒ
äœæ¥ã®é床ãåå¥ã«æž¬å®ã§ãã4ã€ã®ããŒã«ãå¿
èŠã§ãã
- ãµãŒããŒã³ã³ããŒãã³ãã®å ŽåïŒCPU + RAMããã³ãã£ã¹ã¯ãµãã·ã¹ãã
- ãœãããŠã§ã¢ã³ã³ããŒãã³ãã®å ŽåïŒMySQLããã³PHP
枬å®çµæãæå
ã«ããã°ããµãŒããŒå
šäœã®ããã©ãŒãã³ã¹ã«ã€ããŠå
æ¬çã«è©±ãããšãã§ããWebã¢ããªã±ãŒã·ã§ã³ã®åäœãäºæž¬ããããšãã§ããŸãã
枬å®ããŒã«
ã·ã¹ãã³ã
github.com/akopytov/sysbenchèè
ã説æãããããããŒã«ã説æããããšã¯äžå¯èœãªã®ã§ãåŒçšããŸãã
SysBenchã¯ãéäžçãªè² è·ã®äžã§ããŒã¿ããŒã¹ãå®è¡ããã·ã¹ãã ã«ãšã£ãŠéèŠãªOSãã©ã¡ãŒã¿ãŒãè©äŸ¡ããããã®ãã¢ãžã¥ãŒã«åŒã®ã¯ãã¹ãã©ãããã©ãŒã ããã³ãã«ãã¹ã¬ããã®ãã³ãããŒã¯ããŒã«ã§ãã
ãã®ãã³ãããŒã¯ã¹ã€ãŒãã®ã¢ã€ãã¢ã¯ãè€éãªããŒã¿ããŒã¹ãã³ãããŒã¯ãèšå®ããããããŒã¿ããŒã¹ããŸã£ããã€ã³ã¹ããŒã«ããªããŠããã·ã¹ãã ããã©ãŒãã³ã¹ã«é¢ããå°è±¡ããã°ããåŸãããšã§ãã
ãããå¿
èŠãªãã®ã§ãïŒ Sysbnechã䜿çšãããšãè€éãªãã³ãããŒã¯ãç¹å¥ãªããŒã«ãã€ã³ã¹ããŒã«ããããšãªããã·ã¹ãã ããã©ãŒãã³ã¹ããã°ããææ¡ã§ããŸãã
sysbenchã®ã€ã³ã¹ããŒã«ã¯ç°¡åã§ãïŒ
apt-get install sysbench
ã³ã³ãã€ã«ã§ããŸãïŒ
$ ./autogen.sh
$ ./configure
$ make
CPUããã©ãŒãã³ã¹ã確èªãã
ãããè¡ãããã«ã2äžåã®çŽ æ°ã®èšç®ãéå§ããŸãã
$ sysbench --test=cpu --cpu-max-prime=20000 run
ããã©ã«ãã§ã¯ãèšç®ã¯åäžã®ã¹ã¬ããã§å®è¡ãããŸãã 䞊åèšç®ãå®è¡ããå Žåã¯ãããŒ--num-threads = Nã䜿çšããŸãã
è©ŠéšçµæïŒ
CPU: Test execution summary: total time: 17.3915s total number of events: 10000 total time taken by event execution: 17.3875 per-request statistics: min: 1.66ms avg: 1.74ms max: 4.00ms approx. 95 percentile: 2.03ms
ãã®ãã¹ãã§æãèå³æ·±ãã®ã¯ãåèšæéã®å€ã§ãã ãã®ãã¹ããè€æ°ã®ãµãŒããŒã§å®è¡ããããšã«ããã枬å®å€ãæ¯èŒã§ããŸãã
ãã®èšäºãæžããŠããæç¹ã§æå
ã«ãã£ããµãŒããŒã§ãã®ãã¹ããå®è¡ããäŸã瀺ããŸãã

泚ïŒ
- G2ã¯A3ã®çŽ3åé«éã§ã
- 250ã«ãŒãã«/æã®ã¬ã°ã©ã®ã·ã³ãã«ãªVPSã¯G2ã«å¹æµããŸã:)
- Xeon X3440ããŒã¹ã®ä»®æ³ãã·ã³ã¯NUC i5ãšåãããã«æ©èœããŸãã
- 4å°ã®ãµãŒããŒã§é©ãã»ã©åäžãªçµæ
- çŽ æ°ã¯ãããã»ããµå
šäœã®ããã©ãŒãã³ã¹ãåæ ããªãåãCPUãŠãããã§èšç®ãããå¯èœæ§ããããŸãã
ãã£ã¹ã¯ãµãã·ã¹ãã ã®ãã¹ã
ãã£ã¹ã¯ãµãã·ã¹ãã ã®ç¢ºèªã¯ã次ã®3ã€ã®æé ã§å®è¡ãããŸãã
- ãã¹ããã¡ã€ã«ã®ã»ãããæºåïŒçæïŒããŸã
- ãã¹ããå®è¡ããææšãååŸãã
- ãã¿ãåºã
ãã¹ããã¡ã€ã«ã®æºåïŒ
$ sysbench --test=fileio --file-total-size=70G prepare
ããŒã ã¯ãåèšãµã€ãºã70ã®ã¬ãã€ãã®ãã¡ã€ã«ã»ãããäœæããŸãã ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ãã£ãã·ã¥ããã¹ãçµæã«åœ±é¿ããªãããã«ããµã€ãºã¯RAMã®éã倧å¹
ã«è¶
ããå¿
èŠããããŸãã
ãã¹ãå®è¡ïŒ
$ sysbench --test=fileio --file-total-size=70G --file-test-mode=rndrw --init-rng=on --max-time=300 --max-requests=0 run
ãã¹ãã¯ã©ã³ãã ãªèªã¿åãã¢ãŒãïŒrndwïŒã§300ç§éå®è¡ããããã®åŸãçµæã衚瀺ãããŸãã ç¹°ãè¿ããŸãããããã©ã«ãã§ã¯ããã¹ãã¯åäžã®ã¹ã¬ããã§å®è¡ãããŸãïŒã¹ã¬ããæ°ïŒ1ïŒã
äžæãã¡ã€ã«ã®ã¯ãªãŒã³ã¢ããïŒ
$ sysbench --test=fileio cleanup
ãã¹ãçµæã®äŸïŒ
FileIO: Operations performed: 249517 Read, 166344 Write, 532224 Other = 948085 Read 3.8073Gb Written 2.5382Gb Total transferred 6.3455Gb (21.659Mb/sec) 1386.18 Requests/sec executed Test execution summary: total time: 300.0045s total number of events: 415861 total time taken by event execution: 178.9646 per-request statistics: min: 0.00ms avg: 0.43ms max: 205.67ms approx. 95 percentile: 0.16ms Threads fairness: events (avg/stddev): 415861.0000/0.00 execution time (avg/stddev): 178.9646/0.00
ãã£ã¹ã¯ãµãã·ã¹ãã ã®ããã©ãŒãã³ã¹ã®å°ºåºŠãšããŠãå¹³åããŒã¿è»¢éé床ã®å€ïŒãã®äŸã§ã¯21.659Mb /ç§ïŒã䜿çšã§ããŸãã
ãã®ãã¹ããç§ã®ãµãŒããŒã§ç€ºããããšãèŠãŠã¿ãŸãããïŒ

泚ïŒ
- ãã¹ãŠã®ãã¹ãæžã¿ãµãŒããŒã§ã®çãããäœéå€ãé¡è
- NUC i5ã«ssdãã£ã¹ã¯ãã€ã³ã¹ããŒã«ãããŠããŸãããã¹ããäœåºŠå®è¡ããŠããããŒã¿è»¢éé床ã®å€ã¯åžžã«1.5ã2 Mb /ç§ã®ç¯å²ã«ãããŸãã
- ç§ã®äœæ¥äžã®ssdæèŒMacBook Pro 2015ã§ã¯ããã®ãã¹ãã®é床å€ã¯140Mb /ç§ã§ã8-ïŒ
MySQL OLTPãã¹ã
ãã¹ãã§ã¯ãMySQLãµãŒããŒã®ãã©ã³ã¶ã¯ã·ã§ã³ã®é床ããã§ãã¯ããåãã©ã³ã¶ã¯ã·ã§ã³ã¯èªã¿åããšæžã蟌ã¿ã®äž¡æ¹ã®ãªã¯ãšã¹ãã§æ§æãããŸãã
my.cnfã®ãµãŒããŒèšå®ãå€æŽããåèµ·åããŠäžé£ã®ãã¹ããå®è¡ãããšéåžžã«äŸ¿å©ã§ããããã©ãŒãã³ã¹ã®å€åãããã«ç¢ºèªã§ããŸãã
ãã¹ãã®æºåïŒ
$ sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=test --mysql-user=root --mysql-password=pass prepare
ãã¹ãå®è¡ïŒ
$ sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=test --mysql-user=root --mysql-password=pass --max-time=60 --oltp-read-only=off --max-requests=0 --num-threads=8 run
--oltp-read-onlyãã©ã¡ãŒã¿ãŒãonã«èšå®ãããšãèªã¿åãèŠæ±ã®ã¿ãå®è¡ãããã¹ã¬ãŒãããŒã¿ããŒã¹ãªã©ã®ã¢ãŒãã§ã®DBMSã®é床ãè©äŸ¡ã§ããŸãã
è©ŠéšçµæïŒ
OLTP test statistics: queries performed: read: 564158 write: 0 other: 80594 total: 644752 transactions: 40297 (671.57 per sec.) deadlocks: 0 (0.00 per sec.) read/write requests: 564158 (9402.01 per sec.) other operations: 80594 (1343.14 per sec.) Test execution summary: total time: 60.0040s total number of events: 40297 total time taken by event execution: 479.8413 per-request statistics: min: 1.14ms avg: 11.91ms max: 70.93ms approx. 95 percentile: 15.54ms
ã¬ããŒãã§æãèå³æ·±ããã©ã¡ãŒã¿ãŒã¯ã1ç§ãããã®ãã©ã³ã¶ã¯ã·ã§ã³æ°ïŒ1ç§ãããã®ãã©ã³ã¶ã¯ã·ã§ã³æ°ïŒã§ãã
ãã®ãã¹ãããµãŒããŒäžã§ã©ã®ããã«ç€ºããããïŒ

泚ïŒ
- MySQLã®æ§æã¯ãã¹ãŠã®ãµãŒããŒã§åãã§ãã
- é©ãã¹ãããšã«ãA3ãµãŒããŒãšG2ãµãŒããŒã®éã«å€§ããªéãã¯ãããŸããã
- G2ã«å¹æµããNUC i5
PostgreSQLã®ããã©ãŒãã³ã¹ã枬å®ããæ¹æ³ã¯ïŒ
æ®å¿µãªãããsysbenchããŒã«ã«ã¯PostgreSQLçšã®çµã¿èŸŒã¿ãã¹ãããŒã«ããããŸããã ãã ããpgbenchãŠãŒãã£ãªãã£ã䜿çšã§ãããããããã¯ãŸã£ããæ°ã«ãªããŸããã
è¿œå æ
å ±ïŒ
www.postgresql.org/docs/devel/static/pgbench.htmlããã©ã«ãã®ããã©ãŒãã³ã¹ãã¹ãã¹ã¯ãªããã¯ã次ã®ãã©ã³ã¶ã¯ã·ã§ã³ãç¹°ãè¿ãå®è¡ããŸãã
BEGIN; UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid; SELECT abalance FROM pgbench_accounts WHERE aid = :aid; UPDATE pgbench_tellers SET tbalance = tbalance + :delta WHERE tid = :tid; UPDATE pgbench_branches SET bbalance = bbalance + :delta WHERE bid = :bid; INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP); END;
ãã¹ãããŒã¿ãäœæããã«ã¯ã次ã®ã³ãã³ããå®è¡ããŸãã
$ pgbench -h localhost -U test_user -i -s 100 test
ãã¹ããå®æœããŸãã
$ pgbench -h localhost -U test_user -t 5000 -c 4 -j 4 test
ã³ãã³ãããŒã¯ã4ã€ã®ã¯ã©ã€ã¢ã³ãã4ã€ã®ã¹ã¬ããã§5,000ã®ãã©ã³ã¶ã¯ã·ã§ã³ãå®è¡ããããšãæå³ããŸãã ãã®çµæã20,000件ã®ãã©ã³ã¶ã¯ã·ã§ã³ãå®äºããŸãã
çµæïŒ
starting vacuum...end. transaction type: TPC-B (sort of) scaling factor: 10 query mode: simple number of clients: 4 number of threads: 4 number of transactions per client: 5000 number of transactions actually processed: 20000/20000 latency average: 0.000 ms tps = 3350.950958 (including connections establishing) tps = 3357.677756 (excluding connections establishing)
ããã§æãéèŠãªããšã¯tpsã§ãã
æ®å¿µãªãããç°ãªããµãŒããŒã§ã®æ¯èŒãã¹ãã¯ãããŸãã:)
ããããPHPã®ããã©ãŒãã³ã¹ã¯ã©ãã§ããïŒ
sysbenchã§ååã«ãã¬ã€ããå€ãã®ãµãŒããŒã®CPUã§ããã¯ããã®ãšãã«ã®ãŒãæ¶è²»ãããããã©ã³ãã ãµãŒããŒã®ããã©ãŒãã³ã¹ãè¿
éãã€éåžžã«é©åã«è©äŸ¡ããããšãåŠã³ãŸãããããã«ããããã®ãµãŒããŒäžã®Webã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ã®å°é家ã«ããäºæž¬ãå¯èœã«ãªããŸãã
ãã ããsysbenchãè¯å¥œãªçµæã瀺ããç¶æ³ãããããã®ãµãŒããŒäžã®phpã¢ããªã±ãŒã·ã§ã³ã¯çµ¶å¯Ÿã«å¹³å¡ãªããã©ãŒãã³ã¹ã€ã³ãžã±ãŒã¿ãŒã瀺ããŸãã
ãã¡ããã次ã®ãããªãã©ã¡ãŒã¿ãŒïŒ
- PHPããŒãžã§ã³
- å éåš
- PHPã®ã³ã³ãã€ã«æ¹æ³ãšæ¹æ³
- æå¹åãããæ¡åŒµæ©èœ
ã€ã³ã¹ããŒã«ãç°¡åã§ãèµ·ååŸã«ãµãŒããŒäžã®çŸåšã®PHPã®ç解å¯èœãªããã©ãŒãã³ã¹ã¡ããªãã¯ãçæããããŒã«ãå¿
èŠã§ãã ããã«ããã®ããŒã«ããã£ã¹ã¯ãµãã·ã¹ãã ïŒãŸãã¯ãããã¯ãŒã¯ïŒã®ããã©ãŒãã³ã¹ã®åœ±é¿ãåããªãããã«ãããã£ãã®ã§ããããã»ããµ+ã¡ã¢ãªãªã³ã¯ã§ã®PHPã€ã³ã¿ãŒããªã¿ãŒã®åäœã®ã¿ã枬å®ããŸããã
åçŽãªã°ãŒã°ã«/æèã¯ã次ã®ãããªã¢ã€ãã¢ã«ã€ãªãããŸããã
- æ¢åã®ããŒã«ã¯ãããŸãã
- ç¬èªã®åç
§ã¢ã«ãŽãªãºã ïŒã¹ã¯ãªããïŒãèšè¿°ããå¿
èŠããã
- ã¢ã«ãŽãªãºã ã®äžå€æ§ã«ãããåŸãããçµæãæ¯èŒã§ããŸã
è¡ãããïŒ
github.com/florinsky/af-php-benchã¹ã¯ãªããã¯pharã¢ãŒã«ã€ãã«ã³ã³ãã€ã«ããããããä»»æã®ãµãŒããŒã§ã®ããŠã³ããŒããšå®è¡ãã¯ããã«ç°¡åã«ãªããŸãã
å®è¡ããPHPã®æå°ããŒãžã§ã³ã¯5.4ã§ãã
å®è¡ããã«ã¯ïŒ
$ wget github.com/florinsky/af-php-bench/raw/master/build/phpbm.phar
$ php phpbm.phar
ã¹ã¯ãªããã¯ã3ã€ã®ã°ã«ãŒãã«åãããã10åã®ãã¹ããå®è¡ããŸãã
- æåã®ã°ã«ãŒãã¯äžè¬çãªæäœã§ãïŒã«ãŒããã©ã³ãããªããžã§ã¯ãã®äœæ/åé€ïŒ
- ãã¹ãã®2çªç®ã®ã°ã«ãŒãã¯ãæååé¢æ°ãå
ç Ž/ççºãããã·ã¥èšç®ããã§ãã¯ããŸã
- 第äž-é
åãæäœãã
- ãã¹ãŠã®æž¬å®ã¯æ°ç§ã§å®è¡ãããŸãã
ãã¹ãã¬ããŒãïŒ
[GENERAL] 1/10 Cycles (if, while, do) ...................... 6.72s 2/10 Generate Random Numbers ..................... 3.21s 3/10 Objects ..................................... 4.82s Time: .. 14.76 [STRINGS] 4/10 Simple Strings Functions ................... 13.09s 5/10 Explode/Implode ............................ 15.90s 6/10 Long Strings ............................... 30.37s 7/10 String Hash ................................ 23.57s Time: .. 82.93 [ARRAYS] 8/10 Fill arrays ................................ 22.32s 9/10 Array Sort (Integer Keys and Values) ....... 17.17s 10/10 Array Sort (String Keys and Values) ........ 14.29s Time: .. 53.79 TOTAL TIME: . 151.47
ãã®ã¹ã¯ãªããã«ããããã®ãµãŒããŒã§ã®PHPã®å
šäœçãªããã©ãŒãã³ã¹ïŒåèšæéïŒãè©äŸ¡ã§ããã ãã§ãªãããã®æ§æèŠçŽ ã確èªããããšãã§ããŸãã å¹³å¡ãªå
šäœçãªçµæã1ã€ã®ãã¹ãã®ã¿ã«ãã£ãŠåœ¢æãããããšãç¹°ãè¿ãèŠãŠããŸãããã©ããã§é
ãä¹±æ°ãžã§ãã¬ãŒã¿ãŒã§ããããããããã©ããã§é·ãè¡ã§åäœãããããããŸããã
çµæããŒãžïŒhttps://github.com/florinsky/af-php-bench/blob/master/RESULTS.mdïŒã§ãåãåã£ãã¬ããŒããèšé²ããããããå
±éã®ããŒãã«ã«ã°ã«ãŒãåããŸããã æã
çµæã¯é©ãã¹ãã§ã:)
ãããã«
äžèšã®ããŒã«ã䜿çšãããšã枬å®ã®æç¹ã§ã®ã¿ãµãŒããŒã®ããã©ãŒãã³ã¹ãè©äŸ¡ã§ããŸãã ãµãŒããŒã®åäœã¯ã䞊åããã»ã¹ã®åœ±é¿ãåããå¯èœæ§ãããããšãç解ããå¿
èŠããããŸãã ãããŠã枬å®çµæãè¯ãçµæã瀺ãããšããŠãããããåžžã«ãããªããšããæå³ã§ã¯ãããŸããã
ãã®åé¡ã¯ããã§ã«å®å
šã«åäœããŠããã¯ã©ã€ã¢ã³ããµãŒããŒãåæããŠããå Žåã«ç¹ã«æ·±å»ã§ãã ã©ã®cronã¿ã¹ã¯ãå®è¡ãããŠããããã©ã®ããã»ã¹ãé·ãgzip / tarãæå¹ã«ããããã«ã€ãã³ããåŸ
æ©ããŠåŸ
æ©ããŠããã®ãããããŸããããŸããã¢ã³ããŠã€ã«ã¹/ã¹ãã ãã£ã«ã¿ãŒãšãè¬ã®1ã€ãçºçããããŒã¹ã®ä»®æ³ãã·ã³ããããŸãã
Atopããã³iostatã¯ãæéã®çµéã«äŒŽããµãŒããŒã®åäœãåæããã®ã«åœ¹ç«ã¡ãŸãã çµ±èšã¯æ°æ¥éïŒãŸãã¯ãã以äžïŒèç©ããããã®åŸã¯è¡šç€ºã§ããŸãã
é äž
ãã¡ã€ã«ãžã®ããŒã¿ã®æžã蟌ã¿ïŒ
$ atop -w /tmp/atop.raw 1 60
ãšã³ããªãèªãïŒ
atop -r /tmp/atop.raw
iostat
CPUè² è·æž¬å®ïŒ
$ iostat -c 1
çµè«ïŒ
%user %nice %system %iowait %steal %idle 82.21 0.00 17.79 0.00 0.00 0.00 79.05 0.00 20.70 0.00 0.00 0.25 80.95 0.00 19.05 0.00 0.00 0.00 80.95 0.00 19.05 0.00 0.00 0.00 80.85 0.00 18.91 0.25 0.00 0.00 ...
ãã£ã¹ã¯ãµãã·ã¹ãã ã®è² è·ã®æž¬å®ïŒ
$ iostat -xd /dev/sda 1
çµè«ïŒ
rkB/s wkB/s await r_await w_await svctm %util 0.00 2060.00 4.05 0.00 4.05 3.98 95.60 0.00 2000.00 3.97 0.00 3.97 3.95 96.40 0.00 1976.00 3.92 0.00 3.92 3.92 95.60 0.00 2008.00 3.95 0.00 3.95 3.93 96.00 0.00 2008.00 3.92 0.00 3.92 3.92 96.80 0.00 2020.00 4.03 0.00 4.03 4.00 97.60 0.00 2016.00 3.97 0.00 3.97 3.97 97.20 ...
ãããŠããã¡ãããMuninãªã©ã䜿çšããŠããµãŒããŒããçµ±èšãé·ãæéé ã«åéããããšãã§ããŸãã
ãæž
èŽããããšãããããŸããïŒ