Linux系統配置多實例php-fpm服務

Linux系統上目前主要使用Apache和php-fpm來解析運行PHP Web程序。php-fpm僅支持多進程,Apache支持多進程和多線程,但絕大多數環境中均爲多進程方式,這裏也只討論多進程。

從實踐來看,單實例最多可以開到200-300左右的進程,開到500以上就容易出錯了。
每個進程佔用的內存在5M-15M左右,按平均10M計算,500個進程也只有5G,而現在很多高性能機都是64G甚至128G的內存,這樣單實例是無法全面使用上內存資源的。

這幾年部署過的多實例環境並不多,因爲訪問量不是十分高的話,是用不上的。
上次配置多實例是一個100萬左右PV的Discuz論壇,配置之後是很有效的。現在做的這個是千萬PV的靜態站,請求主要在點擊計數上,在300和500之間調整進程數還是會偶爾的掛掉,機器配置是足夠用的,是穩定性的問題。

LNMP或者LNAMP環境的配置這裏不做介紹,只講在LNMP環境的基礎上配置多實例的過程。因爲我在使用的是LNAMP環境,所以額外編譯一份php到/usr/local/php-fpm/,配置文件在/etc/php-fpm/,並在此基礎上做的筆記。



先修改三個值:
1,以static方式,也就是固定進程數量運行php-fpm。
2,每個實例建立100個worker進程。(不宜太多,避免不穩定)
3,每個進程執行完200次請求即退出。(避免PHP的內存泄露問題,也就是內存越用越多)

sed -i 's#pm = dynamic#pm = static#' /etc/php-fpm/php-fpm.conf
sed -i 's#pm.max_children = 5#pm.max_children = 100#' /etc/php-fpm/php-fpm.conf
sed -i 's#;pm.max_requests = 500#pm.max_requests = 200#' /etc/php-fpm/php-fpm.conf


以下爲複製php-fpm.conf和php-fpm服務管理腳本的命令

cd /etc/php-fpm/
cp php-fpm.conf  php-fpm-1.conf
sed -i 's#listen = 127.0.0.1:9000#listen = 127.0.0.1:9001#' php-fpm-1.conf
sed -i 's#\[www\]#\[php-fpm-pool-1\]#' php-fpm-1.conf
sed -i 's#pid = run/php-fpm.pid#pid = run/php-fpm-1.pid#' php-fpm-1.conf

cd /etc/init.d/
cp php-fpm  php-fpm-1
sed -i 's#/etc/php-fpm/php-fpm.conf#/etc/php-fpm/php-fpm-1.conf#' php-fpm-1
sed -i 's#/var/run/php-fpm.pid#/var/run/php-fpm-1.pid#' php-fpm-1

service php-fpm-1 restart

執行完上面的命令即複製了一份php-fpm,服務名和配置文件名均爲php-fpm-1。
再複製更多份,把上面的命令上的-1替換爲-2,listen監聽端口往上修改,然後再執行一遍就OK。

然後寫一個restart_php_fpm.sh的文件,內容爲

service php-fpm-1 restart
service php-fpm-2 restart
service php-fpm-3 restart
... ...

可以用來啓動和重啓所有的php-fpm實例。關閉用命令killall php-fpm即可。

然後是Nginx配置。
在http段加入:

upstream php-fpm-pool {  
    server 127.0.0.1:9001;
    server 127.0.0.1:9002;
    server 127.0.0.1:9003;
    server 127.0.0.1:9004;
    server 127.0.0.1:9005;
}

修改server段:

location ~ .*\.(php|php5)?$ {
    fastcgi_pass php-fpm-pool;
    fastcgi_index index.php;
    include fastcgi.conf;
}

配置結束。

多實例在效果上基本等於多臺機器的負載均衡,但是我個人還是比較傾向於在單臺上配置多實例(累加資源相等的情況下),在一臺機器上配置、維護、使用都要方便的多


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章