php-fpm(PHP-FPM是一個PHPFastCGI管理器)

來源:互聯網
上載者:User
簡介

PHP-FPM其實是PHP原始碼的一個補丁,旨在將FastCGI進程管理整合進PHP包中。必須將它patch到你的PHP原始碼中,在編譯安裝PHP後才可以使用。

現在我們可以在最新的PHP 5.3.2的源碼樹裡下載得到直接整合了PHP-FPM的分支,據說下個版本會融合進PHP的主分支去。相對Spawn-FCGI,PHP-FPM在CPU和記憶體方面的控制都更勝一籌,而且前者很容易崩潰,必須用crontab進行監控,而PHP-FPM則沒有這種煩惱。

PHP5.3.3已經整合 php-fpm了,不再是第三方的包了。PHP-FPM提供了更好的PHP 進程管理方式,可以有效控制 記憶體和 進程、可以平滑 重載PHP配置,比spawn-fcgi具有更多優點,所以被PHP官方收錄了。在./configure的時候帶 ?enable-fpm參數即可開啟PHP-FPM。

使用PHP-FPM來控制PHP-CGI的FastCGI進程

/usr/local/ php/sbin/ php-fpm{start|stop|quit|restart|reload| logrotate}

--start 啟動 php的 fastcgi進程

--stop 強制終止 php的 fastcgi進程

--quit 平滑終止 php的 fastcgi進程

--restart 重啟 php的 fastcgi進程

--reload 重新平滑載入 php的 php.ini

--logrotate 重新啟用log檔案

特色功能

所有這些特性都是“不打斷”的方式實現的。也就是說,如果你不使用它們,它們的存在不會影響 php的功能性??他們都是“透明”的。

Error header

範圍: php.ini 選項

分類:便利性

預設情況下,如果被訪問的 php指令碼包含語法錯誤,使用者會收到一個空的“200 ok”頁。這是不方便的。Error header 這個 php.ini 選項允許在這種情況下產生一個 HTTP 錯誤碼,比如“HTTP/1.0 550 Server Made Big Boo”,從而中斷web server請求並顯示一個正確的錯誤頁。

如果要實現這樣的功能,需要在 php.ini 中添加一條 fastcgi.error_header = "HTTP/1.0 550 Server Made Big Boo"

在 php-5.2.4 中添加了類似,但不相同的功能:如果被訪問的php指令碼包含語法錯誤,並且 display_errors = off,會立刻返回“HTTP/1.0 500 Internal Server Error”。

如果你需要設定一個 503 錯誤,或者想要使這個行為獨立於 display_errors 的設定,那麼可以使用 fastcgi.error_header。如果你在 php-5.2.5 或以上版本上啟用 php-fpm,那麼 fastcgi.error_header的優先順序更高。

最佳化的上傳支援

實質:web server 支援

類型:最佳化

這個特性正如名字那樣,可以加速對大 POST 請求的處理速度,包括檔案上傳。最佳化是通過將請求體已寫入一個臨時檔案,然後 fastcgi協議傳遞檔案名稱而不是請求體到來實現的。目前就我所知,只有 nginx0.5.9 以上才支援這個功能。顯然,這種模式只在 php和 web server 在一台機器上的時候才能用。

nginx 範例配置:

location ~ \. php$ {

fastcgi_pass_request_body off;

client_body_in_file_only clean;

fastcgi_param REQUEST_BODY_FILE $request_body_file;

...

fastcgi_pass ...;

}

在 php中不需要配置任何東西。如果 php收到了參數REQUEST_BODY_FILE,就讀取其中的請求體,如果沒有,就自行從 fastcgi協議中讀取請求體。

結合這個特性,可以考慮對 臨時檔案使用記憶體檔案系統,例如tmpfs(linux):

client_body_temp_path /dev/shm/client_body_temp;

fastcgi_finish_request()

範圍: php函數

類型:最佳化

這個特性可以提高一些 php請求的處理速度。如果有些處理可以在頁面產生完後進行,就可以使用這種最佳化。比如,在 memcached 中儲存 session 就可以在頁面交給 web server 後進行。 fastcgi_finisth_request() ,這一特性可以結束響應輸出,web server 可以立即開始交給等不及的用戶端,而此刻, php可以在請求的上下文環境中處理許多事情。比如儲存session,轉換上傳的視頻,處理統計等等。

fastcgi_finisth_request() 會觸發 shutdown 函數運行。

request_slowlog_timeout

範圍: php-fpm.conf 選項

分類: 方便

這個選項能讓你跟蹤執行緩慢的指令碼並把他們連同調用棧一起記錄再記錄檔中。例如如下設定:

5s

logs/slow.log

正如你再例子中看到的,指令碼運行了 5 秒以上,並很可能是由於 mysql 響應慢造成的(top backtrace)。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.