SlideShare a Scribd company logo
1 of 21
Download to read offline
PHP-FPMとuWSGI
          ̶̶ mod_php以外の選択肢を探る
                                           hnw
                     第66回PHP勉強会(2013/03/27) 発表資料




13年3月29日金曜日
自己紹介

         @hnw / id:hnw

         勤務先:KLab株式会社

         カレーとバグが大好物

         宣伝:php-timecopというPHP拡張を作りました

              https://github.com/hnw/php-timecop



13年3月29日金曜日
今日おはなしすること

         PHP環境の選択肢を紹介

              PHP-FPM

              uWSGI + PHP plugin

         動かしてみたよ!

         メリット・デメリットは?



13年3月29日金曜日
PHP-FPM

         FPM: FastCGI Process Manager

         PHP標準のアプリケーションサーバ実装

              PHP 5.3.3からバンドル

              PHP 5.4.0から公式サポート

              プロトコルはFastCGI



13年3月29日金曜日
FastCGI


         Webサーバ・APサーバ間で使われるプロトコル

              Apache・nginx・lighttpdなどがサポート

              PHP以外の言語ではボチボチ利用される

              バイナリプロトコル




13年3月29日金曜日
uWSGI


         Pythonでボチボチ使われているAPサーバ実装

         多数の言語に対応(WSGI, PSGI, Rack, ...)

         embed SAPIを利用したPHPプラグインも提供

              PHP界隈での知名度はゼロに近い




13年3月29日金曜日
動かしてみた(1)
         PHP-FPM




13年3月29日金曜日
動かしてみた(2)
         uWSGI + PHP plugin




13年3月29日金曜日
動かしてみた(3)
         Apache + mod_php




13年3月29日金曜日
ミドルウェア構成
         対称性からApache+mod_phpの前段にもnginxを入れた


               HTTP             HTTP



                      nginx             nginx



               HTTP           FastCGI


                  Apache
                                   PHP-FPM
                  mod_php




13年3月29日金曜日
前段のnginxいらなくね?

         効用

              前段のnginxの同時接続数を大きくできる

              後段のAPサーバの同時接続数は下げられる

         APサーバだけロードバランシングすることも可能

         前段をApacheにしても同じ効果が得られる



13年3月29日金曜日
速度の比較


         有意な差は出なかった

              1並列で500μs程度

              10ms台のPHPを動かすなら誤差では?




13年3月29日金曜日
メモリ消費量

         起動直後にPHPを叩いてpsコマンドのRSSの値を比較

              PHP-FPM : 3MB

              Apache + mod_php : 5MB

              uWSGI + PHP plugin : 6.5MB

         Apacheはチューニングの余地があるはず



13年3月29日金曜日
ここまでのまとめ


         PHP-FPM、uWSGI + PHP pluginともに正常動作する

         速度の差はほぼ無い

         1プロセスあたりのメモリ消費量の差も誤差に近い

         商用環境で試す人、追試をお願いします




13年3月29日金曜日
PHP-FPMのメリット


         PHP公式サポートされていること

              安定性が期待できる

              ロングサポートが期待できる

              乗っかって後悔する可能性が少なそう




13年3月29日金曜日
PHP-FPMの面白機能(1)


         slow_logが出せる

              n秒以上かかるアクセスを検出

              n秒時点でのbacktraceも取れる

               (この機能だけはrootで起動する必要あり)




13年3月29日金曜日
PHP-FPMの面白機能(2)


         暇なときにプロセス数を勝手に減らす機能

              「pm = ondemand」

              10秒程度アクセスが無いと子プロセスが0個になってる




13年3月29日金曜日
PHP-FPMの面白機能(3)


         fastcgi_finish_request()

              レスポンスを返した後、PHPの処理が継続できる

         APCが狂ったときに緊急再起動する機能

              動作は未確認、期待通りに動くなら面白いかも




13年3月29日金曜日
PHP-FPMのデメリット



         実績が少ない

         監視系はHTTPの方が既存資産が生かせそう




13年3月29日金曜日
まとめ

         PHP-FPMは「普通」に使える実装

              性能・安定性など特に不安点は無い

              Apache + mod_phpより気軽に試せるのは利点

         uWSGIでもPHPが動くよ!

              普通はPHP-FPMを選ぶ気がします…



