• 技术文章 >php教程 >PHP源码

    避免PHP-FPM内存泄漏导致内存耗尽

    2016-06-08 17:19:59原创675
    PHP-FPM如果出现存存泄漏问题可能导致服务器内存不足从而导致服务器资源用尽了,这样就会导致网站无法访问了,下面一起来看一篇避免PHP-FPM内存泄漏导致内存耗尽的配置。

    对于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,那就省事多了

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:PHP quot CGI FPM kill
    上一篇:PHP目录/文件拷贝/复制自定义函数分享 下一篇:PHP判断iPhone、iPad、Android、PC设备的方法
    php培训_php实战培训【立即报名】-php中文网第20期

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• PHP把数组编译成URL格式• 文件MIME类型获取• 数组转xml• 极简的创建文件夹函数 • PHP读取文本文件并逐行输出该行使用最多的字符串及对应次数
    1/1

    PHP中文网