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-FPMNginx
FastCGI
• PHPファイルのみPHP-FPMに処理させるので効率が良い。
静的ファイルはNginxが処理
構成2
mod_php
prefork
• Apacheの各プロセスがmod_phpを読込
• 静的ファイルもPHPファイルも同様にプロセスが消費さ
れる
Apache
構成3
mod_phpNginx
proxy
• PHPファイルのみApache+mod_phpが処理
• 前段のNginxで静的ファイルを片付ける
静的ファイルはNginxが処理
Apache
構成4
PHP-FPM
FastCGI
• 構成1のApache版
• 同様に効率の良いリソース消費が期待できそう
Apache
mpm_event
静的ファイルはApacheが処理
こんなWebアプリ(Laravel)
DB接続あり、ページ内に画像が10枚
ベンチマーカー
siege -b -t 60sec
siegeのベンチマークオプションをつけて、60秒
間での処理リクエスト数で性能を計測
事前の予想
Nginx PHP-FPM
Apache mod_php
Nginx with Apache mod_php
Apache PHP-FPM
1位
4位
3位
2位
結果
構成1と3が好成績
その時の考察
あれはウソだ
ブログ投稿後・・・
• 胸騒ぎがして何回かやり直してみると、結果が安定
しない。(滝汗
• 眠れない・・・
• 結果集計・ベンチマークをスクリプト化
• Wifiオフ、余計なプロセスは全て落とす
改善活動
安定してきた結果
Nginx PHP-FPM
Apache mod_php
Nginx with Apache mod_php
Apache PHP-FPM
20420
21055
22161
20697
この数値は再現性が高い↑
60secでのリクエスト処理数
どの構成でも性能差がほとん
どない。
目的と方法を間違えていた
• 並列リクエストに対する限界性能をチェックしたか
った。
• siegeのベンチマークオプションはシングルスレッド
• 測っていたのはシングルスレッドでの応答速度
どの構成でも資源に余裕がある状態
大差は出ない。
やり直し
• siegeのベンチマークオプションは取りやめ
• 並列リクエストを大量に送りつけて、性能が
劣化するまで限界を攻めてみる。
並列250 * 40回 = 10000 リクエスト
再ベンチ結果
Nginx PHP-FPM
Apache mod_php
Nginx with Apache mod_php
Apache PHP-FPM
37.14
221.93
42.18
56.53
リクエスト完了までにかかった秒数
詳細な結果はブログに表で貼っておきます。
再度の考察
• Nginx + PHP-FPMは、まだまだイケる
• Apache mod_phpを使う場合は、よく考えて・・・
• mpm_eventは設定いじると結構がんばるらしい
反省
• 計測したい性能は何?
• ベンチマークツールの使い方あってる?
• 締切に追い立てられるてベンチするとろくなこと無い
END

Re: WebServer BenchMarking