13年3月29日金曜日
ご静聴
               ありがとう
              ございました



13年3月29日金曜日

More Related Content

What's hot

FuelPHPを3ヶ月使ってみて
FuelPHPを3ヶ月使ってみてFuelPHPを3ヶ月使ってみて
FuelPHPを3ヶ月使ってみてTetsuji Koyama
 
DevEnv Tryit.vim Phrase.vim
DevEnv Tryit.vim Phrase.vimDevEnv Tryit.vim Phrase.vim
DevEnv Tryit.vim Phrase.vimt9md
 
Predefを使ったsqlのトレース
Predefを使ったsqlのトレースPredefを使ったsqlのトレース
Predefを使ったsqlのトレース悠滋 山本
 
結婚式の画像がどうしてもほしかった話
結婚式の画像がどうしてもほしかった話結婚式の画像がどうしてもほしかった話
結婚式の画像がどうしてもほしかった話Daijirou Yamada
 
PHPべんちまーく
PHPべんちまーくPHPべんちまーく
PHPべんちまーくchichi1091
 
5分でわかる静的解析入門
5分でわかる静的解析入門5分でわかる静的解析入門
5分でわかる静的解析入門Kenta USAMI
 
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)Kenichiro MATOHARA
 
Javascriptを書きたくないヒ トのためのPythonScript
Javascriptを書きたくないヒ トのためのPythonScriptJavascriptを書きたくないヒ トのためのPythonScript
Javascriptを書きたくないヒ トのためのPythonScriptKazufumi Ohkawa
 
プログラミング作法
プログラミング作法プログラミング作法
プログラミング作法Kota Uchida
 
libpgenでパケット操作
libpgenでパケット操作libpgenでパケット操作
libpgenでパケット操作slankdev
 
第一回サーバー勉強友の会
第一回サーバー勉強友の会第一回サーバー勉強友の会
第一回サーバー勉強友の会Takahashi Tomohiko
 
第二回サーバー勉強友の会
第二回サーバー勉強友の会第二回サーバー勉強友の会
第二回サーバー勉強友の会Takahashi Tomohiko
 
久しぶりのPythonでgoogleのアレを制御してみた
久しぶりのPythonでgoogleのアレを制御してみた久しぶりのPythonでgoogleのアレを制御してみた
久しぶりのPythonでgoogleのアレを制御してみたShohei Tai
 
例外のlogを快適に
例外のlogを快適に例外のlogを快適に
例外のlogを快適にTakashi Kawachi
 
hpingで作るパケット
hpingで作るパケットhpingで作るパケット
hpingで作るパケットTakaaki Hoyo
 
Linux で写真を操作 - 写真の管理、現像、投稿 -
Linux で写真を操作 - 写真の管理、現像、投稿 -Linux で写真を操作 - 写真の管理、現像、投稿 -
Linux で写真を操作 - 写真の管理、現像、投稿 -Kenichiro MATOHARA
 
Pynyumon03 LT
Pynyumon03 LTPynyumon03 LT
Pynyumon03 LTdrillan
 

What's hot (20)

FuelPHPを3ヶ月使ってみて
FuelPHPを3ヶ月使ってみてFuelPHPを3ヶ月使ってみて
FuelPHPを3ヶ月使ってみて
 
DevEnv Tryit.vim Phrase.vim
DevEnv Tryit.vim Phrase.vimDevEnv Tryit.vim Phrase.vim
DevEnv Tryit.vim Phrase.vim
 
Php非同期の技法
Php非同期の技法Php非同期の技法
Php非同期の技法
 
Predefを使ったsqlのトレース
Predefを使ったsqlのトレースPredefを使ったsqlのトレース
Predefを使ったsqlのトレース
 
結婚式の画像がどうしてもほしかった話
結婚式の画像がどうしてもほしかった話結婚式の画像がどうしてもほしかった話
結婚式の画像がどうしてもほしかった話
 
PHPべんちまーく
PHPべんちまーくPHPべんちまーく
PHPべんちまーく
 
PHP With Windows binary
PHP With Windows binaryPHP With Windows binary
PHP With Windows binary
 
