解決CentOS 7中php-fpm進程數過多致使服務器內存資源消耗較大的問題

前言: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

重啓後能夠發現內存使用率相比於以前下降了。
注:

  1. php-fpm.conf中參數做用的說明:

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

  2. 進行上述設置時,我將php-fpm的執行方式設置成了動態:

    pm = dynamic

  3. php-fpm有兩種執行方式:

    一種是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 指定的個數之間。

  4. 如何選擇使用php-fpm的靜態仍是動態執行方式:

    動態php-fpm執行方式容許php-fpm釋放多餘進程,從而節約內存資源。靜態php-fpm執行方式不容許php-fpm釋放多於進程,避免了頻繁開啓或中止php-fpm進程,從而下降了服務器在某些狀況下的響應時間。

相關文章
相關標籤/搜索