fpm-fastcgi 進程管理器


1 FPM(FastCGI 進程管理器)用于替換 PHP FastCGI 的大部分附加功能,對于高負載網站是非常有用的。


它的功能包括:

● 支持平滑停止/啟動的高級進程管理功能;

● 可以工作于不同的 uid/gid/chroot 環境下,并監聽不同的端口和使用不同的 php.ini 配置文件(可取代 safe_mode 的設置);

● stdout 和 stderr 日志記錄;

● 在發生意外情況的時候能夠重新啟動并緩存被破壞的 opcode;

● 文件上傳優化支持;

● "慢日志" - 記錄腳本(不僅記錄文件名,還記錄 PHP backtrace 信息,可以使用 ptrace或者類似工具讀取和分析遠程進程的運行數據)運行所導致的異常緩慢;

● fastcgi_finish_request() - 特殊功能:用于在請求完成和刷新數據后,繼續在后臺執行耗時的工作(錄入視頻轉換、統計處理等);

● 動態/靜態子進程產生;

● 基本 SAPI 運行狀態信息(類似Apache的 mod_status);

● 基于 php.ini 的配置文件。


2 從源代碼編譯


編譯 PHP 時需要 --enable-fpm 配置選項來激活 FPM 支持。

以下為 FPM 編譯的具體配置參數(全部為可選參數):

● --with-fpm-user - 設置 FPM 運行的用戶身份(默認 - nobody)

● --with-fpm-group - 設置 FPM 運行時的用戶組(默認 - nobody)

● --with-fpm-systemd - 啟用 systemd 集成 (默認 - no)

● --with-fpm-acl - 使用POSIX 訪問控制列表 (默認 - no) 5.6.5版本起有效


3 配置


FPM 配置文件為 php-fpm.conf,其語法類似 php.ini 。

1 php-fpm.conf 全局配置段


pid string

PID文件的位置。默認為空。

error_log string

錯誤日志的位置。默認:安裝路徑 #INSTALL_PREFIX#/log/php-fpm.log。

log_level string

錯誤級別??捎眉墑e為:alert(必須立即處理),error(錯誤情況),warning(警告情況),notice(一般重要信息),debug(調試信息)。默認:notice。

emergency_restart_threshold int

如果子進程在 emergency_restart_interval 設定的時間內收到該參數設定次數的 SIGSEGV 或者 SIGBUS退出信息號,則FPM會重新啟動。0 表示“關閉該功能”。默認值:0(關閉)。

emergency_restart_interval mixed

emergency_restart_interval 用于設定平滑重啟的間隔時間。這么做有助于解決加速器中共享內存的使用問題??捎脝挝唬簊(秒),m(分),h(小時)或者 d(天)。默認單位:s(秒)。默認值:0(關閉)。

process_control_timeout mixed

設置子進程接受主進程復用信號的超時時間。可用單位:s(秒),m(分),h(小時)或者 d(天)。默認單位:s(秒)。默認值:0(關閉)。

daemonize boolean

設置 FPM 在后臺運行。設置“no”將 FPM 保持在前臺運行用于調試。默認值:yes。

2 運行配置區段


在FPM中,可以使用不同的設置來運行多個進程池。 這些設置可以針對每個進程池單獨設置。

listen string

設置接受 FastCGI 請求的地址??捎酶袷綖椋?ip:port','port','/path/to/unix/socket'。每個進程池都需要設置。

listen.backlog int

設置 listen(2) 的半連接隊列長度?!?1”表示無限制。默認值:-1。

listen.allowed_clients string

設置允許連接到 FastCGI 的服務器 IPV4 地址。等同于 PHP FastCGI (5.2.2+) 中的 FCGI_WEB_SERVER_ADDRS 環境變量。僅對 TCP 監聽起作用。每個地址是用逗號分隔,如果沒有設置或者為空,則允許任何服務器請求連接。默認值:any。

listen.owner string

如果使用,表示設置 Unix 套接字的權限。在Linux中,讀寫權限必須設置,以便用于 WEB 服務器連接。在很多 BSD 派生的系統中可以忽略權限允許自由連接。默認值:運行所使用的用戶和組,權限為 0666。

listen.group string

listen.mode string

user string

FPM 進程運行的Unix用戶。必須設置。

group string

FPM 進程運行的 Unix 用戶組。如果沒有設置,則默認用戶的組被使用。