5分でわかる静的解析入門
5分でわかる静的解析入門5分でわかる静的解析入門
5分でわかる静的解析入門
 
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)
 
Nltk for biginer
Nltk for biginerNltk for biginer
Nltk for biginer
 
Javascriptを書きたくないヒ トのためのPythonScript
Javascriptを書きたくないヒ トのためのPythonScriptJavascriptを書きたくないヒ トのためのPythonScript
Javascriptを書きたくないヒ トのためのPythonScript
 
プログラミング作法
プログラミング作法プログラミング作法
プログラミング作法
 
libpgenでパケット操作
libpgenでパケット操作libpgenでパケット操作
libpgenでパケット操作
 
第一回サーバー勉強友の会
第一回サーバー勉強友の会第一回サーバー勉強友の会
第一回サーバー勉強友の会
 
第二回サーバー勉強友の会
第二回サーバー勉強友の会第二回サーバー勉強友の会
第二回サーバー勉強友の会
 
久しぶりのPythonでgoogleのアレを制御してみた
久しぶりのPythonでgoogleのアレを制御してみた久しぶりのPythonでgoogleのアレを制御してみた
久しぶりのPythonでgoogleのアレを制御してみた
 
例外のlogを快適に
例外のlogを快適に例外のlogを快適に
例外のlogを快適に
 
hpingで作るパケット
hpingで作るパケットhpingで作るパケット
hpingで作るパケット
 
Linux で写真を操作 - 写真の管理、現像、投稿 -
Linux で写真を操作 - 写真の管理、現像、投稿 -Linux で写真を操作 - 写真の管理、現像、投稿 -
Linux で写真を操作 - 写真の管理、現像、投稿 -
 
Pynyumon03 LT
Pynyumon03 LTPynyumon03 LT
Pynyumon03 LT
 

Similar to PHP-FPMとuWSGI——mod_php以外の選択肢を探る

Arduino を PHP で制御する
Arduino を PHP で制御するArduino を PHP で制御する
Arduino を PHP で制御するKenichi Ahagon
 
Flumeを活用したAmebaにおける大規模ログ収集システム
Flumeを活用したAmebaにおける大規模ログ収集システムFlumeを活用したAmebaにおける大規模ログ収集システム
Flumeを活用したAmebaにおける大規模ログ収集システムSatoshi Iijima
 
NDS31 はじめてChrome App
NDS31 はじめてChrome AppNDS31 はじめてChrome App
NDS31 はじめてChrome Appcivic Sasaki
 
Should we write such like plugin or not?
Should we write such like plugin or not?Should we write such like plugin or not?
Should we write such like plugin or not?SATOSHI TAGOMORI
 
Rubyによるお手軽分散処理
Rubyによるお手軽分散処理Rubyによるお手軽分散処理
Rubyによるお手軽分散処理maebashi
 
Ruby で ffmpeg の filter_complex と戯れる話
Ruby で ffmpeg の filter_complex と戯れる話Ruby で ffmpeg の filter_complex と戯れる話
Ruby で ffmpeg の filter_complex と戯れる話ssuser551c92
 
Ruby で ffmpeg の filter_complex と戯れる話
Ruby で ffmpeg の filter_complex と戯れる話Ruby で ffmpeg の filter_complex と戯れる話
Ruby で ffmpeg の filter_complex と戯れる話Yoshikazu Kawashima
 
PHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしようPHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしようShohei Okada
 
PHP、おまえだったのか。 いつもHTTPメッセージを 運んでくれたのは。
PHP、おまえだったのか。 いつもHTTPメッセージを 運んでくれたのは。PHP、おまえだったのか。 いつもHTTPメッセージを 運んでくれたのは。
PHP、おまえだったのか。 いつもHTTPメッセージを 運んでくれたのは。sasezaki
 
Webサーバ勉強会 LT資料
Webサーバ勉強会 LT資料Webサーバ勉強会 LT資料
Webサーバ勉強会 LT資料学 松崎
 
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い sasezaki
 
真っ当な技術を使ったふつうのWebサービス開発
真っ当な技術を使ったふつうのWebサービス開発真っ当な技術を使ったふつうのWebサービス開発
真っ当な技術を使ったふつうのWebサービス開発Shota Nozaki
 
