php寫定時器怎麼避免記憶體洩露

2020-07-16 10:06:50
對於PHP-FPM多進程的模式,想要避免記憶體漏失問題很簡單,就是要讓PHP-CGI在處理一定數量進程後退出即可。

否則PHP程式或第三方模組(如Imagemagick擴充套件)導致的記憶體漏失問題會導致記憶體耗盡或不足。

php-fpm.conf中有相關設定: (推薦學習:PHP視訊教學

#請自行按需求設定
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/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寫定時器怎麼避免記憶體洩露的詳細內容,更多請關注TW511.COM其它相關文章!