php-fpm是乙個php fastcgi管理器,php-fpm.conf配置檔案用於控制php-fpm管理程序的相關引數,比如工作子程序的數量、執行許可權、監聽埠、慢請求等等。我們在編譯安裝php的時,在./configure的時候帶 –enable-fpm引數即可開啟php-fpm。php-fpm配置檔案為 php-fpm.conf,其語法類似 php.ini 。一般我們可以在安裝目錄中找到:
/usr/local/php/etc/php-fpm.conf,如果沒有的話,那就可能在/usr/local/php/etc/php-fpm.d/.conf*。
[global]
pid = /usr/local/php/var/run/php-fpm.pid
error_log = /usr/local/php/var/log/php-fpm.log
log_level = notice
pid:設定pid檔案的位置。
error_log:錯誤日誌的位置
log_level:錯誤級別。可用級別為:alert(必須立即處理),error(錯誤情況),warning(警告情況),notice(一般重要資訊),debug(除錯資訊)。預設:notice。
在fpm中,可以使用不同的設定來執行多個程序池。 這些設定可以針對每個程序池單獨設定,在預設的php-fpm程序池的配置檔案中,開頭是[www]。
[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 = dynamic
pm.max_children = 51
pm.start_servers = 20
pm.min_spare_servers = 20
pm.max_spare_servers = 40
request_terminate_timeout = 100
request_slowlog_timeout = 0
slowlog = var/log/slow.log
listen:設定接受 fastcgi 請求的位址。可用格式為:'ip:port','port','/path/to/unix/socket'。我們這裡配置/tmp/php-cgi.sock,使用unix域socket因為不走網路,可以提高nginx和php-fpm通訊的效能,但在高併發的情況下可能不穩定,這時我們需要設定下乙個引數backlog。
當然你也可以設定為127.0.0.1:9000,但我不建議使用。據nginx.conf中的配置fastcgi_pass unix:/tmp/php-cgi.sock;設定php監聽,:讓nginx支援php。
listen.backlog:設定 listen 的半連線佇列長度,-1表示無限制,由作業系統決定。
listen.allowed_clients:允許訪問fastcgi程序的ip白名單,設定any為不限制ip,如果要設定其他主機的nginx也能訪問這台fpm程序,listen處要設定成本地可被訪問的ip。預設值是any。每個位址是用逗號分隔. 如果沒有設定或者為空,則允許任何伺服器請求連線。我把它設定為127.0.0.1,即只有當前裝置能把請求**給php-fpm程序池。
listen.owner:執行所使用的使用者和組,我們這裡設定為www使用者組,許可權為 0666。
listen.group:同上,設定為www。
listen.mode:同上,設定為0666。
user:fpm 程序執行的系統使用者。必須設定,這裡我們設定為www,即非root使用者。
group:fpm 程序執行的系統使用者組。如果沒有設定,則預設使用者的組被使用。
pm:設定程序管理器如何管理子程序。可用值:static,ondemand,dynamic。dynamic表示php-fpm程序數是動態的,最開始是pm.start_servers指定的數量,如果請求較多,則會自動增加,保證空閒的程序數不小於pm.min_spare_servers,如果程序數較多,也會進行相應清理,保證多餘的程序數不多於pm.max_spare_servers。static表示php-fpm程序數是靜態的, 程序數自始至終都是pm.max_children指定的數量,不再增加或減少。
pm.max_children:靜態方式下開啟的php-fpm程序數量,這個設定沒有絕對正確的值。一般應用的php程序需要消耗10~30mb記憶體,假設我們使用的伺服器裝置為這個php-fpm程序池分配1024m記憶體,那麼我們可以將這個值設定為(1024mb記憶體)/(每個程序使用20m)= 51個程序。
pm.start_servers:動態方式下的起始php-fpm程序數量,即當php-fpm啟動時,php-fpm程序池中立即可用的程序數,我一般設定這個值為10。
pm.min_spare_servers:動態方式下的最小php-fpm程序數量,如果php空閒時,php-fpm程序池中科院存在程序數量的最小值。這個值一般與pm.start_servers設定的值一樣,所以我這裡也設定為10。
pm.max_spare_servers:動態方式下的最大php-fpm程序數量,如果空閒程序大於此值,則進行清理。這個值設定的要比pm.start_servers大。
對於記憶體大的伺服器(比如8g以上)來說,建議指定靜態的max_children值,因為這樣不需要進行額外的程序數目控制,會提高效率。因為頻繁開關php-fpm程序也會有時滯,所以記憶體夠大的情況下開靜態效果會更好。數量也可以根據 記憶體/30m 得到,比如8gb記憶體可以設定為100,那麼php-fpm耗費的記憶體就能控制在 2g-3g的樣子。
如果記憶體稍微小點,比如1g,那麼指定靜態的程序數量更加有利於伺服器的穩定。這樣可以保證php-fpm只獲取夠用的記憶體,將不多的記憶體分配給其他應用去使用,會使系統的執行更加暢通。
request_terminate_timeout:最大執行時間, 在php.ini中也可以進行配置(max_execution_time),這個是用來處理因為php執行時間超長而報502錯誤的解決。
request_slowlog_timeout:當乙個請求超過該設定的超時時間後,就會將對應的php呼叫堆疊資訊完整寫入到慢日誌中。 設定為 '0' 表示 'off',正常生產環境中我們把它設定為0。
slowlog:慢請求的記錄日誌。
我們有時候會經常飽受500,502問題困擾。當nginx收到如上錯誤碼時,可以確定後端php-fpm解析php出了某種問題,比如,執行錯誤,執行超時。這個時候,我們是可以開啟慢日誌功能的。比如設定request_slowlog_timeout:10s,當乙個請求時長超過該設定的超時時間10秒後,就會將對應的php呼叫堆疊資訊完整寫入到慢日誌中。 php-fpm慢日誌會記錄下程序號,指令碼名稱,具體哪個檔案哪行**的哪個函式執行時間過長等資訊。
設定好後,執行以下命令重啟php-fpm主程序使配置生效。
/etc/init.d/php-fpm restart
或者關注咱們下面的知乎專欄
php7高階架構師zhuanlan.zhihu.com
PHP配置優化 php fpm配置解讀
php fpm是乙個php fastcgi管理器,php fpm.conf配置檔案用於控制php fpm管理程序的相關引數,比如工作子程序的數量 執行許可權 監聽埠 慢請求等等。我們在編譯安裝php的時,在.configure的時候帶 enable fpm引數即可開啟php fpm。php fpm配...
php fpm配置引數優化
常用的linux 查詢程序狀況命令 從下圖可以看出當前php fpm所有程序平均每個程序占用了60 70mb的記憶體,啟動時間,是當天的話就是3 12,否則會顯示是x月x日。php fpm.conf就是php fpm的配置檔案,路徑一般在 usr local php etcphp fpm.conf幾...
PHP FPM 輸出PHP錯誤日誌
nginx是乙個web伺服器,因此nginx的access日誌只有對訪問頁面的記錄,不會有php 的 error log資訊。nginx把對php的請求發給php fpm fastcgi程序來處理,預設的php fpm只會輸出php fpm的錯誤資訊,在php fpm的errors log裡也看不到...