Re: WebServer BenchMarking
2016/1/13
PHP BLT #2
Ryo Tomidokoro
About me
Ryo Tomidokoro (@hanhan1978)
Web Application Engineer
過日・・・• PHPとWebサーバの構成について、ベンチマークを取ってブログに書いた。
PHP Advent Calendar 2015
内容のおさらい• PHPとWebサーバの構成を4通り提案• サンプルのウェブアプリを用意• siegeを使って、ベンチマーク
構成 1
PHP-FPMNginxFastCGI
• PHPファイルのみ PHP-FPMに処理させるので効率が良い。
静的ファイルは Nginx が処理
構成 2
mod_phpprefork
• Apacheの各プロセスがmod_phpを読込• 静的ファイルも PHPファイルも同様にプロセスが消費される
Apache
構成 3
mod_phpNginxproxy
• PHPファイルのみ Apache+mod_phpが処理• 前段の Nginxで静的ファイルを片付ける
静的ファイルは Nginx が処理
Apache
構成 4
PHP-FPMFastCGI
• 構成 1の Apache版• 同様に効率の良いリソース消費が期待できそう
Apachempm_event
静的ファイルは Apache が処理
こんな Web アプリ (Laravel)
DB 接続あり、ページ内に画像が 10 枚
ベンチマーカーsiege -b -t 60sec
siege のベンチマークオプションをつけて、 60 秒間での処理リクエスト数で性能を計測
事前の予想Nginx PHP-FPMApache mod_phpNginx with Apache mod_phpApache PHP-FPM
1 位4 位3 位2 位
ブログ投稿後・・・• 胸騒ぎがして何回かやり直してみると、結果が安定しない。(滝汗• 眠れない・・・
• 結果集計・ベンチマークをスクリプト化• Wifiオフ、余計なプロセスは全て落とす
改善活動
安定してきた結果Nginx PHP-FPMApache mod_phpNginx with Apache mod_phpApache PHP-FPM
20420210552216120697
この数値は再現性が高い↑
60sec でのリクエスト処理数
どの構成でも性能差がほとんどない。
目的と方法を間違えていた• 並列リクエストに対する限界性能をチェックしたかった。• siegeのベンチマークオプションはシングルスレッド• 測っていたのはシングルスレッドでの応答速度
どの構成でも資源に余裕がある状態大差は出ない。
やり直し• siegeのベンチマークオプションは取りやめ• 並列リクエストを大量に送りつけて、性能が劣化するまで限界を攻めてみる。
並列 250 * 40 回 = 10000 リクエスト
再ベンチ結果
Nginx PHP-FPMApache mod_phpNginx with Apache mod_phpApache PHP-FPM
37.14221.9342.1856.53
リクエスト完了までにかかった秒数
詳細な結果はブログに表で貼っておきます。
再度の考察• Nginx + PHP-FPMは、まだまだイケる• Apache mod_phpを使う場合は、よく考えて・・・• mpm_eventは設定いじると結構がんばるらしい
反省• 計測したい性能は何?• ベンチマークツールの使い方あってる?• 締切に追い立てられるてベンチするとろくなこと無い