`
crystalwiner
  • 浏览: 90333 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
社区版块
存档分类
最新评论

解决PHP之 Allowed memory size of xxx bytes exhausted

    博客分类:
  • php
阅读更多

    今天写了个死循环来跑数据,直到跑完才退出。结果还没跑完,PHP就来亮红灯了。

 

    Fatal error: Allowed memory size of 268435456 bytes exhauste

(tried to allocate 48 bytes) in D:\www\mpaa\include\function\aa.func.php on line 278

    

     针对这个问题的解决方法有两种:

 

     一是直接取消PHP的内存限制:ini_set("memory_limit","-1");

 

     二是根据自己的需要及参考本机的内存大小修改php内存限制,如改为516M;即ini_set("memory_limit","516M");

     或者在php.ini文件里修改memory_limit = 516M;

 

       但是内存限制有啥意义呢?

       php中的相关文档解释 memory_limit 如下:

       memory_limit: integer
       该指令设定了一个脚本 所能够申请到的最大内存字节数。这有助于防止写得不好的脚本消耗光服务器上的可用内存。要使用此指令必须在编译的时候激活。因此 configure 一行中应该包括:--enable-memory-limit。如果不需要任何内存上的限制,必须将其设为 -1。 从 php 4.3.2 起,当激活了 memory_limit,PHP 函数 memory_get_usage() 便可以使用了。也就是说,php在一个 page 中的处理内存限制,默认的(/etc/php.ini)定义为 128M (我的系统默认安装后),后来开发组的应用写的越来越复杂,但是在结构上可能还有些欠缺,频繁的对象请求,居然造成了内存不足。


上面我们说过,最好的方式应该在应用层面解决,而不是不停的增加内存设置。我对代码进行了一个测试,在页面结尾输出下面内容:

<?
   printf("   total run: %.2f s<br>".
            "memory usage: %.2f M<br> ",
             microtime(true)-$HeaderTime,
            memory_get_usage() / 1024 / 1024 );
?>
结果显示可以用骇人听闻来形容:

total runtime: 1.47 s

memory usage: 77.09 M


一个页面居然会有77M的请求。究其原因,是程序员在编码时,仅仅对变量赋值,却从来没有 unset ($var) 过。试想,如果一个页面请求要处理20个sql查询,每个sql查询返回10个sql结果,而程序员从来都不关心是返回一个row的所有column还是 仅仅返回需要的column(实际上当我们采用更common的中间层时,往往会返回全部的column而不是特定的某几个字段,就像在 ORM 中如NHibernate, JBOSS中的那样)如果一条row有10K, 那么这个页面到处理结束时就要增加到 10K*10*20=2M的数组分配,这还不算有时候我们需要最数组进行复制。

因此在php中,比较合理的方式,还是用后就 unset($var) 吧。毕竟资源还是有限制的。

分享到:
评论

相关推荐

    php Allowed memory size of 134217728 bytes exhausted

    PHP 中最常见的错误之一是 "Allowed memory size of 134217728 bytes exhausted",這個錯誤是指 PHP腳本在執行過程中,超出了允許的内存限制,導致腳本無法繼續執行。在這篇文章中,我們將詳細解釋這個錯誤的原因、...

    php解决Allowed memory size of bytes exhausted

    通过以上这些策略,你可以有效地解决PHP中"Allowed memory size of bytes exhausted"的问题,并优化你的代码以更高效地利用内存资源。记住,优化不仅关乎提高内存限制,更重要的是编写更聪明的代码,减少不必要的...

    PHP错误Allowed memory size of 67108864 bytes exhausted的3种解决办法

    在PHP编程过程中,有时会遇到一个常见的错误提示:“Allowed memory size of X bytes exhausted”,这个错误意味着PHP脚本在运行过程中超过了预设的最大内存限制。在给出的标题和描述中,这个问题的具体例子是...

    Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)

    主要介绍了Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)错误的解决方法,需要的朋友可以参考下

    ThinkPHP提示错误Fatal error: Allowed memory size的解决方法

    本文实例讲述了ThinkPHP提示错误Fatal error: Allowed memory size的解决方法。...错误提示:Fatal error: Allowed memory size of 1073741824 bytes exhausted (tried to allocate 523800 bytes) in /var/w

    php运行提示:Fatal error Allowed memory size内存不足的解决方法

    在PHP编程过程中,有时会遇到一个常见的错误提示:“Fatal error: Allowed memory size of [内存大小] bytes exhausted”,这意味着PHP在执行脚本时超过了分配给它的内存限制。这通常是由于程序存在内存泄漏、处理...

    Laravel开发-laravel-ifx

    Laravel作为流行的PHP web开发框架,通过其灵活的架构和丰富的生态系统,使得开发者能够轻松地与各种数据库系统进行交互,包括Informix。 首先,我们需要了解Laravel的数据库连接和查询构建器。Laravel提供了统一的...

    悟空CRM安装出现Fatal error Allowed memory size of 8388608 bytes的解决办法

    根据提供的文件信息,我们将详细探讨在安装悟空CRM时遇到的“Fatal error: Allowed memory size of 8388608 bytes”错误及其解决办法。该问题通常表示PHP在执行过程中超过了分配的内存限制,导致程序无法继续运行。...

    关于Yii2框架跑脚本时内存泄漏问题的分析与解决

    这种情况通常表现为在处理一定数量的数据后,系统提示内存耗尽,例如“Allowed memory size of 134217728 bytes exhausted”。在描述中提到的现象是在对`edu_ocr_img`表进行归档操作时,每处理几万个数据,就会触发...

    php读取excel及写入excel (强烈推荐)

    包含了php操作excel的读取类及写入类。...Fatal error: Allowed memory size of xxxxx bytes exhausted (tried to allocate 71 bytes) in /xxx/xxx/ss/oleread.inc on line 133]错误 强烈推荐!!!!!

    修改PHP的memory_limit限制的方法分享

    在运行PHP程序,通常会遇到“Fatal Error: Allowed memory size of xxxxxx bytes exhausted”的错误, 这个意味着PHP脚本使用了过多的内存,并超出了系统对其设置的允许最大内存

    关于php内存不够用的快速解决方法

    Allowed memory size of 8388608 bytes exhausted (tried to allocate 1298358 bytes) 出现该错误的原因:在确保不是程序产生的原因(例如死循环),是由于php页面消耗的最大内存默认是为 8M (在PHP的ini件里可以...

    PHP生成器简单实例

    //Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 32 bytes) in E:\php\test\index.php on line 5 range(1, 100000000); PHP5.5实现了生成器,每当产生一个数组元素则用yield...

    解决PHP里大量数据循环时内存耗尽的方法

    错误提示可能类似于“PHP Fatal error: Allowed memory size of XXX bytes exhausted”。针对这类问题,开发者可以采取多种策略来优化内存使用。 首先,要理解PHP的内存管理机制。PHP脚本默认有内存使用上限,可以...

    深入PHP内存相关的功能特性详解

    可能有的读者碰到过类似下面的错误吧:Fatal error: Allowed memory size of X bytes exhausted (tried to allocate Y bytes)这个错误的信息很明确,PHP已经达到了允许使用的最大内存了,通常上来说这很有可能是我们...

    php采用curl访问域名返回405 method not allowed提示的解决方法

    本文将详细介绍在使用curl访问特定域名时遇到405 Method Not Allowed错误的解决方法。首先,我们先来理解什么是405错误以及其背后可能的原因。 HTTP状态码405 Method Not Allowed表示客户端请求的HTTP方法不被...

Global site tag (gtag.js) - Google Analytics