下面是關於啓用 FastCGI SAPI 時的問題和 php-fpm 是如何解決他們的對比列表。
描述 |
php自帶的 |
spawn-fcgi + spawn-php.sh + daemontools |
php-fpm |
php守護進程化: pid file, log file, setsid(), setuid(), setgid(), chroot() |
(-) |
(+) |
(+) |
進程管理。可以用 "graceful" 來停止並啓動 php worker 進程而不會丟失請求。能夠平滑地升級配置和二進制程序而不丟失任何請求。 |
php4 (-), php5 (只有 graceful) |
(-) |
(+) |
嚴格限制來源請求的 web server 的 ip 地址 |
php4 (-) php5 (+) (從 |
(-) |
(+) |
根據負載動態調整進程數 |
(-) |
(-) |
Todo |
用不同的 uid/gid/chroot/environment 和不同的 php.ini 選項啓動 worder 進程。你不需要 safe mode 了! |
(-) |
(-) |
(+) |
記錄 worker 進程 stdout 和 stderr 日誌 |
(-) |
(-) |
(+) |
如果使用優化器,在共享內存意外破壞的情況下緊急重啓所有的進程 |
(-) |
(-) |
(+) |
如果 set_time_limit() 失敗,確保進程會結束 |
(-) |
(-) |
(+) |
特色功能 Error header、優化的上傳支持、fastcgi_finish_request() |
由對比來看,用php_fpm管理的好處是可以在不停止服務的情況下進行平滑啓動,
接下來再轉載另外一個測試結果:
php-fpm的使用非常方便,配置都是在php-fpm.ini的文件內
而啓動,重啓都可以從php/sbin/php-fpm中進行
更方便的是修改php.ini後可以直接使用php-fpm reload進行加載
無需殺掉進程就可以完成php.ini的修改加載
結果顯示使用php-fpm可以使php有不小的性能提升
而啓動,重啓都可以從php/sbin/php-fpm中進行
更方便的是修改php.ini後可以直接使用php-fpm reload進行加載
無需殺掉進程就可以完成php.ini的修改加載
結果顯示使用php-fpm可以使php有不小的性能提升
php-fpm控制的進程.cpu回收的速度比較慢.內存分配的很均勻
而spawn-cgi控制的進程CPU下降的很快.而內存分配的比較不均勻.
有很多進程似乎未分配到,而另外一些卻佔用很高.
可能是由於進程任務分配的不均勻導致的.而這也導致了總體響應速度的下降
而php-fpm合理的分配.導致總體響應的提高以及任務的平均
而spawn-cgi控制的進程CPU下降的很快.而內存分配的比較不均勻.
有很多進程似乎未分配到,而另外一些卻佔用很高.
可能是由於進程任務分配的不均勻導致的.而這也導致了總體響應速度的下降
而php-fpm合理的分配.導致總體響應的提高以及任務的平均