zoukankan      html  css  js  c++  java
  • PHP的memory_limit引起的问题

    在运行PHP程序,通常会遇到下面的错误, 这个意味着PHP脚本使用了过多的内存,并超出了系统对其设置的允许最大内存。解决这个问题,首先需要查看你的程序是否分配了过多的内存,在程序没有问题的情况下,你可以通过一下方法来增加PHP的内存限制(memory_limit)

    "Fatal Error: Allowed memory size of xxxxxx bytes exhausted"

    出现该错误的原因:在确保不是程序产生的原因(例如死循环),有时候可能是php页面消耗的最大内存默认是为 128M .如果文件太大 ,图片太大或者读取接口数据进行及时的时候 会发生上述错误

    生产环境下故障处理一例
    案例:
        生产环境下,storage服务器上只安装nginx,现在是行执行PHP跑PHP脚本,在脚本的执行过程中发现(脚本内容含每次取5000个文件然后执行其它操作)速度奇慢,在本地测试时分分钟内搞定的事,在线上要执行2个多小时,经过排查排除掉服务器负载问题、数据库问题、服务器网络问题后,认为可能是php.ini配置文件中的资源限制所引起,于是修改了一下memory_limit将默认值128M修改为1024M后再次执行原脚本,速度得到大幅度提升,现把此参数的含义说明一下。

    查看php设置的memory_limit值

    [root@192-168-x-x etc]# php -i|grep memory_limit
    memory_limit => 128M => 128M

    找到php对应的配置文件

    [root@192-168-x-x etc]# php -i | grep "Loaded Configuration File"
    Loaded Configuration File => /usr/local/webserver/php-5.x.x/etc/php.ini

    在文件尾部最加一行

    [root@192-168-x-x etc]# echo "memory_limit = 1024M" >> /usr/local/webserver/php-5.x.x/etc/php.ini && php -i|grep memory_limit
    memory_limit => 1024M => 1024M

    重新加载一下web服务

    [root@192-168-x-x etc]# service nginx reload
    重新载入 nginx:                                           [确定]

    因为PHP没有守护进程一说,修改过以后,就会立即使用新的配置文件,不需要重启php-fpm进程。

    此值设置多大为好?
         建议根据应用需求来设置。物理服务器,如果内存够大的话建议限制内存较大一些如512M,1024M都可,如果是VPS之类的可能限制在128(默认)64M或者以下是比较合适的,特别是有web服务器的时候,一旦开启多个php的fast-cgi,估计服务器都卡的不动了。
    参数语法
    memory_limit integer
        本指令设定了一个脚本所能够申请到的最大内存字节数。
    指令作用
        这有助于防止写得不好的脚本消耗光服务器上的可用内存。
    一般设置不建议超过物理内存的1/4
  • 相关阅读:
    [HAOI2018]苹果树
    [TJOI2013]拯救小矮人
    [SDOI2016]硬币游戏
    一辈子都学不会的有上下界的网络流
    [AHOI2014/JSOI2014]支线剧情
    [JSOI2009]球队收益
    hdu-1856 More is better---带权并查集
    hdu-1325 Is It A Tree?---并查集
    hdu-1272 小希的迷宫---并查集或者DFS
    hdu1213-How Many Tables---基础并查集
  • 原文地址:https://www.cnblogs.com/xiewenming/p/7544180.html
Copyright © 2011-2022 走看看