靜態模式和動態模式的區別?
php-fpm的進程數可以根據設置分為動態和靜態。
靜態:直接開啟指定數量的php-fpm進程,不再增加或者減少;動態:開始的時候開啟一定數量php-fpm進程,當請求變大的時候,動態的增加php-fpm進程數到上限,當空閑的時候自動釋放空閑進程數到一個下限。這兩種不同的執行方式,可以根據服務器實際需求來進行調整。這里先說一下涉及到這個的幾個參數,他們分別是pm\pm.max_children\pm.start_servers\pm.min_spare_servers和pm.max_spare_servers。pm表示用哪種方式,有兩個值可以選擇,就是static靜態或者dynamic動態。在老一些的版本中,dynamic又被稱作Apache-like。這個要注意看配置文件給出的說明了。下面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等。