RJ博客

PHP-FPM内存优化

本文目录

服务器运行一段时间后,发现内存占用不断增长,通过top命名(输入命名后按m键可按进程占用内存大小的排序)查看,发现大部分内存都被 php-fpm 占用,网上查了一下,大概的意思是说,处理每个php请求完成后,php-fpm会回收内存,但不会释放给操作系统,从而导致大量的内存被php-fpm占用。

实测的话如果页面能正常执行完,内存是能释放的,而页面因内存超限而报错的时候,内存是没有释放给操作系统的。

网上提到解决方法: 

1) 调整php-fpm.conf中的pm.max_requests值,pm.max_requests的作用是发送多少个 请求后会重启该线程,从而使其释放占用的内存,默认0,即决不重启。

2) 同时用一个脚本来进行杀掉php-fpm,从而释放他占用的内存。

针对

方案1,阈值设置太大没效果,设置太小又会导致频繁重启,耗费资源

方案2,如果系统负载巨大,重启会导致cpu的使用率飙升

考虑到服务器主要是做内部数据统计的,有两个特质:

1) 访客量不大

2) 单次访问消耗内存较大

所以最后还是采用第二种方案,简单的杀死php-fpm脚本如下:

#!/bin/bash
log=/home/www/scripts/php-fpm.log
echo `date "+%F %H:%M:%S"` >> $log
for PID in `ps aux|grep php-fpm|grep -v grep|awk '{if($4>=1)print $2}'`
do
kill -9 $PID
echo $PID >> $log
done

把脚本加到crontab中让其定期执行即可。

考虑到系统的稳定性,可以对脚本做下优化,只杀死闲置的进程:

#!/bin/bash
#监控php-fpm进程cpu、内存内用率,连续2次监控超过阈值,则kill

#公共参数
sc_path=/data/scripts/monitor
total_mem=8000    #单位MB    内存总量
limit_mem=100     #单位MB    内存阈值容量
limit_per=`echo "scale=2;per=${limit_mem}*100/${total_mem};if(length(per)==scale(per)) print 0;print per"|bc`  #内存阈值百分比
sleep_sec=10      #如发现异常程序,第二次检查相隔时间间隔,单位s

main_php()
{
    #过滤出内存利用率大于阈值且cpu不为0的程序,不存在,则退出,存在则sleep_sec后,再次执行,如存在,则杀掉进程 
    first_pro_pid=`ps aux|grep "php-fpm: pool www"|grep -v grep  |awk -v op_per=${limit_per} '{if($4 >=op_per && $3==0)print  $2 }'`
    if [ ${#first_pro_pid[*]}  == 0     ]
    then
        exit
    else
        sleep ${sleep_sec}
        for  tmp_pid in  ${first_pro_pid[*]} 
        do
            sec_pro_pid=`ps aux|grep "php-fpm: pool www"|grep "${tmp_pid}"|grep -v grep |awk -v op_per=${limit_per} '{if($4 >=op_per && $3==0)print  $2 }'`
            if [ ! -z ${sec_pro_pid}   ]
            then
                echo "####`date +'%Y%m%d %H:%M:%S'`  ###PID:${tmp_pid}  异常,killed!!!! 具体如下: "  >>${sc_path}/logs/php_monitor.log     
                ps aux |grep " ${sec_pro_pid} "|grep  -v grep  >>${sc_path}/logs/php_monitor.log
                kill ${sec_pro_pid}
            fi
        done
    fi  
}
main_php



Refer:

https://zhengdl126.iteye.com/blog/1564524

http://www.mamicode.com/info-detail-2494585.html

https://segmentfault.com/a/1190000010413463

相关推荐

发表评论