在服務器上,當我們查看php行程時,全都是php-fpm行程,大家都知道這個就是php的運行環境,那么,它到底是個什么東西呢?
PHP-FPM簡介
PHP-FPM,就是PHP的FastCGI管理器,用于替換PHP FastCGI的大部分附加功能,在PHP5.3.3后已經成為了PHP的標配,
有小伙伴要問了,FastCGI又是什么鬼?CGI程式又叫做“通用網關介面”,就是讓Web服務器和你的應用程式進行互動的一個介面,就像nginx中需要配置的fastcgi_pass,一般我們會使用127.0.0.1:9000或者unix:/tmp/php-cgi.sock來配置這個引數,它的意思就是告訴nginx,過來的請求使用tcp:9000埠的監聽程式來處理或者使用unix/socket來處理,它們都是指向的PHP運行程式,
再說得通俗一點,我們運行php腳本用的是
php aaa.php
php-fpm就相當于是這個php命令,nginx通過fastcgi_pass來運行php $nginx_root(nginx組態檔中網站根目錄root配置)下的index.php,所以,如果你用的是python或者其他什么語言,都可以用它們的cgi程式來讓nginx呼叫,
FastCGI和CGI又有什么不同呢?FastCGI是啟動一個socket介面,服務器應用不需要自己去運行php,只需要向這個socket介面提交請求就可以了,
php-fpm在編譯php時需要添加--enable-fpm,一些通用的集成安裝包如lnmp、phpStudy等都會默認編譯并使用php-fpm,畢竟是標配,
tcp socket與unix socket
上文中說過nginx可以使用127.0.0.1:9000和unix:/tmp/php-cgi.sock這兩種方式來呼叫php-fpm,它們有什么區別呢?
前者,一般帶9000埠號的,是tcp形式的呼叫,也就是php-fpm啟動了一個監聽行程對9000埠進行監聽,它會調起一個tcp/ip服務,nginx在呼叫的時候會走一次tcp請求流程,也就是3次握手4次揮手,會走到網路七層中的第四層傳輸層,相對來說這種方式性能會稍差一點,啟動php-fpm后使用nestat查看埠中會出現9000埠的占用,
后者,使用的是unix套接字socket服務,通過sock檔案來交換資訊,性能相對好一些,因為它沒有tcp連接程序,也不會有9000埠的占用,
對于高負載大訪問量的網站還是推薦使用unix方式,對于普通小網站來說,無所謂使用哪個都可以,tcp方式反而更容易配置和理解,也是php-fpm.conf中默認的監聽方式,
php-fpm.conf配置中的listen屬性用來配置監聽,這里的配置要和nginx中的一致,使用tcp的就監聽127.0.0.1:9000,使用unix的就設定成/tmp/php-cgi-56.sock,
PHP-FPM的功能
以下內容摘自官方檔案:
- 支持平滑停止/啟動的高級行程管理功能
- 可以作業于不同的 uid/gid/chroot 環境下,并監聽不同的埠和使用不同的 php.ini 組態檔(可取代 safe_mode 的設定)
- stdout 和 stderr 日志記錄
- 在發生意外情況的時候能夠重新啟動并快取被破壞的 opcode
- 檔案上傳優化支持
- "慢日志" - 記錄腳本(不僅記錄檔案名,還記錄 PHP backtrace 資訊,可以使用 ptrace或者類似工具讀取和分析遠程行程的運行資料)運行所導致的例外緩慢;
- fastcgi_finish_request() - 特殊功能:用于在請求完成和重繪資料后,繼續在后臺執行耗時的作業(錄入視頻轉換、統計處理等)
- 動態/靜態子行程產生
- 基本 SAPI 運行狀態資訊(類似Apache的 mod_status)
- 基于 php.ini 的組態檔
本文參考:
- https://www.php.net/manual/zh/install.fpm.php
- https://www.cnblogs.com/sunlong88/p/9001184.html
- https://www.jianshu.com/p/34a20e8dbf10
- https://blog.csdn.net/erlib/article/details/38488937
===============
關注公眾號:【硬核專案經理】獲取最新文章
添加微信/QQ好友:【xiaoyuezigonggong/149844827】免費得PHP、專案管理學習資料
知乎、公眾號、抖音、頭條搜索【硬核專案經理】
B站ID:482780532
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/248398.html
標籤:PHP
上一篇:反射之Type類
