php怎麼設定並行連線數

2021-09-26 19:00:29

php設定並行連線數的方法:1、找到php-fpm.conf設定;2、編輯選項【pm= static】、【request_terminate_timeout】、【pm.max_requests】。

本文操作環境:windows10系統、php 7、thinkpad t480電腦。

首先我們需要在伺服器中找到php-fpm.conf設定(也有可能會在引入的www.fong設定中)

找到如下內容:

[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這個值 pm = dynamic 這個是php的程序數是動態的 會根據存取量來確定來回增加

而在高負載的php環境下我推薦設定 pm= static php-fpm程序數固定

二. pm.max_children=???

當用靜態模式下 程序數確定根據 pm.max_children來進進行確定 那麼問題來了我的伺服器應該設定多少php-fpm呢 ?

從理論的角度上說php-fpm程序數越多越好,相當於一個酒店有很多個充足的服務員來為你服務肯定會比較爽啊 ,你也不需要等待。

但是。。。。現實上總是殘酷的 php-fpm的程序數會受到你的記憶體大小的限制。一般情況下我們 程序數 =用機器記憶體(M)除以2 再除以20(M);

當然這個也不是絕對的 你需要知道:

你可以分配給php多大記憶體 :你的伺服器上是不是單純的php伺服器 有沒有比較耗費記憶體的其他程式(mysql)。 你的每個php-fpm記憶體佔多大 :記憶體佔用多大要根據你的php程式碼品質和處理的相關業務。當然你可以用命令去統計你的php-fpm平均佔用記憶體大小。

有人會問我如果設定不恰當會有什麼狀況出現呢?

當數值偏小時請求到nginx會無法分配到php-fpm程序 導致502錯誤

b84533a9dbf5b505ff5abb4564b8cf8.png

當數值偏大如果沒有大存取量還好 如果存取量較大的話 記憶體都會被php佔光了。導致系統響應緩慢 cpu-system 升高 系統不斷的去調整記憶體分配

嚴重時會導致較高的 cup-wait 較高 記憶體不夠用了 直接寫磁碟 磁碟io直線增加 。cpu使用率也開始爆滿。(如圖所示)

07d406dd10da893862b7e501b182c17.png

三.request_terminate_timeout

計算方式如下:如果你的伺服器效能足夠好,且寬頻資源足夠充足,PHP指令碼沒有迴圈或BUG的話你可以直接將」request_terminate_timeout」設 置成0s。0s的含義是讓PHP-CGI一直執行下去而沒有時間限制。

而如果你做不到這一點,也就是說你的PHP-CGI可能出現某個BUG,或者你的寬頻不夠充足或者其他的原因導致你的PHP-CGI能夠假死那麼就建議你給」request_terminate_timeout」賦一個值,這個值可以根 據你伺服器的效能進行設定。

一般來說效能越好你可以設定越高,20分鐘-30分鐘都可以。由於我的伺服器PHP指令碼需要長時間執行,有的可能會超過10分鐘因此我設定了900秒,這樣不會導致PHP-CGI死掉而出現502 Bad gateway這個錯誤。

四.pm.max_requests

這個引數的含義是php-fpm工作程序處理完多少請求後自動重新啟動,主要目的就是為了控制請求處理過程中的記憶體溢位,使得記憶體佔用在一個可接受的範圍內。比較適用於伺服器搭載專案比較雜亂,有點請求會比較佔用記憶體

導致php-fpm佔用比較大。在經過一定次數請求後會結束掉程序,釋放自己的記憶體。如果這個值太小就會導致所有的工作程序幾乎同時達到這個值並且進入需要重新啟動的狀態,當所有的工作程序都在同一時刻重新啟動就會發生在

數秒內甚至更長的時間PHP將停止響應直到所有的程序均重新啟動完為止。這是不能接受的,所以我一般會把這個值設定為PHP啟動後第一批工作程序達到此值需要重新啟動時,第一個程序重新啟動與最後一個程序重新啟動之間的時間相差

1分鐘以上,一般在壓力比較大的晚上這個差值將會擴大到5分鐘左右,此時對程序重新啟動對伺服器的負面影響就可以忽略了。

下面補充幾個命令統計相關php-fpm 相關資料

1、檢視php-fpm的程序個數

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

2、檢視每個php-fpm佔用的記憶體大小

ps -ylC php-fpm --sort:rss

3.檢視PHP-FPM在你的機器上的平均記憶體佔用

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

4.檢視單個php-fpm程序消耗記憶體的明細

pmap $(pgrep php-fpm) | less

重新啟動php-fpm

1. 停止命令
  
 pkill php-fpm
  
2.重新啟動或啟動命令
  
php-fpm -R
 
或
/alidata/server/php/sbin/php-fpm

推薦學習:

以上就是php怎麼設定並行連線數的詳細內容,更多請關注TW511.COM其它相關文章!