PHP BLT #2に行ってきた

2016-01-13
PHP
BLT

メルカリさんにてPHP BLT #2が開催されましたので、
LT発表者の一人として参加してきました。

blt

発表内容

PHP Advent Calendar 2015で書いた内容が怪しかったのでベンチマークをやり直したという話です。

取りなおしたベンチマークの詳細

NginxとPHP-FPM Apache2.4(prefork)とmod_php Apache2.4(prefork)とmod_phpとNginx Apache2.4(event)とPHP-FPM
Transaction 9858 9466 9802 10000
Availavility(%) 98.58 94.66 98.02 100.00
Elapsed time(sec) 37.14 221.93 42.18 56.53
Data Transferred(MB) 592.28 563.09 591.26 555.97
Response Time(sec) 0.23 4.08 0.34 0.74
Transaction rate(trans/sec) 265.43 42.65 232.39 176.90
Throughput(MB/sec) 15.95 2.54 14.02 9.84
Concurrency 61.10 174.18 79.15 130.16
Successful Transactions 9858 9466 9802 10000
Failed Transactions 142 534 198 0
Longest Transaction 5.31 173.24 7.08 8.98
Shortest transaction 0.00 0.00 0.00 0.00

再度の考察

Apache+mod_phpは、単純にリクエスト数が多くなった時の性能劣化が一番早かったです。
前回の考察でも述べた通りで、Apacheの各リクエストがmod_phpを読み込んで動いているため、単純にリソースの消費が激しいです。
実際のVM内ではApacheが落ちてしまっていました。

それ以外の構成は、だいたい同じオーダーの性能でしたがNginxに静的ファイルを処理させる構成はやはり良いですね。
Availabiltyが100%なのは、Apache(mpm_event)だけですが、これは処理性能がNginxに比べて少し遅かったためファイルディスクリプタがギリギリ枯渇しなかったためです。

逆にいうと、Nginxは数を大量にさばけるので、きちんとOS側の設定もしないと勿体無いですね。