サーバを作ってみた (1)
サーバを作ってみた (1)サーバを作ってみた (1)
サーバを作ってみた (1)SeungYong Yoon
 
PHPとJavaScriptの噺
PHPとJavaScriptの噺PHPとJavaScriptの噺
PHPとJavaScriptの噺Shogo Kawahara
 
Raspberry Pi 2 誤自宅サーバー移行日記
Raspberry Pi 2 誤自宅サーバー移行日記Raspberry Pi 2 誤自宅サーバー移行日記
Raspberry Pi 2 誤自宅サーバー移行日記96smcln
 
Gitとローカル環境
Gitとローカル環境Gitとローカル環境
Gitとローカル環境Atsushi Ito
 

Similar to PHP-FPMとuWSGI——mod_php以外の選択肢を探る (20)

PHP meets NodeJS
PHP meets NodeJSPHP meets NodeJS
PHP meets NodeJS
 
Arduino を PHP で制御する
Arduino を PHP で制御するArduino を PHP で制御する
Arduino を PHP で制御する
 
Flumeを活用したAmebaにおける大規模ログ収集システム
Flumeを活用したAmebaにおける大規模ログ収集システムFlumeを活用したAmebaにおける大規模ログ収集システム
Flumeを活用したAmebaにおける大規模ログ収集システム
 
NDS31 はじめてChrome App
NDS31 はじめてChrome AppNDS31 はじめてChrome App
NDS31 はじめてChrome App
 
mruby os(案)の開発
mruby os(案)の開発mruby os(案)の開発
mruby os(案)の開発
 
Should we write such like plugin or not?
Should we write such like plugin or not?Should we write such like plugin or not?
Should we write such like plugin or not?
 
Rubyによるお手軽分散処理
Rubyによるお手軽分散処理Rubyによるお手軽分散処理
Rubyによるお手軽分散処理
 
Ruby で ffmpeg の filter_complex と戯れる話
Ruby で ffmpeg の filter_complex と戯れる話Ruby で ffmpeg の filter_complex と戯れる話
Ruby で ffmpeg の filter_complex と戯れる話
 
Ruby で ffmpeg の filter_complex と戯れる話
Ruby で ffmpeg の filter_complex と戯れる話Ruby で ffmpeg の filter_complex と戯れる話
Ruby で ffmpeg の filter_complex と戯れる話
 
PHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしようPHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしよう
 
PHP、おまえだったのか。 いつもHTTPメッセージを 運んでくれたのは。
PHP、おまえだったのか。 いつもHTTPメッセージを 運んでくれたのは。PHP、おまえだったのか。 いつもHTTPメッセージを 運んでくれたのは。
PHP、おまえだったのか。 いつもHTTPメッセージを 運んでくれたのは。
 
Webサーバ勉強会 LT資料
Webサーバ勉強会 LT資料Webサーバ勉強会 LT資料
Webサーバ勉強会 LT資料
 
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
 
真っ当な技術を使ったふつうのWebサービス開発
真っ当な技術を使ったふつうのWebサービス開発真っ当な技術を使ったふつうのWebサービス開発
真っ当な技術を使ったふつうのWebサービス開発
 
Ad stirの裏側
Ad stirの裏側Ad stirの裏側
Ad stirの裏側
 
サーバを作ってみた (1)
サーバを作ってみた (1)サーバを作ってみた (1)
サーバを作ってみた (1)
 
PHPとJavaScriptの噺
PHPとJavaScriptの噺PHPとJavaScriptの噺
PHPとJavaScriptの噺
 
Osc2014
Osc2014Osc2014
Osc2014
 
Raspberry Pi 2 誤自宅サーバー移行日記
Raspberry Pi 2 誤自宅サーバー移行日記Raspberry Pi 2 誤自宅サーバー移行日記
Raspberry Pi 2 誤自宅サーバー移行日記
 
Gitとローカル環境
Gitとローカル環境Gitとローカル環境
Gitとローカル環境
 

More from Yoshio Hanawa

