PHP実環境ベンチ2016春
2016/4/14
PHP7 Casual Talks #2 「速さ」
hanhan1978
@hanhan1978
• Web Application Engineer
• dev-north.yokohama 管理人
• ohako.inc 所属
本日のテーマ
BenchMarking
とにかくPHPのWebアプリに
負荷をかけまくる
そして、最適なミドルウェア
構成や設定を探す
こんなWebアプリ(Laravel)
DBから7件のデー
タを取得
ページ内に12枚の画像データを表
示
特徴
• 普通のWebアプリ
• 余計な処理は一切無し (CPU負荷極小)
• DBのデータはメモリに乗る (データ量極小)
インフラは?
• Vagrant with VirtualBox
• CPU x2
• Memory 2GB
どんな負荷をかける?
• 大量並列アクセス
• ISU○ON対策
負荷テストツール
siege
• cオプションで並列数を調整
• Keep-AliveはOFF (デフォルト)
• 5xx系のエラーを出すまで並列数を上げていく
ミドルウェア構成
構成① Nginx + FastCGI
PHP7-FPMNginx
FastCGI
静的ファイルはNginxが処理
構成② Apache + FastCGI
PHP7-FPM
FastCGI
Apache
mpm_event
静的ファイルはApacheが処理
構成③ Apache + mod_php
mod_php7
prefork
Apache
構成④ Nginx + mod_php
mod_php7Nginx
proxy
静的ファイルはNginxが処理
Apache
OSやミドルウェアの設定
• ファイルディスクリプタ 増し増し
• Socketのreuseやtimeout設定
• nginxは2core 2048で待受
• Fastcgi, MySQLはUnix Domain Socketで通信
ベンチマークを実行する
突然ですが、クイズです。
Q1. もっとも大量の並列負荷
に耐えた構成はどれでしょう
?
① Nginx FastCGI
② Apache FastCGI
③ Apache mod_php
④ Nginx mod_php
concurrency
正解は・・・
① Nginx FastCGI
② Apache FastCGI
③ Apache mod_php
④ Nginx mod_php
750
1050
1040
1060
No.1
concurrency
ThroughPutは?
同時接続数700で比較
Q2. 一番ThroughPutが高いの
は?
① Nginx FastCGI
② Apache FastCGI
③ Apache mod_php
④ Nginx mod_php
trans/sec
正解は・・・
① Nginx FastCGI
② Apache FastCGI
③ Apache mod_php
④ Nginx mod_php
304.75
281.69
240.05
195.26
No.1
trans/sec
なんかおかしい・・・
あやしげな情報を見つける
http://stackoverflow.com/questions/8772015/502-gateway-errors-under-high-load-nginx-php-fpm
300+の同時接続を行うと、新しいリクエストがブロックされてnginx
が502エラーを出す・・・。ネットワークソケットが良い。
TCP Socketに変えてみた
listen = 127.0.0.1:9000
fastcgi_pass 127.0.0.1:9000;
php-fpm
Nginx
Q1’ もっとも大量の並列負荷
に耐えた構成はどれでしょう
?
① Nginx FastCGI
② Apache FastCGI
③ Apache mod_php
④ Nginx mod_php
concurrency
正解は・・・
① Nginx FastCGI
② Apache FastCGI
③ Apache mod_php
④ Nginx mod_php 1060
1050
1040
1200
No.1
concurrency
何故?
• Unix Domain Socketに詳しい人教えて
• 世界はUnix Domain Socketのがパフォーマンス
が良いという情報であふれている。
それはさておき
せっかくPHP7の勉強会なので
Q3 ①の構成でPHPを5.6にし
てみた。性能はどうなった?
PHP5.6-FPMNginx
FastCGI
1. 多くなった
2. 少なくなった
同時接続数
正解は・・・
1. 多くなった
2. 少なくなった
同時接続数
1150
1. 良くなった
2. 悪くなった
trans/sec
正解は・・・
1. 良くなった
2. 悪くなった
trans/sec
283.60
まとめ
• ベンチマークは難しい
• 極限の世界では何が起こるか分からない
• PHP7はちょっと速いらしいよ
• ミドルウェアの設定とか
• チューニングの内容とか
• 細かい不明点とか
-> ブログにまとめておきます。
http://blog.hanhans.net
推測するな!
計測せよ!
END
PHP7実環境ベンチ2016春

PHP7実環境ベンチ2016春