前言:php
最近服務器內存使用率一直居高不下,檢查以後發現可能和php-fpm進程數過多有關。本文記錄了我優化php-fpm配置文件的過程並補充了一些和php-fpm有關的知識。vim
什麼是php-fpm:服務器
php-fpm即FastCGI進程管理器,用於控制php的內存和進程等。
操做環境:php-fpm
CentOS 7
問題檢查:
首先查看php進程總數:優化
pstree|grep php-fpm
回顯:spa
|-php-fpm---20*[php-fpm]
根據回顯信息可知,查詢時有20個php-fpm進程。
也能夠經過下面的命令列出消耗內存最多的前50個進程:code
ps auxw|head -1;ps auxw|sort -rn -k4|head -50
解決過程:
下面咱們經過修改配置文件來優化php-fpm,以達到下降內存使用率的目的。
個人php-fpm配置文件在 .../server/php/etc/ 目錄下,進入該目錄。
先備份一下原配置文件:server
cp php-fpm.conf php-fpm.conf.bak
注:
使用vim打開配置文件後,按Esc鍵,以後輸入」/」, 再輸入「xxx」能夠查找「xxx」這個字符串。
具體配置參數以下:進程
pm.max_children = 100改成:pm.max_children = 25 pm.start_servers = 20改成pm.start_servers = 5 pm.min_spare_servers = 5改成pm.min_spare_servers = 2 pm.max_spare_servers = 35改成pm.max_spare_servers = 10
重啓服務器:內存
reboot
重啓後能夠發現內存使用率相比於以前下降了。
注:
pm.max_children:靜態方式下開啓的php-fpm進程數量。
pm.start_servers:動態方式下的起始php-fpm進程數量。
pm.min_spare_servers:動態方式下的最小php-fpm進程數。
pm.max_spare_servers:動態方式下的最大php-fpm進程數量。
pm = dynamic
一種是Static靜態,另外一種是Dynamic動態。若是設置成靜態,那麼只有 pm.max_children 這個參數起做用。若是設置成動態則有 pm.start_servers 、 pm.min_spare_servers 和 pm.max_spare_servers 這三個參數起做用。設置成動態後,當php-fpm啓動時會按照 pm.start_servers 的參數設置啓動相應個數的進程,以後php-fpm的進程數量將維持在 pm.min_spare_servers 和 pm.max_spare_servers 指定的個數之間。
如何選擇使用php-fpm的靜態仍是動態執行方式:
動態php-fpm執行方式容許php-fpm釋放多餘進程,從而節約內存資源。靜態php-fpm執行方式不容許php-fpm釋放多於進程,避免了頻繁開啓或中止php-fpm進程,從而下降了服務器在某些狀況下的響應時間。