避免PHP-FPM記憶體洩漏導致記憶體耗盡

吳夢涵發表於2019-05-14

對於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,那就省事多了

以上是雲棲社群小編為您精心準備的的內容,在雲棲社群的部落格、問答、公眾號、人物、課程等欄目也有的相關內容,歡迎繼續使用右上角搜尋按鈕進行搜尋記憶體 , 程式 , 程式 , 記憶體洩漏 , 配置 php-fpm php fpm記憶體洩漏、如何避免記憶體洩漏、c 避免記憶體洩漏、避免記憶體洩漏、資訊洩漏可導致,以便於您獲取更多的相關知識。


相關文章