自宅の消費電力をリアルタイムに グラフ化してみた
自宅の消費電力をリアルタイムに グラフ化してみた自宅の消費電力をリアルタイムに グラフ化してみた
自宅の消費電力をリアルタイムに グラフ化してみたYoshio Hanawa
 
Zend VMにおける例外の実装
Zend VMにおける例外の実装Zend VMにおける例外の実装
Zend VMにおける例外の実装Yoshio Hanawa
 
Zend VMにおける例外の実装
Zend VMにおける例外の実装Zend VMにおける例外の実装
Zend VMにおける例外の実装Yoshio Hanawa
 
ぼくのかんがえる
さいきょうの銀行振込
ぼくのかんがえる
さいきょうの銀行振込ぼくのかんがえる
さいきょうの銀行振込
ぼくのかんがえる
さいきょうの銀行振込Yoshio Hanawa
 
「OKグーグル! 銀行振込1000円」
「OKグーグル! 銀行振込1000円」「OKグーグル! 銀行振込1000円」
「OKグーグル! 銀行振込1000円」Yoshio Hanawa
 
浮動小数点数とOSSのバグの話
浮動小数点数とOSSのバグの話浮動小数点数とOSSのバグの話
浮動小数点数とOSSのバグの話Yoshio Hanawa
 
PHP拡張をPECLに登録してわかったこと
PHP拡張をPECLに登録してわかったことPHP拡張をPECLに登録してわかったこと
PHP拡張をPECLに登録してわかったことYoshio Hanawa
 
GitHubからお金をもらった話
GitHubからお金をもらった話GitHubからお金をもらった話
GitHubからお金をもらった話Yoshio Hanawa
 
iOS/macOSとAndroid/Linuxのサンドボックス機構について調べた
iOS/macOSとAndroid/Linuxのサンドボックス機構について調べたiOS/macOSとAndroid/Linuxのサンドボックス機構について調べた
iOS/macOSとAndroid/Linuxのサンドボックス機構について調べたYoshio Hanawa
 
realpathキャッシュと OPcacheの面倒すぎる関係
realpathキャッシュと OPcacheの面倒すぎる関係realpathキャッシュと OPcacheの面倒すぎる関係
realpathキャッシュと OPcacheの面倒すぎる関係Yoshio Hanawa
 
家庭用ブロードバンドルータ上でWordPressを動かそう
家庭用ブロードバンドルータ上でWordPressを動かそう家庭用ブロードバンドルータ上でWordPressを動かそう
家庭用ブロードバンドルータ上でWordPressを動かそうYoshio Hanawa
 
Laungage Update PHP編
Laungage Update PHP編Laungage Update PHP編
Laungage Update PHP編Yoshio Hanawa
 
PHPの拡張モジュールをGoで作る
PHPの拡張モジュールをGoで作るPHPの拡張モジュールをGoで作る
PHPの拡張モジュールをGoで作るYoshio Hanawa
 
GitHubにバグ報告して賞金$500を頂いた話
GitHubにバグ報告して賞金$500を頂いた話GitHubにバグ報告して賞金$500を頂いた話
GitHubにバグ報告して賞金$500を頂いた話Yoshio Hanawa
 
php-buildがいかに便利かを力説する
php-buildがいかに便利かを力説するphp-buildがいかに便利かを力説する
php-buildがいかに便利かを力説するYoshio Hanawa
 
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみたOPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみたYoshio Hanawa
 
PHP7の拡張モジュール事情
PHP7の拡張モジュール事情PHP7の拡張モジュール事情
PHP7の拡張モジュール事情Yoshio Hanawa
 
PHP7の内部実装から学ぶ性能改善テクニック
PHP7の内部実装から学ぶ性能改善テクニックPHP7の内部実装から学ぶ性能改善テクニック
PHP7の内部実装から学ぶ性能改善テクニックYoshio Hanawa
 
PHPの正規表現と最長一致
PHPの正規表現と最長一致PHPの正規表現と最長一致
PHPの正規表現と最長一致Yoshio Hanawa
 
PHP7で変わること ——言語仕様とエンジンの改善ポイント
PHP7で変わること ——言語仕様とエンジンの改善ポイントPHP7で変わること ——言語仕様とエンジンの改善ポイント
PHP7で変わること ——言語仕様とエンジンの改善ポイントYoshio Hanawa
 

