摘要:啟動之后,會創建一個進程,監聽端口可配置,進程又會根據去創建若干子進程,子進程用于處理實際的業務。如果選擇,則由指定固定的子進程數。
FPM工作流程
fpm 全名是FastCGI進程管理器,可以參考關于FastCGI的說明:CGI、FastCGI、PHP-CGI和PHP-FPM 概念區分
fpm啟動后會先讀php.ini,然后再讀取相應的conf配置文件,conf配置可以覆蓋php.ini的配置。啟動fpm之后,會創建一個master進程,監聽9000端口(可配置),master進程又會根據fpm.conf/www.conf去創建若干子進程,子進程用于處理實際的業務。當有客戶端(比如nginx)來連接9000端口時,空閑子進程會自己去accept,如果子進程全部處于忙碌狀態,新進的待accept的連接會被master放進隊列里,等待fpm子進程空閑;這個存放待accept的半連接的隊列有多長,由 listen.backlog 配置。
#測試php-fpm配置 /usr/local/php/sbin/php-fpm -t /usr/local/php/sbin/php-fpm -c /usr/local/php/etc/php.ini -y /usr/local/php/etc/php-fpm.conf -t #啟動php-fpm /usr/local/php/sbin/php-fpm /usr/local/php/sbin/php-fpm -c /usr/local/php/etc/php.ini -y /usr/local/php/etc/php-fpm.conf #關閉php-fpm kill -INT `cat /usr/local/php/var/run/php-fpm.pid` #重啟php-fpm kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`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 如果設置為syslog,log就會發送給syslogd服務而不會寫進文件里。 syslog.facility = daemon # 把日志寫進系統log,linux還不夠熟悉,暫時不用理會。 syslog.ident = php-fpm #系統日志標示,如果跑了多個fpm進程,需要用這個來區分日志是誰的。 log_level = notice #錯誤級別. 可用級別為: alert(必須立即處理), error(錯誤情況), warning(警告情況), notice(一般重要信息), debug(調試信息). 默認: notice. emergency_restart_threshold = 60 emergency_restart_interval = 60s #表示在emergency_restart_interval所設值內出現SIGSEGV或者SIGBUS錯誤的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 #未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.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 . 默認值: 空fpm進程狀態監控
1、nginx配置:遇到 status 的請求,直接轉發給php
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?請求的哪個php文件;
last?request cpu?上次請求耗費的cpu資源
last?request memory?上次請求耗費的內存峰值
如果進程是閑置狀態,那這些信息記錄的就是上次請求的相關數據,否則就是當前本次請求的相關數據。
參考:http://www.cnblogs.com/52php/...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/30563.html
摘要:同樣,如果有之類的,也是由于慢查詢導致的參考鏈接配置 環境說明 root@ubuntu:/home/tb# cat /etc/issue Ubuntu 16.04.2 LTS l root@ubuntu:/home/tb# php -v PHP 7.0.15-0ubuntu0.16.04.4 (cli) ( NTS ) Copyright (c) 1997-2017 The PH...
摘要:是本地文件的存儲目錄,是容器內文件的存儲目錄,表示只讀。編輯配置文件本地存儲路徑配置文件內容說明表示服務的,下文還會提及。訪問時,讓執行,這個路徑經轉換成。 看完 docker 官方教程,想搭個本地 php 開發環境,可搜了一圈,也沒找到特別滿意的文章,順手總結一個。 假設 你知道 nginx、php-fpm 是什么 你了解 docker 的基本命令 運行環境 MacBook Pr...
摘要:是本地文件的存儲目錄,是容器內文件的存儲目錄,表示只讀。編輯配置文件本地存儲路徑配置文件內容說明表示服務的,下文還會提及。訪問時,讓執行,這個路徑經轉換成。 看完 docker 官方教程,想搭個本地 php 開發環境,可搜了一圈,也沒找到特別滿意的文章,順手總結一個。 假設 你知道 nginx、php-fpm 是什么 你了解 docker 的基本命令 運行環境 MacBook Pr...
摘要:是本地文件的存儲目錄,是容器內文件的存儲目錄,表示只讀。編輯配置文件本地存儲路徑配置文件內容說明表示服務的,下文還會提及。訪問時,讓執行,這個路徑經轉換成。 看完 docker 官方教程,想搭個本地 php 開發環境,可搜了一圈,也沒找到特別滿意的文章,順手總結一個。 假設 你知道 nginx、php-fpm 是什么 你了解 docker 的基本命令 運行環境 MacBook Pr...
摘要:進程數的配置會奏效會自動增加數但是性能提升效果并不明顯然而的并沒奏效,仍然只有一個通過手動增加配置發現有所提升但效果很不明顯。于是我更改了的配置改為再次結果能達到左右差不多翻倍了結論性能問題并不那么容易解決需要耐心的排查原因 一直知道nginx本身能進行負載均衡,但沒有測試過,今天實驗了下,以下是筆記記錄 showImg(https://segmentfault.com/img/rem...
閱讀 831·2023-04-25 19:49
閱讀 3763·2021-09-30 09:47
閱讀 2756·2021-09-13 10:21
閱讀 2688·2021-08-24 10:04
閱讀 3174·2019-08-30 15:55
閱讀 2316·2019-08-30 15:55
閱讀 2408·2019-08-30 15:54
閱讀 3477·2019-08-30 13:53