pm string

設置進程管理器如何管理子進程。可用值:static,ondemand,dynamic。必須設置。

static - 子進程的數量是固定的(pm.max_children)。

ondemand - 進程在有需求時才產生(當請求時,與 dynamic 相反,pm.start_servers 在服務啟動時即啟動。

dynamic - 子進程的數量在下面配置的基礎上動態設置:pm.max_children,pm.start_servers,pm.min_spare_servers,pm.max_spare_servers。

pm.max_children int

pm 設置為 static 時表示創建的子進程的數量,pm 設置為 dynamic 時表示最大可創建的子進程的數量。必須設置。

該選項設置可以同時提供服務的請求數限制。類似 Apache 的 mpm_prefork 中 MaxClients 的設置和 普通PHP FastCGI中的 PHP_FCGI_CHILDREN 環境變量。

pm.start_servers in

設置啟動時創建的子進程數目。僅在 pm 設置為 dynamic 時使用。默認值:min_spare_servers + (max_spare_servers - min_spare_servers) / 2。

pm.min_spare_servers int

設置空閑服務進程的最低數目。僅在 pm 設置為 dynamic 時使用。必須設置。

pm.max_spare_servers int

設置空閑服務進程的最大數目。僅在 pm 設置為 dynamic 時使用。必須設置。

pm.max_requests int

設置每個子進程重生之前服務的請求數。對于可能存在內存泄漏的第三方模塊來說是非常有用的。如果設置為 '0' 則一直接受請求,等同于 PHP_FCGI_MAX_REQUESTS 環境變量。默認值:0。

pm.status_path string

FPM 狀態頁面的網址。如果沒有設置,則無法訪問狀態頁面,默認值:無。

ping.path string

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

ping.response string

用于定義 ping 請求的返回響應。返回為 HTTP 200 的 text/plain 格式文本。默認值:pong。

request_terminate_timeout mixed

設置單個請求的超時中止時間。該選項可能會對 php.ini 設置中的 'max_execution_time' 因為某些特殊原因沒有中止運行的腳本有用。設置為 '0' 表示 'Off'。可用單位:s(秒),m(分),h(小時)或者 d(天)。默認單位:s(秒)。默認值:0(關閉)。

request_slowlog_timeout mixed

當一個請求該設置的超時時間后,就會將對應的 PHP 調用堆棧信息完整寫入到慢日志中。設置為 '0' 表示 'Off'。可用單位:s(秒),m(分),h(小時)或者 d(天)。默認單位:s(秒)。默認值:0(關閉)。

slowlog string

慢請求的記錄日志。默認值:#INSTALL_PREFIX#/log/php-fpm.log.slow。

rlimit_files int

設置文件打開描述符的 rlimit 限制。默認值:系統定義值。

rlimit_core int

設置核心 rlimit 最大限制值??捎弥担?unlimited',0 或者正整數。默認值:系統定義值。

chroot string

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

chdir string

設置啟動目錄,啟動時會自動 Chdir 到該目錄。所定義的目錄需要是絕對路徑。默認值:當前目錄,或者根目錄(chroot時)。

catch_workers_output boolean

重定向運行過程中的 stdout 和 stderr 到主要的錯誤日志文件中。如果沒有設置,stdout 和 stderr 將會根據 FastCGI 的規則被重定向到 /dev/null。默認值:無。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 在實際的開發和應用中偶發的502,504讓人頭痛,下面轉發一個寫的比較全面的。 PHP-fpm PHP-FPM是一...
    daos閱讀 2,402評論 2 18
  • Nginx簡介 解決基于進程模型產生的C10K問題,請求時即使無狀態連接如web服務都無法達到并發響應量級一萬的現...
    魏鎮坪閱讀 2,057評論 0 9
  • 一、MemCache簡介 session MemCache是一個自由、源碼開放、高性能、分布式的分布式內存對象緩存...
    李偉銘MIng閱讀 3,863評論 2 13
  • 更改ip和dnsVi /etc/sysconfig/network-scripts/ifcfg-eth0vi /...
    Xwei_閱讀 1,854評論 0 3
  • 《我是程序媛》系列——php-fpm進程管理,感謝大表哥親情贊助時間,讀了php-fpm源碼。 php-fpm進程...
    程序媛大麗閱讀 13,791評論 7 35