做用:自己也是一個進程,主要是爲了管理fastcgi進程池,控制進程數量, 監控進程運行狀態。在這以前還有一個php-cgi, 雖然是官方的,但性能不咋地,最終被php-fpm替代了。這裏簡單說一下cgi,php會爲外部應用提供不少種sapi(服務器應用程序編程接口),常見的給apache的mod_php5,給nginx的cgi,fastcgi,給IIS的ISAPI,還有Shell的CLI,已達到跟外部應用交互的目的,大概請求過程就是nginx->sapi->php。fastcgi是cgi的一個升級版本,cgi在每接收一個請求的時候都會建立一個進程,處理並返回結果以後會銷燬這個進程,在大併發的狀況下會頻繁的重複建立、銷燬動做,開銷較大。而fastcgi在建立一個進程以後並不會關閉,在處理完一個請求以後處於閒置狀態,等待下一個請求的接入。php
參數:其實若是把參數大概瞭解一下就能知道這個東西到底在作什麼。編譯php的時候加上php-fpm就能夠了,執行文件還有配置文件也都在php下面nginx
- error_log = /usr/local/var/log/php-fpm.log 日誌路徑
- pid = /usr/local/var/run/php-fpm.pid pid文件位置,只要爲了防止啓動多個進程副本
- log_level = notice 錯誤級別
- process_control_timeout = 0 設置子進程接收復用信號的超時時間,再處理請求前php-fpm會發送複用信號給fastcgi,讓fastcgi準備好接收請求並處理,如過超過了這個參數設定的時間fastcgi還有沒給反饋,php-fpm會把任務派送給下一個fastcgi進程
- daemonize = yes php-fpm後臺運行 默認是yes 若是設置爲no,啓動的時候就一直掛在那,打印一些調試信息
- listen = 127.0.0.0:9000 監聽的端口
- listen.backlog = -1 緩存隊列的最大長度,假如咱們最大開啓了兩個進程來處理請求,同時併發四個請求的時候,剩下兩個會被掛起來放在隊列裏,這個參數表示隊列的最大長度,若是併發量足夠大以致於超出這個長度會出現訪問失敗的狀況 -1表示無限制
- listen.allowed_clients = 127.0.0.1 容許訪問php-fpm的ip白名單,逗號分割。默認any表示無限制
- unix socket 和nginx的鏈接方式,這裏主要有兩種 nuix socket和tcp socket nuix直接讀寫socket文件,少了tcp開銷,性能更好一些。可是缺乏協議的支撐,在大併發下不穩定
- pm = dynamic 表示使用哪一種方式對進程數量進行管理 (1)dynamic 動態管理進程數,當空閒進程數小於min_spare_servers 時會拉起新的進程,當空閒進程數大於max_spare_servers 時會釋放多餘進程;(static)靜態的 就始終保持max_children 進程數
- pm.max_children = 300 開啓的最大進程數
- pm.start_servers = 20 啓動的時候拉起的進程數
- pm.min_spare_servers = 5 最小空閒進程數
- pm.max_spare_servers = 35 最大空閒進程數
- pm.max_requests = 500 每一個進程處理請求數達到500時會重啓,主要爲了防止內存溢出 設置爲0表示不會重啓 頻繁重啓(開銷較大,而且可能會致使無可用進程)和從不重啓確定都是很差的,仍是要設定和合適的值
- status_path = /status 應該是和nginx裏的那個相似,一個監控頁面
- access_log = access.log 每條請求的日誌
- access_format 日誌格式
- slow = slow.log 慢日誌 能夠定位到哪一個腳本,哪一個函數執行效率慢
- reques_slowlog_timeout = 10 執行時間超過10s會記錄慢日誌
- request_terminate_timeout = 0 請求超時時間
- rlimit_files = 1024 限制打開的最大文件數
補充:apache
若是經過php-fpm訪問php,php的參數max_execution_time會失效,php-fpm配置文件request_terminate_timeout 會起做用。編程
待補充api