目錄
您可能感興趣的文章:
首頁 後端開發 php教程 linux下的php-fpm參數配置介紹與參數最佳化說明詳解

linux下的php-fpm參數配置介紹與參數最佳化說明詳解

Jul 07, 2018 pm 05:53 PM

本文主要講解了在linux下php-fpm一些重要參數的中文詳細說明,並詳細介紹了php-fpm關於性能方面的參數優化介紹

php-fpm .conf重要參數詳解

pid = run/php-fpm.pid
#pid設置,預設在安裝目錄中的var/run/php -fpm.pid,建議開啟

error_log = log/php-fpm.log
#錯誤日誌,預設在安裝目錄中的var/log/php-fpm.log

log_level = notice
#錯誤等級. 可用等級為: alert(必須立即處理), error(錯誤情況), warning(警告情況), notice(一般重要訊息), debug(調試資訊). 預設: notice.

emergency_restart_threshold = 60
emergency_restart_interval = 60s

#表示在emergency_restart_interval所設值或內部出現SIGSEGVSIGBGB的錯誤php-cgi進程數如果超過emergency_restart_threshold個,php-fpm就會優雅重啟。這兩個選項一般保持預設值。

process_control_timeout = 0
#設定子程序接受主程序復用訊號的逾時時間. 可用單位: s(秒), m(分), h(小時),或d(天) 預設單位: s(秒). 預設值: 0.

#daemonize = yes
#後台執行fpm,預設值為yes,如果為了除錯可以改為no。在FPM中,可以使用不同的設定來執行多個進程池。這些設定可以針對每個進程池單獨設定。

listen = 127.0.0.1:9000
#fpm監聽端口,即nginx中php處理的位址,一般預設值即可。可用格式為: 'ip:port', 'port', '/path/to/unix/socket'. 每個進程池都需要設定.

listen.backlog = -1
#backlog數,-1表示無限制,由作業系統決定,此行註解掉就行。

listen.allowed_clients = 127.0.0.1
#允許存取FastCGI進程的IP,設定any為不限制IP,如果要設定其他主機的nginx也能存取這台FPM進程,listen處要設定成本地可被存取的IP。預設值是any。每個位址是用逗號分隔. 如果沒有設定或為空,則允許任何伺服器請求連接

listen.owner = www
listen.group = www
listen.mode = 0666

#unix socket設定選項,如果使用tcp方式訪問,這裡註釋即可。

user = www
group = www

# 啟動進程的帳戶和群組

pm = dynamic
#對於專用伺服器,pm可以設定為static。
#如何控制子進程,選項有static和dynamic。如果選擇static,則由pm.max_children指定固定的子程序數。如果選擇dynamic,則由下開參數決定:
pm.max_children #,子進程最大數
pm.start_servers #,啟動時的進程數
pm.min_spare_servers #,保證空閒行程數最小值,如果空閒行程小於此值,則建立新的子行程
##pm.max_spare_servers #,保證空閒行程數最大值,如果空閒進程大於此值,此進行清理

pm.max_requests = 1000#設定每個子進程重生之前服務的請求數. 對於可能存在記憶體洩漏的第三方模組來說是非常有用的. 如果設定為'0' 則一直接受請求. 等同於PHP_FCGI_MAX_REQUESTS 環境變數. 預設值: 0.

#pm.status_path = /status#FPM狀態頁面的網址. 如果沒有設定, 則無法存取狀態頁面. 預設值: none. munin監控會使用到

##ping.path = /ping

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

ping.response = pong

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

request_terminate_timeout = 0

#設定單一請求的超時中止時間。這個選項可能會對php.ini設定中的 'max_execution_time'因為某些特殊原因沒有中止執行的腳本有用. 設定為'0' 表示'Off'.當經常出現502錯誤時可以嘗試更改此選項。

request_slowlog_timeout = 10s

#當一個請求該設定的逾時時間後,就會將對應的PHP呼叫堆疊資訊完整寫入到慢日誌中. 設定為'0 ' 表示'Off'

slowlog = log/$pool.log.slow
#慢請求的記錄日誌,配合request_slowlog_timeout使用

rlimit_files = 1024
#設定檔開啟描述符的rlimit限制. 預設值: 系統定義值預設可開啟句柄是1024,可使用ulimit -n查看,ulimit -n 2048修改。

rlimit_core = 0
#設定核心rlimit最大限制值.可用值: 'unlimited' 、0或正整數. 預設值: 系統定義值.

chroot =
#啟動時的Chroot目錄. 所定義的目錄需要是絕對路徑. 如果沒有設定, 則chroot不被使用.

