小編給大家分享一下php寫(xiě)定時(shí)器避免內(nèi)存泄露的方法,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
成都創(chuàng)新互聯(lián)專注于中衛(wèi)企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站開(kāi)發(fā),商城網(wǎng)站開(kāi)發(fā)。中衛(wèi)網(wǎng)站建設(shè)公司,為中衛(wèi)等地區(qū)提供建站服務(wù)。全流程按需制作網(wǎng)站,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)對(duì)于PHP-FPM多進(jìn)程的模式,想要避免內(nèi)存泄漏問(wèn)題很簡(jiǎn)單,就是要讓PHP-CGI在處理一定數(shù)量進(jìn)程后退出即可。
否則PHP程序或第三方模塊(如Imagemagick擴(kuò)展)導(dǎo)致的內(nèi)存泄漏問(wèn)題會(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)存過(guò)多的php-cgi
1.檢查php進(jìn)程的內(nèi)存占用,殺掉內(nèi)存使用超額的進(jìn)程
一般情況下,如果php-cgi進(jìn)程占用超過(guò)1%的內(nèi)存,就得考慮一下是否要?dú)⒌羲?。因?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/bash /usr/local/script/kill_php_cgi.sh kill_php_cgi.sh腳本如下 #!/bin/sh #如果是要?dú)⒌魀hp-fpm的進(jìn)程,下面的語(yǔ)句中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
2.增加內(nèi)存,將PHP_FCGI_MAX_REQUESTS的值設(shè)置成跟你內(nèi)存總存儲(chǔ)量相對(duì)應(yīng)的值
3.優(yōu)化程序,降低處理每次請(qǐng)求占用的內(nèi)存大小
如果PHP-FPM能夠提供配置子進(jìn)程內(nèi)存超過(guò)指定大小就被kill,那就省事多了
以上是php寫(xiě)定時(shí)器避免內(nèi)存泄露的方法的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)網(wǎng)站制作公司行業(yè)資訊頻道!