目錄
php-fpm是什麼
php-fpm的工作原理
如何查看php-fpm進程與子程序
查看php-fpm相關的所有行程。
查看php-fpm下面的子進程
php-fpm參數配置說明
#php-fpm全域配置參數
php-fpm的進程進程池配置
部分配置示範
php-fpm的backlog大小設定
php-fpm啟動模式
首頁 後端開發 PHP問題 php fpm如何設定

php fpm如何設定

Nov 05, 2020 am 09:27 AM

設定php fpm的方法:先透過ps指令查看php-fpm相關的所有行程;然後透過pstree指令查看php fpm下面的子行程;接著進行參數行程配置;最後查看php-fpm參數配置即可。

php fpm如何設定

推薦:《PHP影片教學

php-fpm是什麼

php- fpm是PHP的一個行程管理器。 php下面的許多work流程皆有php-fpm進程管理器管理。

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-fpm進程與子程序

查看php-fpm相關的所有行程。

php fpm如何設定

這裡pool www皆是php-fpm的子行程,也就是我們常說的work行程。

查看php-fpm下面的子進程

透過上面的指令,其實我們能夠看出php-fpm相關的進程了,如果我們需要更直觀的查看php-fpm的master進程和work進程,可以透過下面的方式進程查看。 這裡的5370則是php-fpm的master進程號。透過上面的命令已經很能直觀的得出。

php fpm如何設定

透過上面的指令,可以看出php-fpm作為master進程,下面有15個子進程。這裡的子進程數都是可以進程自訂配置。透過以下幾個參數程序配置:

pm = dynamic # 动态创建子进程
pm.max_children = 20 # 最大子进程数
pm.start_servers = 15 # 初始化php-fpm进程时,默认的子进程数复制代码
登入後複製

php-fpm參數配置說明

#php-fpm全域配置參數

#php-fpm的运行权限。
#以什么用户什么组的权限来运行池fpm。
user = www
group = www

#php-fpm的运行方式,可以使端口,也可以使socke文件。
#如果是端口则是走tcp,如果是socket则直接读socket文件,这样性能相对更好。
listen = 127.0.0.1:9000 

#拥有socket权限的用户,需要和上面的user、group配置相结合。
#如果采用的端口的方式,则不配置。
listen.owner = www
listen.group = www
listen.mode = 0660

#这是php-fpm端口连接的地址。多个用","隔开。默认任意地址都可以连接。
#例如Nginx和php-fpm不在同一台服务器上,这里的值就是Nginx服务的ip地址。
#当Nginx和php-fpm配置在同一台服务器上,则直接写127.0.0.1即可。
listen.allowed_clients = 127.0.0.1 

#pid进程文件存放的位置,当我们启用一个php服务,
#则会自动创建一个该pid文件,其实我们可以直接把该文件理解理解php-fpm的进程号文件,
#两则是等价的。默认为none。
pid = /opt/remi/php72/root/var/run/php-fpm/php-fpm.pid 

#错误日志位置,默认:安装路径 #INSTALL_PREFIX#/log/php-fpm.log。
#如果设置为syslog,log就会发送给syslogd服务而不会写进文件里。
error_log = /opt/remi/php72/root/var/log/php-fpm/error.log 

#PHP限制的文件扩展名
security.limit_extensions = .php .php3 .php4 .php5 .php7

#系统日志标示,如果跑了多个fpm进程,需要用这个来区分日志是谁的。
syslog.ident = php-fpm 

#日记登记,可选:alert, error, warning, notice, debug。
log_level = notice 

#紧急重启阈值,需要与下面emergency_restart_interval参数一起配置。
emergency_restart_threshold = 60 

# 紧急重启阈值的时间范围。在此参数设置的时间内,
# 出现SIGSEGV或SIGBUS的子进程数超过emergency_restart_threshold参数设置的值。
# 那么fpm就会优雅的重启,值是0表示off这个功能,可用的单位有:s秒,m分,h时,d天。
emergency_restart_interval = 60s 

#设置子进程接受主进程复用信号的超时时间。
process_control_timeout = 0 

#当动态管理子进程时,fpm最多能fork多少个进程,0表示无限制,
# 这是所有进程池能启动子进程的总和,谨慎使用。
process.max = 128 

#设置子进程的优先级,在master进程以root用户启动时有效;
#如果没有设置,子进程会继承master进程的优先级,值范围-19(最高)到20(最低),默认不设置。
process.priority = -19 

#设置成no用于调试bug,默认为yes。
daemonize = yes 

#master进程最多能打开的文件数量。默认采用系统设置的值。
rlimit_files = 1024 

#master进程核心rlimit限制值;可选unlimited或>=0的整数,默认为系统的值。
rlimit_core = 0

#事件处理机制,默认自动检测,可选值:select,poll,
#epoll(linux>=2.5.44),kqueue,/dev/poll,port
events.mechanism = epoll 

#fpm想系统发送状态的频率。单位有s,m,h。
#前提是fpm被设置会系统服务。
systemd_interval = 10s
登入後複製

php-fpm的進程進程池配置

#php-fpm的队列长度。
listen.backlog = 65535 

