最新跟同事在测试环境测试代码的时候服务器崩溃了,出现了这个提示,找了许久才发现是内存爆满了的问题,先说说这个报错的原因吧。
这是服务器配置的可用内存用尽的提示。
解决这个问题可以有:
一是直接取消PHP的内存限制:ini_set("memory_limit","-1");
二是根据自己的需要及参考本机的内存大小修改php内存限制,如改为256M;即ini_set("memory_limit","5256M");
或者在php.ini文件里修改memory_limit = 256M;
但是内存限制有啥意义呢?
php中的相关文档解释 memory_limit 如下:
memory_limit: integer
该指令设定了一个脚本 所能够申请到的最大内存字节数。这有助于防止写得不好的脚本消耗光服务器上的可用内存。要使用此指令必须在编译的时候激活。因此 configure 一行中应该包括:--enable-memory-limit。如果不需要任何内存上的限制,必须将其设为 -1。 从 php 4.3.2 起,当激活了 memory_limit,PHP 函数 memory_get_usage() 便可以使用了。也就是说,php在一个 page 中的处理内存限制。
使用memory_get_usage()打印出来,原来服务器memory_limit 已经高达1G了,居然会报内存不够!一开始以为是服务器配置出来什么问题,最后发现是代码中有个死循环,A类中的构造函数实例化了B类,B类构造函数中又实例化了A类,导致在C类中实例化AB任何一个类了都发送死循环,不断实例化,导致内存不够用,程序卡死在那里了。
优化:最后把A B类中调用彼此的部分改成按需New一个类,问题才得以解决。
- 转载请注明来源:解决PHP之 Allowed memory size of xxx bytes exhausted
- 本文永久链接地址:http://icehill.cn/post/single/info/114.html