1. 程式人生 > 實用技巧 >PHP-FPM 講解

PHP-FPM 講解

>>> hot3.png

PHP-FPM是一個PHPFastCGI程序管理器,是隻用於PHP的。
PHP-FPM其實是PHP原始碼的一個補丁,旨在將FastCGI程序管理整合進PHP包中。必須將它patch到你的PHP原始碼中,在編譯安裝PHP後才可以使用。
現在我們可以在最新的PHP 5.3.2的原始碼樹裡下載得到直接整合了PHP-FPM的分支,據說下個版本會融合進PHP的主分支去。相對Spawn-FCGI,PHP-FPM在CPU和記憶體方面的控制都更勝一籌,而且前者很容易崩潰,必須用crontab進行監控,而PHP-FPM則沒有這種煩惱。
PHP5.3.3已經整合php-fpm了,不再是第三方的包了。PHP-FPM提供了更好的PHP程序管理方式,可以有效控制記憶體和程序、可以平滑過載PHP配置,比spawn-fcgi具有更多優點,所以被PHP官方收錄了。

在./configure的時候帶 –enable-fpm引數即可開啟PHP-FPM。
使用PHP-FPM來控制PHP-CGI的FastCGI程序
/usr/local/php/sbin/php-fpm{start|stop|quit|restart|reload|logrotate}
--start 啟動php的fastcgi程序
--stop 強制終止php的fastcgi程序
--quit 平滑終止php的fastcgi程序
--restart 重啟php的fastcgi程序
--reload 重新平滑載入php的php.ini
--logrotate 重新啟用log檔案

php-fpm有兩種執行方式, 與Apache一樣,他的程序數也是可以根據設定分為動態和靜態的,一種是直接開啟指定數量的php-fpm程序,不再增加或者減少;另一種則是開始的時候開啟一定數量的php-fpm程序,當請求量變大的時候,動態的增加php-fpm程序數到上限,當空閒的時候自動釋放空閒的程序數到一個下限。

這兩種不同的執行方式,可以根據伺服器的實際需求來進行調整。

這裡先說一下涉及到這個的幾個引數吧,他們分別是pmpm.max_childrenpm.start_serverspm.min_spare_serverspm.max_spare_servers

pm表示使用那種方式,有兩個值可以選擇,就是static(靜態)或者dynamic(動態)。在更老一些的版本中,dynamic被稱作apache-like。這個要注意看配置檔案給出的說明了。

下面4個引數的意思分別為:

pm.max_children:靜態方式下開啟的php-fpm程序數量。
pm.start_servers:動態方式下的起始php-fpm程序數量。


pm.min_spare_servers:動態方式下的最小php-fpm程序數量。
pm.max_spare_servers:動態方式下的最大php-fpm程序數量。

如果dm設定為static,那麼只有pm.max_children這個引數生效。系統會開啟設定的數個php-fpm程序。

如果dm設定為dynamic,那麼pm.max_children引數失效,後面3個引數生效。系統會在php-fpm執行開始的時候啟動 pm.start_servers個php-fpm程序,然後根據系統的需求動態在pm.min_spare_servers和 pm.max_spare_servers之間調整php-fpm程序數。

那麼,對於我們的伺服器,選擇哪種執行方式比較好呢?事實上,跟Apache一樣,我們執行的PHP程式在執行完成後,或多或少會有記憶體洩露的問 題。這也是為什麼開始的時候一個php-fpm程序只佔用3M左右記憶體,執行一段時間後就會上升到20-30M的原因了。所以,動態方式因為會結束掉多餘 的程序,可以回收釋放一些記憶體,所以推薦在記憶體較少的伺服器或者VPS上使用。具體最大數量根據 記憶體/20M 得到。比如說512M的VPS,建議pm.max_spare_servers設定為20。至於pm.min_spare_servers,則建議根據服 務器的負載情況來設定,比較合適的值在5~10之間。

然後對於比較大記憶體的伺服器來說,設定為靜態的話會提高效率。因為頻繁開關php-fpm程序也會有時滯,所以記憶體夠大的情況下開靜態效果會更好。數量也可以根據 記憶體/30M 得到。比如說2GB記憶體的伺服器,可以設定為50;4GB記憶體可以設定為100等。

DEMO引數如下:

pm=dynamic
pm.max_children=20
pm.start_servers=5
pm.min_spare_servers=5
pm.max_spare_servers=20

這樣就可以最大的節省記憶體並提高執行效率。

-----------------------------------------------------------------------------------

nginx php-fpm效能優化設定

轉載:http://blog.haohtml.com/archives/9280

When you running a highload website with PHP-FPM via FastCGI, the following tips may be useful to you : )
如果您高負載網站使用PHP-FPM管 理FastCGI,這些技巧也許對您有用:)
1. Compile PHP’s modules as less as possible, the simple the best (fast);
1.儘量少安裝PHP模組,最簡單是最好(快)的
2. Increas PHP FastCGI child number to 100 and even more. Sometime, 200 is OK! ( On 4GB memory server);
2.把您的PHP FastCGI子程序數調到100或以上,在4G記憶體的伺服器上200就可以
注:我的1g測試機,開64個是最好的,建議使用壓力測試獲取最佳值

3. Using SOCKET PHP FastCGI, and put into /dev/shm on Linux;
3.使用socket連線FastCGI,linux作業系統可以放在 /dev/shm中
注: 在php-fpm.cnf 裡設定<value name="listen_address">/tmp/nginx.socket</value>就可以通過socket連線 FastCGI了,/dev/shm是記憶體檔案系統,放在記憶體中肯定會快了

4. Increase Linux “max open files”, using the following command (must be root):
# echo ‘ulimit -HSn 65536′ >> /etc/profile
# echo ‘ulimit -HSn 65536 >> /etc/rc.local
# source /etc/profile
4.調高linux核心開啟檔案數量,可以使用這些命令(必須是root帳號)
echo 'ulimit -HSn 65536' >> /etc/profile
echo 'ulimit -HSn 65536' >> /etc/rc.local
source /etc/profile
注:我是修改/etc/rc.local,加入ulimit -SHn 51200的
5. Increase PHP-FPM open file description rlimit:
# vi /path/to/php-fpm.conf
Find “<value name=”rlimit_files”>1024</value>”
Change 1024 to 4096 or higher number.
Restart PHP-FPM.
5. 增加 PHP-FPM 開啟檔案描述符的限制:
# vi /path/to/php-fpm.conf
找到“<value name="rlimit_files">1024</value>”
把1024 更改為 4096 或者更高.
重啟 PHP-FPM.
6. Using PHP code accelerator, e.g eAccelerator, XCache. And set “cache_dir” to /dev/shm on Linux.
6.使用php程式碼加速器,例如 eAccelerator, XCache.在linux平臺上可以把`cache_dir`指向 /dev/shma

推薦:
Nginx優化配置http://blog.haohtml.com/archives/6213


轉載於:https://my.oschina.net/denglz/blog/404496