#php进程池权限,同样要master进程是root用户才有效,
#和上面的全局设置一样,不设置的话会继承master进程的优先级。
process.priority = -19 

#子进程管理方式
#static(静态配置,在启动php-fpm时根据该值创建固定的子进程数量);
#dynamic(动态配置,在启动php-fpm时根据pm.start_servers的值初始化对应的子进程数,至少一个子进程);
#ondemand(按需配置,在启动php-fpm时不创建子进程,而是根据请求动态fork子进程);
pm = dynamic 

#最大子进程数量
pm.max_children = 5 

#初始化子进程数量,与上面的pm = dynamic配置使用。
pm.start_servers = 2 

#服务器闲置时最少保持2个子进程,不够这个数就会创建,只适用动态dynamic管理方式
pm.min_spare_servers = 2 

#服务器闲置时最多要有几个,多了会kill,只适用动态dynamic管理方式
pm.max_spare_servers = 3 

#子进程闲置时间,也就是说子进程没有可处理的任务时,在该之间使就会被killed。
pm.process_idle_timeout = 10s

#每个子进程最大的处理请求数量。在一定程度上可以防止内存泄漏。
pm.max_requests = 500 

#php-fpm状态监控的uri
pm.status_path string

#php-fpm监控页面的 ping 网址。
#如果没有设置,则无法访问 ping 页面。
#该页面用于外部检测php-fpm是否存活并且可以响应请求。请注意必须以斜线开头(/)。
ping.path string

#用于定义ping请求的返回响应。返回为 HTTP 200 的 text/plain 格式文本。默认值:pong。
ping.response string

#设置worker的nice(2)优先级(如果设置了的话)。
#该值从 -19(最高优先级) 到 20(更低优先级)。 
#默认值:不设置
process.priority int

#检测路径时使用的前缀
prefix string

#访问文件日志,没啥用处,比如yii2每次都记录访问index.php,只是记录真实的PHP文件。
access.log = var/log/$pool.access.log 

#php的慢日志
slowlog = var/log/$pool.log.slow 

#慢日志时间阈值
request_slowlog_timeout = 2s 

#单个请求的超时时间,当php.ini设置的最大执行时间未生效,则交由它来处理。
request_terminate_timeout = 3s 

#最大打开句柄数,默认为系统值。
rlimit_files = 1024 

#最多的核心使用数,默认为系统分配。
rlimit_core = 0
登入後複製

部分配置示範

php-fpm的backlog大小設定

php-fpm的backlog大小設定與php-fpm的處理能力有關,而不是越大越好。

當該值設定過大,導致php-fpm處理不過來,nginx那邊等待超時,斷開連接,報504 gateway timeout錯。同時php-fpm處理完準備write 資料給nginx時,發現TCP連線斷開了,報「Broken pipe」。

當該值設定太小,nginx之類的client請求,根本進入不了php-fpm的accept queue,報「502 Bad Gateway」錯。所以,這還得去根據php-fpm的QPS來決定backlog的大小。計算方式最好為QPS=backlog。 具體可以參考:www.jianshu.com/p/3ecc99ebf…

php-fpm啟動模式

php-fpm以socket啟動或連接埠啟動,這兩種的方式根據實際情況進行配置。

nginx和php-fpm在同一台伺服器上,這時可以直接用unix socket進程間通信,不走tcp埠通信,可以節約創建連接的時間,從而提高效能。 sock文件隨便創建到哪裡都可以,只要fpm有權限在那個目錄裡寫文件,nginx有權限去讀就可以。 tcp連接會更穩定,因為有tcp協定保證資料的正確性,但是sock有更少的資料拷貝和上下文切換,更少的資源佔用。不過只能在nginx和fpm在同一台機器上才能用socket。

如何選擇socket啟動還是連接埠啟動。

由於tcp方式相對unix的方式,並發量更高,因此針對並發量高的項目,建議採用tcp方式,現在Nginx配置範例檔預設的也是tcp方式。

使用unix方式,可以優化的點,就是將socket檔案放在/dev/shm目錄下面,至於為什麼放在這個目錄可以參考.www.linuxidc.com/Linux/2014-…  。大致的意思,就是該目錄下面的檔案是不是儲存再硬碟中的,而是儲存再記憶體中的。至於硬碟讀取和記憶體讀取,誰快誰慢,一定是記憶體最快了。

socket方式啟動如何查看socke檔案。

socket文件是根据上面提到的pid配置项而定的。我们可以直接使用cat命令,查看进程号。

php fpm如何設定

子进程默认启动数量,通过上面的pm = dynamic 配置,我们知道这种方式是动态配置子进程大小的,同时我们也可以设置默认的子进程数。

pm = dynamic
pm.max_children = 20### 默认15个子进程,演示的效果就是上面的shell命令的结果图。pm.start_servers = 15
登入後複製

当我们尝试设置为3时,显示如下错误信息。

php fpm如何設定

说明,这里的start_servers配置项和min_spare_servers配置是有一定的关系的。我们设置为最小10,结果就能正常启动php-fpm了。


以上是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

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

熱工具

記事本++7.3.1

記事本++7.3.1

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

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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