溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何配置PHP最大連接數(shù)及php-fpm高并發(fā)參數(shù)

發(fā)布時(shí)間:2020-12-25 09:47:38 來源:億速云 閱讀:1743 作者:小新 欄目:編程語言

小編給大家分享一下如何配置PHP最大連接數(shù)及php-fpm高并發(fā)參數(shù),相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

服務(wù)器中找到php-fpm.conf配置(有的會在引入的www.conf中)

[global]
pid = /usr/local/php/var/run/php-fpm.pid
error_log = /usr/local/php/var/log/php-fpm.log
log_level = notice

[www]
listen = /tmp/php-cgi.sock
listen.backlog = -1
listen.allowed_clients = 127.0.0.1
listen.owner = www
listen.group = www
listen.mode = 0666
user = www
group = www
pm = static
pm.max_children = 200
pm.start_servers = 40
pm.min_spare_servers = 10
pm.max_spare_servers = 20
pm.max_requests=1000
request_terminate_timeout = 100
request_slowlog_timeout = 0
slowlog = var/log/slow.log 

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

pm.max_children=30
pm.max_requests=500
pm.start_servers=4
pm.max_spare_servers=30

一. pm= static

首先說一下pm這個(gè)值   pm = dynamic 這個(gè)是php的進(jìn)程數(shù)是動態(tài)的  會根據(jù)訪問量來確定來回增加

而在高負(fù)載的php環(huán)境下我推薦設(shè)置  pm= static php-fpm進(jìn)程數(shù)固定

二.  pm.max_children=???

當(dāng)用靜態(tài)模式下 進(jìn)程數(shù)確定根據(jù) pm.max_children來進(jìn)進(jìn)行確定    那么問題來了我的服務(wù)器應(yīng)該設(shè)定多少php-fpm呢 ?

從理論的角度上說php-fpm進(jìn)程數(shù)越多越好,相當(dāng)于一個(gè)酒店有很多個(gè)充足的服務(wù)員來為你服務(wù)肯定會比較爽啊 ,你也不需要等待。

但是。。。?,F(xiàn)實(shí)上總是殘酷的   php-fpm的進(jìn)程數(shù)會受到你的內(nèi)存大小的限制。一般情況下我們    進(jìn)程數(shù) =用機(jī)器內(nèi)存(M)除以2  再除以20(M);

當(dāng)然這個(gè)也不是絕對的   你需要知道:

1、你可以分配給php多大內(nèi)存 :你的服務(wù)器上是不是單純的php服務(wù)器  有沒有比較耗費(fèi)內(nèi)存的其他程序(mysql)。

2、你的每個(gè)php-fpm內(nèi)存占多大 :內(nèi)存占用多大要根據(jù)你的php代碼質(zhì)量和處理的相關(guān)業(yè)務(wù)。當(dāng)然你可以用命令去統(tǒng)計(jì)你的php-fpm平均占用內(nèi)存大小。

有人會問我如果設(shè)置不恰當(dāng)會有什么狀況出現(xiàn)呢?

    當(dāng)數(shù)值偏小時(shí)請求到nginx會無法分配到php-fpm進(jìn)程 導(dǎo)致502錯(cuò)誤   如何配置PHP最大連接數(shù)及php-fpm高并發(fā)參數(shù)

  當(dāng)數(shù)值偏大如果沒有大訪問量還好  如果訪問量較大的話 內(nèi)存都會被php占光了。導(dǎo)致系統(tǒng)響應(yīng)緩慢   cpu-system  升高 系統(tǒng)不斷的去調(diào)整內(nèi)存分配

嚴(yán)重時(shí)會導(dǎo)致較高的 cup-wait 較高   內(nèi)存不夠用了  直接寫磁盤  磁盤io直線增加 。cpu使用率也開始爆滿。(如圖所示)

    如何配置PHP最大連接數(shù)及php-fpm高并發(fā)參數(shù)

三.request_terminate_timeout

  計(jì)算方式如下:如果你的服務(wù)器性能足夠好,且寬帶資源足夠充足,PHP腳本沒有循環(huán)或BUG的話你可以直接將”request_terminate_timeout”設(shè) 置成0s。0s的含義是讓PHP-CGI一直執(zhí)行下去而沒有時(shí)間限制。

   而如果你做不到這一點(diǎn),也就是說你的PHP-CGI可能出現(xiàn)某個(gè)BUG,或者你的寬帶不夠充足或者其他的原因?qū)е履愕腜HP-CGI能夠假死那么就建議你給”request_terminate_timeout”賦一個(gè)值,這個(gè)值可以根 據(jù)你服務(wù)器的性能進(jìn)行設(shè)定。

一般來說性能越好你可以設(shè)置越高,20分鐘-30分鐘都可以。由于我的服務(wù)器PHP腳本需要長時(shí)間運(yùn)行,有的可能會超過10分鐘因此我設(shè)置了900秒,這樣不會導(dǎo)致PHP-CGI死掉而出現(xiàn)502 Bad gateway這個(gè)錯(cuò)誤。

四.pm.max_requests

這個(gè)參數(shù)的含義是php-fpm工作進(jìn)程處理完多少請求后自動重啟,主要目的就是為了控制請求處理過程中的內(nèi)存溢出,使得內(nèi)存占用在一個(gè)可接受的范圍內(nèi)。比較適用于服務(wù)器搭載項(xiàng)目比較雜亂,有點(diǎn)請求會比較占用內(nèi)存

導(dǎo)致php-fpm占用比較大。在經(jīng)過一定次數(shù)請求后會結(jié)束掉進(jìn)程,釋放自己的內(nèi)存。如果這個(gè)值太小就會導(dǎo)致所有的工作進(jìn)程幾乎同時(shí)達(dá)到這個(gè)值并且進(jìn)入需要重啟的狀態(tài),當(dāng)所有的工作進(jìn)程都在同一時(shí)刻重啟就會發(fā)生在

  數(shù)秒內(nèi)甚至更長的時(shí)間PHP將停止響應(yīng)直到所有的進(jìn)程均重啟完為止。這是不能接受的,所以我一般會把這個(gè)值設(shè)置為PHP啟動后第一批工作進(jìn)程達(dá)到此值需要重啟時(shí),第一個(gè)進(jìn)程重啟與最后一個(gè)進(jìn)程重啟之間的時(shí)間相差

  1分鐘以上,一般在壓力比較大的晚上這個(gè)差值將會擴(kuò)大到5分鐘左右,此時(shí)對進(jìn)程重啟對服務(wù)器的負(fù)面影響就可以忽略了。

下面補(bǔ)充幾個(gè)命令統(tǒng)計(jì)相關(guān)php-fpm 相關(guān)數(shù)據(jù)

1、查看php-fpm的進(jìn)程個(gè)數(shù)

ps -ef |grep "php-fpm"|grep "pool"|wc -l

2、查看每個(gè)php-fpm占用的內(nèi)存大小

ps -ylC php-fpm --sort:rss

3.查看PHP-FPM在你的機(jī)器上的平均內(nèi)存占用

ps --no-headers -o "rss,cmd" -C php-fpm | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"M") }'

4.查看單個(gè)php-fpm進(jìn)程消耗內(nèi)存的明細(xì)

pmap $(pgrep php-fpm) | less

重啟php-fpm

1. 停止命令
 
 pkill php-fpm
 
2.重啟或啟動命令
 
php-fpm -R

或
/alidata/server/php/sbin/php-fpm

以上是“如何配置PHP最大連接數(shù)及php-fpm高并發(fā)參數(shù)”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI