首頁 後端開發 php教程 php-fpm.conf設定檔中文及重要參數說明

php-fpm.conf設定檔中文及重要參數說明

Aug 08, 2020 pm 04:47 PM
php-fpm 設定檔

php-fpm.conf設定檔中文及重要參數說明

#php-fpm工作流程

php-fpm全名是PHP FastCGI進程管理器

php-fpm啟動後會先讀php.ini,然後再讀對應的conf設定文件,conf配置可以覆寫php.ini的設定。

啟動php-fpm之後,會建立一個master進程,監聽9000埠(可設定),master程序又會根據fpm.conf/www.conf去建立若干子程序,子程序用來處理實際的業務。

當有客戶端(例如nginx)來連接9000埠時,空閒子程序會自己去accept,如果子行程全部處於忙碌狀態,新進的待accept的連線會被master放進佇列裡,等待fpm子程序空閒;

這個存放待accept的半連接的佇列有多長,由 listen.backlog 配置。

相關學習推薦:php程式設計(影片)

#配置裡面的所有相對路徑,都是相對於php的安裝路徑。

除了有php-fpm.conf設定檔外,通常還有其他的*.conf設定檔(也可以不要,直接在php-fpm.conf設定)用來設定進程池,不同的進程池可以用不同的使用者執行,監聽不同的端口,處理不同的任務;多個進程池共用一個全域配置。

