避免PHP-FPM內(nèi)存泄漏導(dǎo)致內(nèi)存耗盡

php-FPM如果出現(xiàn)存存泄漏問題可能導(dǎo)致服務(wù)器內(nèi)存不足從而導(dǎo)致服務(wù)器資源用盡了,這樣就會(huì)導(dǎo)致網(wǎng)站無法訪問了,下面一起來看一篇避免PHP-FPM內(nèi)存泄漏導(dǎo)致內(nèi)存耗盡的配置。

對(duì)于PHP-FPM多進(jìn)程的模式,想要避免內(nèi)存泄漏問題很簡(jiǎn)單,就是要讓PHP-CGI在處理一定數(shù)量進(jìn)程后退出即可。

否則PHP程序或第三方模塊(如Imagemagick擴(kuò)展)導(dǎo)致的內(nèi)存泄漏問題會(huì)導(dǎo)致內(nèi)存耗盡或不足。

php-fpm.conf中有相關(guān)配置:

請(qǐng)自行按需求配置pm.max_requests = 1024
實(shí)際上還有另一個(gè)跟它有關(guān)聯(lián)的值max_children,這個(gè)是每次php-fpm會(huì)建立多少個(gè)進(jìn)程,這樣實(shí)際上的內(nèi)存消耗是max_children*max_requests*每個(gè)請(qǐng)求使用內(nèi)存。

另外一些粗暴的方法包括建立cron kill掉占用內(nèi)存過多的php-cgi,

  • 檢查php進(jìn)程的內(nèi)存占用,殺掉內(nèi)存使用超額的進(jìn)程

一般情況下,如果php-cgi進(jìn)程占用超過1%的內(nèi)存,就得考慮一下是否要?dú)⒌羲恕R驗(yàn)槠胀ㄇ闆r下,php-cgi進(jìn)程一般占用0.2%或以下。

這里提供一個(gè)腳本供各位使用,就是放在cron任務(wù)里,每分鐘執(zhí)行一次。

使用crontab -e 命令,然后添加如下調(diào)度任務(wù)

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

kill_php_cgi.sh腳本如下

#!/bin/sh
#如果是要?dú)⒌魀hp-fpm的進(jìn)程,下面的語句中php-cgi請(qǐng)改成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
```
* 增加內(nèi)存,將PHP_FCGI_MAX_REQUESTS的值設(shè)置成跟你內(nèi)存總存儲(chǔ)量相對(duì)應(yīng)的值

* 優(yōu)化程序,降低處理每次請(qǐng)求占用的內(nèi)存大小

如果PHP-FPM能夠提供配置子進(jìn)程內(nèi)存超過指定大小就被kill,那就省事多了
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容