More from Yoshio Hanawa (20)

自宅の消費電力をリアルタイムに グラフ化してみた
自宅の消費電力をリアルタイムに グラフ化してみた自宅の消費電力をリアルタイムに グラフ化してみた
自宅の消費電力をリアルタイムに グラフ化してみた
 
Zend VMにおける例外の実装
Zend VMにおける例外の実装Zend VMにおける例外の実装
Zend VMにおける例外の実装
 
Zend VMにおける例外の実装
Zend VMにおける例外の実装Zend VMにおける例外の実装
Zend VMにおける例外の実装
 
ぼくのかんがえる
さいきょうの銀行振込
ぼくのかんがえる
さいきょうの銀行振込ぼくのかんがえる
さいきょうの銀行振込
ぼくのかんがえる
さいきょうの銀行振込
 
「OKグーグル! 銀行振込1000円」
「OKグーグル! 銀行振込1000円」「OKグーグル! 銀行振込1000円」
「OKグーグル! 銀行振込1000円」
 
浮動小数点数とOSSのバグの話
浮動小数点数とOSSのバグの話浮動小数点数とOSSのバグの話
浮動小数点数とOSSのバグの話
 
PHP拡張をPECLに登録してわかったこと
PHP拡張をPECLに登録してわかったことPHP拡張をPECLに登録してわかったこと
PHP拡張をPECLに登録してわかったこと
 
GitHubからお金をもらった話
GitHubからお金をもらった話GitHubからお金をもらった話
GitHubからお金をもらった話
 
iOS/macOSとAndroid/Linuxのサンドボックス機構について調べた
iOS/macOSとAndroid/Linuxのサンドボックス機構について調べたiOS/macOSとAndroid/Linuxのサンドボックス機構について調べた
iOS/macOSとAndroid/Linuxのサンドボックス機構について調べた
 
realpathキャッシュと OPcacheの面倒すぎる関係
realpathキャッシュと OPcacheの面倒すぎる関係realpathキャッシュと OPcacheの面倒すぎる関係
realpathキャッシュと OPcacheの面倒すぎる関係
 
家庭用ブロードバンドルータ上でWordPressを動かそう
家庭用ブロードバンドルータ上でWordPressを動かそう家庭用ブロードバンドルータ上でWordPressを動かそう
家庭用ブロードバンドルータ上でWordPressを動かそう
 
Laungage Update PHP編
Laungage Update PHP編Laungage Update PHP編
Laungage Update PHP編
 
PHPの拡張モジュールをGoで作る
PHPの拡張モジュールをGoで作るPHPの拡張モジュールをGoで作る
PHPの拡張モジュールをGoで作る
 
GitHubにバグ報告して賞金$500を頂いた話
GitHubにバグ報告して賞金$500を頂いた話GitHubにバグ報告して賞金$500を頂いた話
GitHubにバグ報告して賞金$500を頂いた話
 
php-buildがいかに便利かを力説する
php-buildがいかに便利かを力説するphp-buildがいかに便利かを力説する
php-buildがいかに便利かを力説する
 
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみたOPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
 
PHP7の拡張モジュール事情
PHP7の拡張モジュール事情PHP7の拡張モジュール事情
PHP7の拡張モジュール事情
 
PHP7の内部実装から学ぶ性能改善テクニック
PHP7の内部実装から学ぶ性能改善テクニックPHP7の内部実装から学ぶ性能改善テクニック
PHP7の内部実装から学ぶ性能改善テクニック
 
PHPの正規表現と最長一致
PHPの正規表現と最長一致PHPの正規表現と最長一致
PHPの正規表現と最長一致
 
PHP7で変わること ——言語仕様とエンジンの改善ポイント
PHP7で変わること ——言語仕様とエンジンの改善ポイントPHP7で変わること ——言語仕様とエンジンの改善ポイント
PHP7で変わること ——言語仕様とエンジンの改善ポイント
 