chdir =
#設定啟動目錄,啟動時會自動Chdir到該目錄. 所定義的目錄需要是絕對路徑. 預設值: 目前目錄,或/目錄(chroot時)

catch_workers_output = yes
#重定向運行過程中的stdout和stderr到主要的錯誤日誌檔案中. 如果沒有設定, stdout 和stderr 將會根據FastCGI的規則被重定向到/dev/null . 預設值: 空.

 

php-fpm參數調優

pm = dynamic;

表示使用哪一個行程數量管理方式

dynamic表示php-fpm行程數是動態的,最開始是pm.start_servers指定的數量,如果要求較多,則會自動增加,保證空閒的行程數不小於pm.min_spare_servers,如果行程數較多,也會進行對應清理,保證多餘的行程數不多於pm.max_spare_servers

static表示php-fpm進程數是靜態的, 進程數自始至終都是pm.max_children指定的數量,不再增加或減少

pm.max_children = 300; 靜態方式下開啟的php-fpm程序數量
pm.start_servers = 20; 動態方式下的起始php-fpm程序數量
pm.min_spare_servers = 5; 動態方式下的最小php-fpm進程數量
pm.max_spare_servers = 35; 動態方式下的最大php-fpm進程數量

如果pm為static, 那麼其實只有pm.max_children這個參數生效。系統會開啟設定數量的php-fpm進程

如果pm為dynamic, 那麼pm.max_children參數失效,後面3個參數生效。系統會在php-fpm運行開始的時候啟動pm.start_servers個php-fpm進程,然後根據系統的需求動態在pm.min_spare_servers和pm.max_spare_servers之間調整php-fpm進程數

那麼,對於我們的伺服器,選擇哪種pm方式比較好呢?事實上,跟Apache一樣,運行的PHP程式在執行完成後,或多或少會有記憶體外洩的問題。這也是為什麼開始的時候一個php-fpm進程只佔用3M左右內存,運行一段時間後就會上升到20-30M的原因了。

對於記憶體大的伺服器(例如8G以上)來說,指定靜態的max_children實際上更為妥當,因為這樣不需要進行額外的進程數目控制,會提高效率。因為頻繁開關php-fpm程序也會有時滯,所以記憶體夠大的情況下開靜態效果會更好。數量也可以根據 記憶體/30M 得到,例如8GB記憶體可以設定為100,那麼php-fpm耗費的記憶體就能控制在 2G-3G的樣子。如果記憶體稍微小點,例如1G,那麼指定靜態的進程數量就更有利於伺服器的穩定。這樣可以保證php-fpm只取得夠用的內存,將不多的內存分配給其他應用去使用,會使系統的運作更加暢通。

對於小內存的伺服器來說,例如256M內存的VPS,即使按照一個20M的內存量來算,10個php-cgi進程就將耗掉200M內存,那系統的崩潰就應該很正常了。因此應該盡量控制php-fpm進程的數量,大體明確其他應用佔用的記憶體後,給它指定一個靜態的小數量,會讓系統更加平穩一些。或者使用動態方式,因為動態方式會結束掉多餘的進程,可以回收釋放一些內存,所以建議在內存較少的伺服器或VPS上使用。具體最大數量根據 記憶體/20M 得到。比如說512M的VPS,建議pm.max_spare_servers設定為20。至於pm.min_spare_servers,則建議根據伺服器的負載情況來設置,比較合適的值在5~10之間。

在4G記憶體的伺服器上200就可以(我的1G測試機,開64個是最好的,建議使用壓力測試取得最佳值)

pm. max_requests = 10240;

nginx php-fpm配置過程中最大問題是內洩漏出問題:伺服器的負載不大,但是記憶體佔用迅速增加,很快吃掉記憶體接著開始吃交換分區,系統很快掛掉!其實根據官方的介紹,php-cgi不存在內存洩漏,每個請求完成後php-cgi會回收內存,但是不會釋放給操作系統,這樣就會導致大量內存被php-cgi佔用。

官方的解決方法是降低PHP_FCGI_MAX_REQUESTS的值,如果用的是php-fpm,對應的php-fpm.conf中的就是max_requests,該值的意思是發送多少個請求後會重啟該線程,我們需要適當地降低這個值,用以讓php-fpm自動的釋放內存,不是大部分網上說的51200等等,實際上還有另一個跟它有關聯的值max_children,這個是每次php-fpm會建立多少個進程,這樣實際上的內存消耗是max_children*max_requests*每個請求使用內存,根據這個我們可以預估一下內存的使用情況,就不用再寫腳本去kill了。

