解决PHP之 Allowed memory size of xxx bytes exhausted
今天写了个死循环来跑数据,直到跑完才退出。结果还没跑完,PHP就来亮红灯了。
Fatal error: Allowed memory size of 268435456 bytes exhauste d
(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) 吧。毕竟资源还是有限制的。
上一篇: iOS crash 定位
下一篇: Android Crash 笔记整理
推荐阅读
-
php运行提示:Fatal error Allowed memory size内存不足的解决方法
-
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)
-
Allowed memory size of 134217728 bytes exhausted解决办法(php内存耗尽报错)【简记】
-
PHP错误Allowed memory size of 67108864 bytes exhausted的3种解决办法
-
PHP内存限制 Allowed memory size of 134217728 bytes exhausted
-
php运行提示:Fatal error Allowed memory size内存不足的解决方法
-
Error:Allowed memory size of 134217728 bytes exhausted .PHP报错
-
网站出现内存用尽(error: Allowed memory size of 134217728 bytes exhausted (tried to all)
-
ThinkPHP提示错误Fatal error: Allowed memory size的解决方法,thinkphpfatal_PHP教程
-
ThinkPHP提示错误Fatal error: Allowed memory size的解决方法_PHP