避免PHP-FPM記憶體流失導致記憶體耗盡

來源:互聯網
上載者:User

對於PHP-FPM多進程的模式,想要避免記憶體流失問題很簡單,就是要讓PHP-CGI在處理一定數量進程後退出即可。
否則PHP程式或第三方模組(如Imagemagick擴充)導致的記憶體流失問題會導致記憶體耗盡或不足。
php-fpm.conf中有相關配置:
#請自行按需求配置

pm.max_requests = 1024

實際上還有另一個跟它有關聯的值max_children,這個是每次php-fpm會建立多少個進程,這樣實際上的記憶體消耗是max_children*max_requests*每個請求使用記憶體。

另外一些粗暴的方法包括建立cron kill掉佔用記憶體過多的php-cgi,


1.檢查php進程的記憶體佔用,殺掉記憶體使用量超額的進程

一般情況下,如果php-cgi進程佔用超過1%的記憶體,就得考慮一下是否要殺掉它了。因為普通情況下,php-cgi進程一般佔用0.2%或以下。

這裡提供一個指令碼供各位使用,就是放在cron任務裡,每分鐘執行一次。

使用crontab -e 命令,然後添加如下調度任務

* * * * * /bin/bash /usr/local/script/kill_php_cgi.sh

kill_php_cgi.sh指令碼如下

#!/bin/sh
#如果是要殺掉php-fpm的進程,下面的語句中php-cgi請改成php-fpm
pids=`ps -ef|grep php-cgi|grep -v "grep"|grep -v "$0"| awk '{print $2}'`
if [ "$pids" != "" ];then
for  pid  in   $pids;
do
kill -9 $pid
done

fi

2.增加記憶體,將PHP_FCGI_MAX_REQUESTS的值設定成跟你記憶體總儲存量相對應的值

3.最佳化程式,降低處理每次請求佔用的記憶體大小

如果PHP-FPM能夠提供配置子進程記憶體超過指定大小就被kill,那就省事多了

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.