PHP動態模式和靜態模式區別

php-fpm的進程數可以根據設置分爲動態和靜態。

靜態:直接開啓指定數量的php-fpm進程,不再增加或者減少;
動態:開始的時候開啓一定數量php-fpm進程,當請求變大的時候,動態的增加php-fpm進程數到上限,當空閒的時候自動釋放空閒進程數到一個下限。

  • 這兩種不同的執行方式,可以根據服務器實際需求來進行調整。

這裏先說一下涉及到這個的幾個參數,他們分別是 pmpm.max_children``pm.start_serverspm.min_spare_servers和 pm.max_spare_servers

下面4個參數的意思分別爲:

pm.max_children 靜態方式下開啓的php-fpm進程數量;
pm.start_servers 動態方式下的起始php-fpm進程數量;
pm.min_spare_servers 動態方式下的最小php-fpm進程數量;
pm.max_spare_servers 動態方式下的最大php-fpm進程數量。

    • 如果將dm設置爲 static,那麼就只有 pm.max_children這個參數生效。系統會開啓設置的數量個 php-fpm進程。
    • 如果將 dm 設置爲 dynamic,那麼 pm.max_children參數會失效,後面3個參數生效。系統會在 php-fpm運行開始的時候啓動 pm.start_servers個 php-fpm進程,然後根據系統需求動態在 pm.min_spare_servers和 pm.max_spare_servers之間調整 php-fpm進程數。
    • 那麼,對於我們的服務器,選擇哪種執行方式比較好呢?事實和Apache一樣,我們運行的PHP程序在執行完成後,或多或少都會有內存泄露的問題。這也是爲什麼開始的時候一個php-fpm進程只佔用3M左右內存,運行一段時間後就會上升到20到30M的原因。所以,動態方式因爲會結束掉多餘進程,可以回收釋放一些內存,所以推薦在內存較少的服務器上使用。具體最大數量根據物理內存總大小除以20M得到。比如說512M的VPS,建議pm.max_spare_servers值設置爲20。而至於pm.min_spare_servers,則建議根據服務器的負載情況來設置,比較合適的值在5到10之間。
    • 對比較大內存的服務器來說,設置爲靜態的話會提高效率。因爲頻繁開關php-fpm進程也會有時滯,所以內存夠大的情況下開靜態效果會更好。數量可以根據物理內存總大小除以30M得到。比如說2GB內存的服務器,可以設置爲50;4GB內存可以設置爲100等。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章