request_terminate_timeout = 30;

#最大執行時間, 在php.ini中也可以進行設定(max_execution_time)

#request_slowlog_timeout = 2 ; 開啟慢速日誌
slowlog = log/$pool.log.slow; 慢日誌路徑

rlimit_files = 1024; 增加php-fpm打開檔案描述子的限制

php-fpm.conf的參數明說大家只要多看幾遍應該就可能記住了,至於php-fpm效能方案應該根據實際情況而定,多測試幾次得出最佳配置方案

您可能感興趣的文章:

Laravel中資料遷移與資料填充的詳細步驟詳解

PHP 閉包取得外部變數與global關鍵字宣告變數的差異解說

用好anyproxy提高公眾號文章擷取效率詳解

以上是linux下的php-fpm參數配置介紹與參數最佳化說明詳解的詳細內容。更多資訊請關注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

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

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

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

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

Java教學
1673
14
CakePHP 教程
1429
52
Laravel 教程
1333
25
PHP教程
1278
29
C# 教程
1257
24
說明PHP中的安全密碼散列(例如,password_hash,password_verify)。為什麼不使用MD5或SHA1? 說明PHP中的安全密碼散列(例如,password_hash,password_verify)。為什麼不使用MD5或SHA1? Apr 17, 2025 am 12:06 AM

在PHP中,應使用password_hash和password_verify函數實現安全的密碼哈希處理,不應使用MD5或SHA1。1)password_hash生成包含鹽值的哈希,增強安全性。 2)password_verify驗證密碼,通過比較哈希值確保安全。 3)MD5和SHA1易受攻擊且缺乏鹽值,不適合現代密碼安全。

PHP類型提示如何起作用,包括標量類型,返回類型,聯合類型和無效類型? PHP類型提示如何起作用,包括標量類型,返回類型,聯合類型和無效類型? Apr 17, 2025 am 12:25 AM

PHP類型提示提升代碼質量和可讀性。 1)標量類型提示:自PHP7.0起,允許在函數參數中指定基本數據類型,如int、float等。 2)返回類型提示:確保函數返回值類型的一致性。 3)聯合類型提示:自PHP8.0起,允許在函數參數或返回值中指定多個類型。 4)可空類型提示:允許包含null值,處理可能返回空值的函數。

PHP和Python:解釋了不同的範例 PHP和Python:解釋了不同的範例 Apr 18, 2025 am 12:26 AM

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

您如何防止PHP中的SQL注入? (準備的陳述,PDO) 您如何防止PHP中的SQL注入? (準備的陳述,PDO) Apr 15, 2025 am 12:15 AM

在PHP中使用預處理語句和PDO可以有效防範SQL注入攻擊。 1)使用PDO連接數據庫並設置錯誤模式。 2)通過prepare方法創建預處理語句,使用佔位符和execute方法傳遞數據。 3)處理查詢結果並確保代碼的安全性和性能。

PHP和Python:代碼示例和比較 PHP和Python:代碼示例和比較 Apr 15, 2025 am 12:07 AM

PHP和Python各有優劣,選擇取決於項目需求和個人偏好。 1.PHP適合快速開發和維護大型Web應用。 2.Python在數據科學和機器學習領域佔據主導地位。

PHP:處理數據庫和服務器端邏輯 PHP:處理數據庫和服務器端邏輯 Apr 15, 2025 am 12:15 AM

PHP在數據庫操作和服務器端邏輯處理中使用MySQLi和PDO擴展進行數據庫交互,並通過會話管理等功能處理服務器端邏輯。 1)使用MySQLi或PDO連接數據庫,執行SQL查詢。 2)通過會話管理等功能處理HTTP請求和用戶狀態。 3)使用事務確保數據庫操作的原子性。 4)防止SQL注入,使用異常處理和關閉連接來調試。 5)通過索引和緩存優化性能,編寫可讀性高的代碼並進行錯誤處理。

PHP的目的:構建動態網站 PHP的目的:構建動態網站 Apr 15, 2025 am 12:18 AM

PHP用於構建動態網站,其核心功能包括:1.生成動態內容,通過與數據庫對接實時生成網頁;2.處理用戶交互和表單提交,驗證輸入並響應操作;3.管理會話和用戶認證,提供個性化體驗;4.優化性能和遵循最佳實踐,提升網站效率和安全性。

在PHP和Python之間進行選擇:指南 在PHP和Python之間進行選擇:指南 Apr 18, 2025 am 12:24 AM

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

See all articles