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

本文由荒原之夢原創,原文連接:http://zhaokaifeng.com/?p=653php

什麼是php-fpm:

php-fpm即FastCGI進程管理器,用於控制php的內存和進程等。vim

操做環境:

CentOS 7服務器

問題檢查:

首先查看php進程總數:php-fpm

pstree|grep php-fpm

回顯:優化

|-php-fpm---20*[php-fpm]

根據回顯信息可知,查詢時有20個php-fpm進程。
也能夠經過下面的命令列出消耗內存最多的前50個進程:spa

ps auxw|head -1;ps auxw|sort -rn -k4|head -50

解決過程:

下面咱們經過修改配置文件來優化php-fpm,以達到下降內存使用率的目的。
個人php-fpm配置文件在 …/server/php/etc/ 目錄下,進入該目錄。
先備份一下原配置文件:code

cp php-fpm.conf php-fpm.conf.bak

注:使用vim打開配置文件後,按Esc鍵,以後輸入」/」, 再輸入「xxx」能夠查找「xxx」這個字符串。server

具體配置參數以下:
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進程,從而下降了服務器在某些狀況下的響應時間。
相關文章
相關標籤/搜索