• 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
  • 相关阅读:
    zookeeper记录2(选举模式和ZooKeeper的集群安装)
    端口复用技术简单了解;重用端口;socket复用端口
    java线程池如何合理配置核心线程数?(转)
    数据库锁机制(转)
    mysql左连接锁表_不得不会的mysql锁(转)
    POI: calculated end index (4361) is out of allowable range (4339..4358)
    jdbcTemplate事务管理
    springboot 访问静态资源
    springboot集成持久化框架
    第六章 FreeBSD之配置日期和时间
  • 原文地址:https://www.cnblogs.com/xiewenming/p/7544180.html
Copyright © 2020-2023  润新知