PHP-FPMとuWSGI——mod_php以外の選択肢を探る

  • 1. PHP-FPMとuWSGI ̶̶ mod_php以外の選択肢を探る hnw 第66回PHP勉強会(2013/03/27) 発表資料 13年3月29日金曜日
  • 2. 自己紹介 @hnw / id:hnw 勤務先:KLab株式会社 カレーとバグが大好物 宣伝:php-timecopというPHP拡張を作りました https://github.com/hnw/php-timecop 13年3月29日金曜日
  • 3. 今日おはなしすること PHP環境の選択肢を紹介 PHP-FPM uWSGI + PHP plugin 動かしてみたよ! メリット・デメリットは? 13年3月29日金曜日
  • 4. PHP-FPM FPM: FastCGI Process Manager PHP標準のアプリケーションサーバ実装 PHP 5.3.3からバンドル PHP 5.4.0から公式サポート プロトコルはFastCGI 13年3月29日金曜日
  • 5. FastCGI Webサーバ・APサーバ間で使われるプロトコル Apache・nginx・lighttpdなどがサポート PHP以外の言語ではボチボチ利用される バイナリプロトコル 13年3月29日金曜日
  • 6. uWSGI Pythonでボチボチ使われているAPサーバ実装 多数の言語に対応(WSGI, PSGI, Rack, ...) embed SAPIを利用したPHPプラグインも提供 PHP界隈での知名度はゼロに近い 13年3月29日金曜日
  • 7. 動かしてみた(1) PHP-FPM 13年3月29日金曜日
  • 8. 動かしてみた(2) uWSGI + PHP plugin 13年3月29日金曜日
  • 9. 動かしてみた(3) Apache + mod_php 13年3月29日金曜日
  • 10. ミドルウェア構成 対称性からApache+mod_phpの前段にもnginxを入れた HTTP HTTP nginx nginx HTTP FastCGI Apache PHP-FPM mod_php 13年3月29日金曜日
  • 11. 前段のnginxいらなくね? 効用 前段のnginxの同時接続数を大きくできる 後段のAPサーバの同時接続数は下げられる APサーバだけロードバランシングすることも可能 前段をApacheにしても同じ効果が得られる 13年3月29日金曜日
  • 12. 速度の比較 有意な差は出なかった 1並列で500μs程度 10ms台のPHPを動かすなら誤差では? 13年3月29日金曜日
  • 13. メモリ消費量 起動直後にPHPを叩いてpsコマンドのRSSの値を比較 PHP-FPM : 3MB Apache + mod_php : 5MB uWSGI + PHP plugin : 6.5MB Apacheはチューニングの余地があるはず 13年3月29日金曜日
  • 14. ここまでのまとめ PHP-FPM、uWSGI + PHP pluginともに正常動作する 速度の差はほぼ無い 1プロセスあたりのメモリ消費量の差も誤差に近い 商用環境で試す人、追試をお願いします 13年3月29日金曜日
  • 15. PHP-FPMのメリット PHP公式サポートされていること 安定性が期待できる ロングサポートが期待できる 乗っかって後悔する可能性が少なそう 13年3月29日金曜日
  • 16. PHP-FPMの面白機能(1) slow_logが出せる n秒以上かかるアクセスを検出 n秒時点でのbacktraceも取れる (この機能だけはrootで起動する必要あり) 13年3月29日金曜日
  • 17. PHP-FPMの面白機能(2) 暇なときにプロセス数を勝手に減らす機能 「pm = ondemand」 10秒程度アクセスが無いと子プロセスが0個になってる 13年3月29日金曜日
  • 18. PHP-FPMの面白機能(3) fastcgi_finish_request() レスポンスを返した後、PHPの処理が継続できる APCが狂ったときに緊急再起動する機能 動作は未確認、期待通りに動くなら面白いかも 13年3月29日金曜日
  • 19. PHP-FPMのデメリット 実績が少ない 監視系はHTTPの方が既存資産が生かせそう 13年3月29日金曜日
  • 20. まとめ PHP-FPMは「普通」に使える実装 性能・安定性など特に不安点は無い Apache + mod_phpより気軽に試せるのは利点 uWSGIでもPHPが動くよ! 普通はPHP-FPMを選ぶ気がします… 13年3月29日金曜日
  • 21. ご静聴 ありがとう ございました 13年3月29日金曜日