include=/opt/remi/php56/root/etc/php-fpm.d/*.conf 載入其他的設定檔。

php-fpm全域設定參數中文說明:

pid = /opt/remi/php56/root/var/run/php-fpm/php-fpm.pid 
#pid進程文件,預設為none。

error_log = /opt/remi/php56/root/var/log/php-fpm/error.log 
#錯誤日誌位置,預設:安裝路徑#INSTALL_PREFIX#/log/php-fpm. log。如果設定為syslog,log就會傳送給syslogd服務而不會寫入檔案裡。

syslog.facility = daemon 
#把日誌寫進系統log,linux還不夠熟悉,暫時不用理會。

syslog.ident = php-fpm 
#系統日誌標示,如果跑了多個fpm進程,就需要用這個來區分日誌是誰的。

log_level = notice 
#日誌等級,預設notice,可選:alert, error, warning, notice, debug

emergency_restart_threshold = 60 
#配合下面emergency_restart_interval參數

emergency_restart_interval = 60s 
#如果在此參數設定的時間內,出現SIGSEGV或SIGBUS的子程序數超過emergency_restart_threshold參數設定的值,那麼fpm就會優雅的重啟,值是0表示這個功能值是0表示這個函數,可用的單位有:s秒,m分,h時,d天。

process_control_timeout = 0 
#設定子程序接受主程序復用訊號的逾時時間。這個每天明白,是過了這個時間就不能重複使用了?

process.max = 128 
#當動態管理子進程時,fpm最多能fork多少個進程,0表示無限制,這是所有進程池能啟動子進程的總和,謹慎使用。

process.priority = -19 
#設定子進程的優先權,在master進程以root用戶啟動時有效;如果沒有設置,子進程會繼承master進程的優先權,值範圍- 19(最高)到20(最低),預設不設定。

daemonize = yes 
#設定成no用於偵錯bug,預設為yes。

rlimit_files = 1024 
#設定master進程最多能開啟的文件,預設為系統的值。

rlimit_core = 0 
#master進程核心rlimit限制值;可選unlimited或>=0的整數,預設為系統的值。

events.mechanism = epoll 
#事件處理機制,預設自動偵測,可選值:select,poll,epoll(linux>=2.5.44),kqueue,/dev/poll,port

systemd_interval = 10s 
#當fpm被設定為系統服務時,多久向伺服器報告一次狀態,單位有s,m,h。

php-fpm進程池設定pool Definitions:

在不同的監聽埠和不同的管理選項下可以跑任意數量的池,並沒有個數限制;

池的名字用於logs 和stats。

user = apache

group = apache

##以什麼使用者什麼群組的權限來執行池fpm。

用apache可以像httpd服務一樣去存取某些目錄

listen = 127.0.0.1:9000 
#監聽的ip和端口,可以 /path/to/unix/socket來監聽unix socket,效能更好。

listen.backlog = 65535 
#未accept處理的socket佇列大小,-1 on FreeBSD and OpenBSD,其他平台預設65535,高並發時重要,合理設定會及時處理排隊的請求;太大會積壓太多,處理完後nginx在前面都等超時斷開這個和fpm的socket連接了,就杯具了。不要用-1,建議1024以上,最好是2的冪值。

#一個池共用一個backlog佇列,所有的池程序都去這個佇列裡accept連線。

#最大數量受限於系統設定 cat /proc/sys/net/core/somaxconn,系統設定修改:vim /etc/sysctl.conf,增加 net.core.somaxconn = 2000 則最大為2000,然後php最大的backlog可以到2000。

listen.owner = apache

listen.group = apache

listen.mode = 0660

##使用socket連接方式時,指定擁有unix socket權限的用戶,預設和運行的用戶一樣;用tcp連接可以註解掉

listen.allowed_clients = 127.0.0.1 
#設定允許連接fpm的位址,例如nginx就要來連,多個位址用逗號隔開,如果不配置,則預設任意位址都能來連。

process.priority = -19 
#池進程的權限,同樣要master進程是root用戶才有效,和全域那個一樣,不設定的話會繼承master進程的優先權。

pm = dynamic 
#啟動時子進程管理方式,可選值:static(啟動時建立指定個數), dynamic(啟動時根據情況創建,至少有一個), ondemand(啟動時不創建子進程,有需求才創建)

pm.max_children = 5 
#該池同時最多存在5個進程, 三種管理方式都要配置

#pm. start_servers = 2 
#fpm啟動時建立2個子進程,只適用動態dynamic管理方式

pm.min_spare_servers = 2 
#伺服器閒置時最少保持2個子進程,不夠這個數字就會創建,只適用動態dynamic管理方式

pm.max_spare_servers = 3 
#伺服器閒置時最多要有幾個,多了會kill,只適用動態dynamic管理方式

#pm .process_idle_timeout = 10s
#子進程閒置10s後就會被殺掉。

pm.max_requests = 500 
#每個子程序最大處理500請求就被回收,可防止記憶體外洩。

pm.status_path string

#FPM 狀態頁面的網址。如果沒有設置,則無法存取狀態頁面,預設值:無。

ping.path string

#FPM 監控頁面的 ping 網址。如果沒有設置,則無法存取 ping 頁面。此頁面用於外部檢測 FPM 是否存活並且可以回應請求。請注意必須以斜線開頭(/)。

ping.response string
#用於定義 ping 請求的回傳回應。傳回為 HTTP 200 的 text/plain 格式文字。預設值:pong。

process.priority int
#設定 worker 的 nice(2)優先權(如果設定了的話)。該值從 -19(最高優先權) 到 20(較低優先權)。預設值:不設定

prefix string
#偵測路徑時使用的前綴

access.log = var/log/$pool.access.log 
##存取檔案日誌,沒啥用處,例如yii2每次都記錄訪問index.php,只是記錄真實的PHP檔案。

slowlog = var/log/$pool.log.slow 
#PHP檔案執行過慢的日誌,會準確的記錄具體哪一行程式碼太慢,這個非常有用,在設定了時間時生效。

request_slowlog_timeout = 2s 
##超過這個運行時間就會寫慢日誌

request_terminate_timeout = 3s 
##單一請求的逾時時間,有時php.ini設定的最大執行時間未生效,這個就會來幹掉那個執行太久的請求。

rlimit_files = 1024 
##最大開啟句柄數,預設為系統值。

rlimit_core = 0 
#最多的核心使用數,預設為系統分配。

chroot = /path 
#路徑必須是絕對路徑,改變子程序的接目錄,可以把行程對檔案系統的讀寫與實際的作業系統檔案系統隔離,對安全有好處。

chdir = /var/www 

##改變目前工作目錄,可以用相對路徑,預設是目前目錄或是chroot。

catch_workers_output = yes 
#重定向標準輸出stdout和標準錯誤stderr到主錯誤日誌,如果不設置,這兩個日誌就會定向到/dev/null,在高負載情況下,這個配置會造成頁面延遲幾毫秒,預設不開啟。

clear_env = no 
#建立work進程時是否清除環境變量,如果是yes,那麼該子進程 getenv() 就存取不到 $_ENV 和$_SERVER 了。

security.limit_extensions = .php .php3 .php4 .php5 
#為了安全,限制能執行的腳本後綴

#為目前池指定另外的php.ini 配置,例如指定目前池的錯誤日誌寫在哪個地方

php_value/php_flag 
##可以設定php.ini的內容,可以被ini_set覆寫

php_admin_value/php_admin_flag 
#這個同上,但是不會被ini_set覆蓋。

#其中flag設定的,數值只能是on, off, 1, 0, true, false, yes or no,而其他類型的數值則需使用value。

php_flag[display_errors] = off

php_admin_value[error_log] = /var/log/fpm-php.www.log

#php_admin_flag[log_errors] = on

php_admin_flag[log_errors] = on

= on###= on## ###php_admin_value[memory_limit] = 32M###

#這種方法設定 `disable_functions` 和 `disable_classes` 時,不會覆寫 php.ini 的設置,只會追加。

注意:PHP配置值透過 php_value 或 php_flag 設定,並且會覆寫先前的值。
disable_functions 或 disable_classes 在 php.ini 之中定義的值不會被覆寫掉,但是會將新的設定附加在原有值的後面。
使用 php_admin_value 或 php_admin_flag 定義的值,不能被 PHP 程式碼中的 ini_set() 覆蓋。

自 5.3.3 起,也可以透過 web 伺服器設定 PHP 的設定。

nginx 透過unixsock 與php-fpm 通訊:

適用場景:nginx和php-fpm在同一台伺服器上,這時可以直接用unixsocket進程間通信,不走tcp埠通信,可以節約創建連接的時間,從而提高效能。

1、設定php-fpm的listen為/opt/remi/php56/root/var/run/php-fpm/php567-fpm.sock(可以用相對路徑),然後重啟fpm就會自動建立該php567-fpm.sock檔案

2、nginx的fastcgi_pass參數修改為unix:/opt/remi/php56/root/var/run/php-fpm/php567-fpm.sock; 透過php567- fpm.sock檔案去和fpm通信,需要保證該php567-fpm.sock 檔案nginx 有權限存取。

總結:

sock文件隨便創建到哪裡都可以,只要fpm有權限在那個目錄裡寫文件,nginx有權限去讀就可以。 tcp連接會更穩定,因為有tcp協定保證資料的正確性,但是sock有更少的資料拷貝和上下文切換,更少的資源佔用。不過只能在nginx和fpm在同一台機器上才能用sock。

php-fpm進程狀態監控

#1、nginx設定:遇到status 的請求,直接轉送給php

location ~^/status$ {

#   fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;

    include

}

2、fpm配置:pm.status_path = /status

3、然後重新fpm和nginx,在瀏覽器裡存取就能看到了:

預設以 text/plain 展示結果,可以傳參數 ?json/html/xml 分別得到json等格式的結果;參數full可以檢視每個子程序的明細

pool 程序池名稱

process manager 程序管理方式

start time 程序何時啟動的

start since 程序已經執行了多少秒

#accepted conn 該池總共accept了多少連接

listen queue 等待accept的連接的數量

max listen queue fpm啟動後,歷史最高等待accept的連接的數量

#listen queue len 配置的監聽佇列最大長度 受限於`listen.backlog`和系統`cat /proc/sys/net/core/somaxconn`,兩者中取最小值

idle processes 閒置的進程數

active process 正在工作的進程數(加上限制的,就是總的子進程數)

total processes 總的子進程數量

max active processes fpm啟動後,歷史最多同時工作的進程數

max children reached 進程管理模式為 'dynamic'和 'ondemand'時,此數值是當子進程不夠用時,master創建更多子進程的次數

slow requests 慢請求個數

full參數下

pid 子程序ID;

state 子程序狀態(Idle, Running, ... );

start time 子程序啟動的時間;

start since 子程序啟動後運行了多少秒;

requests 當前子程序一共處理了多少個請求;

request duration 請求耗費的奈秒數;

request method 請求方法 (GET, POST, ...);

#request URI 請求參數;

content length POST請求時,請求的內容長度;

user - the user (PHP_AUTH_USER) (or '-' if not set);

#script 請求的哪個檔案;

last request cpu 上次要求耗費的cpu資源

last request memory 上次請求耗費的記憶體峰值

如果進程是閒置狀態,那麼這些資訊記錄的就是上次請求的相關數據,否則就是目前本次請求的相關數據。

backlog設定問題

一個fpm子程序在同一時間只能處理一個請求,如果,backlog設定得太大,nginx之類的客戶端發起的請求一直沒有fpm子程序進行accept,nginx就會直接斷掉這個連接,等fpm忙過來了再去accept的時候,就會發現斷開了,於是報錯。 backlog設定得太小,訪問量大時fpm子進程全部處於忙碌狀態,backlog也塞滿了,就會拒絕新的連接,此時nginx再請求,就會直接被拒絕。所以需要合理的設定backlog參數。

大部分參數只要係統預設的就可以了,我們只需要知道幾個比較重要的參數設置,什麼時候用到可以回頭查詢相關說明

相關推薦: 程式設計影片課程

#

以上是php-fpm.conf設定檔中文及重要參數說明的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何使用php-fpm進行高效能調優 如何使用php-fpm進行高效能調優 Jul 08, 2023 am 11:30 AM

如何使用php-fpm進行高效能調優PHP是一種非常流行的伺服器端腳本語言,廣泛用於開發網頁應用程式和動態網站。然而,隨著訪問量的增加,PHP應用程式的效能可能會受到影響。為了解決這個問題,我們可以使用php-fpm(FastCGIProcessManager)來進行高效能調優。本文將介紹如何使用php-fpm來提升PHP應用程式的效能,並提供程式碼範例。一、

如何在 Windows 11 上啟用或停用 eSIM 如何在 Windows 11 上啟用或停用 eSIM Sep 20, 2023 pm 05:17 PM

如果你從行動電信商購買了筆記型電腦,則很可能可以選擇啟動eSIM並使用手機網路將電腦連接到網路。有了eSIM,您無需將另一張實體SIM卡插入筆記型電腦,因為它已經內建。當您的裝置無法連接到網路時,它非常有用。如何檢查我的Windows11裝置是否相容於eSIM卡?點擊“開始”按鈕,然後轉到“網路和互聯網”>“蜂窩>設定”。如果您沒有看到「蜂窩行動網路」選項,則您的裝置沒有eSIM功能,您應該選取其他選項,例如使用行動裝置將筆記型電腦連接到熱點。為了激活和

如何使用PHP-FPM優化來提升PrestaShop應用程式的效能 如何使用PHP-FPM優化來提升PrestaShop應用程式的效能 Oct 05, 2023 pm 12:33 PM

如何使用PHP-FPM優化來提高PrestaShop應用程式的效能隨著電子商務產業的快速發展,PrestaShop成為了許多商家選擇的電子商務平台。然而,隨著商店規模的擴大和訪問量的增加,PrestaShop應用程式可能會遇到效能瓶頸。為了提高PrestaShop應用的效能,常見的方法是使用PHP-FPM來最佳化和改善應用的處理能力。 PHP-FPM(FastCGI

如何使用PHP-FPM最佳化提升WooCommerce應用的效能 如何使用PHP-FPM最佳化提升WooCommerce應用的效能 Oct 05, 2023 am 08:24 AM

如何使用PHP-FPM優化提高WooCommerce應用的效能概述WooCommerce是一個非常流行的電子商務插件,用於在WordPress網站上建立和管理線上商店。然而,隨著商店的成長和流量的增加,WooCommerce應用可能會變得緩慢且不穩定。為了解決這個問題,我們可以使用PHP-FPM來優化和提升WooCommerce應用的效能。什麼是PHP-FP

超全! Python中常見的設定檔寫法 超全! Python中常見的設定檔寫法 Apr 11, 2023 pm 10:22 PM

為什麼要寫設定檔這個固定檔我們可以直接寫成一個.py 文件,例如settings.py 或config.py,這樣的好處就是能夠在同一工程下直接透過import 來導入當中的部分;但如果我們需要在其他非Python 的平台進行設定檔共用時,寫成單一.py 就不是一個很好的選擇。這時我們就應該選擇通用的設定檔類型來作為儲存這些固定的部分。目前常用且流行的設定檔格式類型主要有 ini、json、toml、yaml、xml 等,這些類型的設定檔我們都可以透過標準函式庫或第三方函式庫來進

利用php-fpm連接池提升資料庫存取效能 利用php-fpm連接池提升資料庫存取效能 Jul 07, 2023 am 09:24 AM

利用php-fpm連線池提升資料庫存取效能概述:在網路開發中,資料庫的存取是非常頻繁且耗時的操作之一。傳統的方法是每次資料庫操作都新建一個資料庫連接,使用完畢後再關閉連接。這種方式會造成資料庫連線的頻繁建立和關閉,增加了系統的開銷。為了解決這個問題,可以利用php-fpm連接池技術來提升資料庫存取效能。連接池的原理:連接池是一種快取技術,將一定數量的資料庫

如何在 Windows 11 中變更網路類型為專用或公用 如何在 Windows 11 中變更網路類型為專用或公用 Aug 24, 2023 pm 12:37 PM

設定無線網路很常見,但選擇或變更網路類型可能會令人困惑,尤其是在您不知道後果的情況下。如果您正在尋找有關如何在Windows11中將網路類型從公用變更為私有或反之亦然的建議,請繼續閱讀以取得一些有用的資訊。 Windows11中有哪些不同的網路設定檔? Windows11附帶了許多網路設定文件,這些設定檔本質上是可用於配置各種網路連線的設定集。如果您在家中或辦公室有多個連接,這將非常有用,因此您不必每次連接到新網路時都進行所有設定。專用和公用網路設定檔是Windows11中的兩種常見類型,但通

win10使用者設定檔在哪? Win10設定使用者設定檔的方法 win10使用者設定檔在哪? Win10設定使用者設定檔的方法 Jun 25, 2024 pm 05:55 PM

最近有不少Win10系統的使用者想要更改使用者設定文件,但不清楚具體如何操作,本文將為大家帶來Win10系統設定使用者設定檔的操作方法吧! Win10如何設定使用者設定檔1、首先,按下「Win+I」鍵開啟設定介面,並點選進入「系統」設定。 2、接著,在打開的介面中,點擊左側的“關於”,再找到並點擊其中的“高級系統設定”。 3、然後,在彈出的視窗中,切換到「」選項欄,並點擊下方「用戶配

See all articles