1. 程式人生 > >php-fpm多實例運行

php-fpm多實例運行

static 一個 pre conf 重啟 http onf pid 替換

本文主要針對如何通過配置php-fpm多實例,及nginx對多實例負載均衡之配置,不涉及安裝。
從實踐來看,單實例最多可以開到200-300左右的進程,開到500以上就容易出錯了。
每個進程占用的內存在5M-15M左右,按平均10M計算,500個進程也只有5G,而現在很多高性能機都是64G甚至128G的內存,這樣單實例是無法全面使用上內存資源的。

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;
}

配置結束。

php-fpm多實例運行