如何解决 PHP Fatal error: Allowed memory of

2025-10-24 10:47:43

1、

从nginx日志中可知,是内存不够用了,默认一个php进程允许占用的内存是134217728bytes,而这个php进程还需要1048560bytes内存才能往下执行。

在php.ini中有关于内存的限制:

memory_limit = 128M  //128M=131072K=134217728b

我可以把这个值改的大一点来解决问题。

如何解决 PHP Fatal error: Allowed memory of

2、但为什么才1万多数据就占去了128M的内存那?

于是用 echo __LINE__.":".memory_get_usage(),"<br>";

逐行看程序内存占用,以此来优化内存

如何解决 PHP Fatal error: Allowed memory of

1、去掉多余函数和变量

代码中的空格和注释都不影响内存的占用,但调用文件中多余的函数和变量就会占用内存,于是把不用的函数方法和变量删除掉,尤其是一些复制过来的文件,会有很多不需要的方法,一定要删掉

如何解决 PHP Fatal error: Allowed memory of

2、不要声明多余的变量

如:

如何解决 PHP Fatal error: Allowed memory of

3、不用的变量及时释放掉

有些变量都是过程变量,尤其是做一些数据格式化转换的时候,一些原始的,过度的变量要及时释放掉

如:

如何解决 PHP Fatal error: Allowed memory of

4、优化函数返回结果大小

函数尽可能的只返回每次调用所需要的结果集

比如:要得到的是:$datastruct

如何解决 PHP Fatal error: Allowed memory of

5、优化mysql返回结果集的大小(效果显著)

查询了一下表中数据的大小 (看图)

大小:2.52MB.

再看看结果集在PHP中占的内存:

内存耗用:(76201912-1086264)/1024/1024 = 71.64M

哇 PHP的数组太占内存了

网上有人做过数组占用内存的测试,如下:

如何解决 PHP Fatal error: Allowed memory of

如何解决 PHP Fatal error: Allowed memory of

6、PHP中的数组是用一种HASH结构(HashTable)来实现的,

关于PHP中的数组的实现,鸟哥有一篇文章介绍过:深入理解PHP之数组(遍历顺序)

那么我们怎么优化那?

1:缩小返回的结果集,一开始是查询出了所有字段,改成 只返回需要的字段

2:在1的基础上,我们再使用 mysql_unbuffered_query来查询数据

如何解决 PHP Fatal error: Allowed memory of

7、缓存里尽量只存需要的信息

目前我们常用redis memcache做缓存,如果存全量信息,随着数据量的增加,全量信息会成倍数的增加,都很消耗机器内存

如何解决 PHP Fatal error: Allowed memory of

8、设计数据库的时候,把数据库字段设计的尽可能小(前提是满足需求)

1:为了省空间 2:为了查询的时候

如何解决 PHP Fatal error: Allowed memory of

9、这样基本就搞定了。

推荐以下鸟哥的三篇文章:(http://www.laruence.com/)

 深入理解PHP内存管理之谁动了我的内存

 深入理解PHP之数组(遍历顺序)

 PHP中的Hash算法

如何解决 PHP Fatal error: Allowed memory of

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