SQLyog如何创建数据库,详细教程,SQLyog如何创建数据库,你知道怎么操作吗?下面将详细介绍......
如何解决 PHP Fatal error: Allowed memory of
在导出订单数据的时候,当订单量达到13849的时候,页面就直接返回:500了。查看nginx日志,错误信息如下:
问题描述
从nginx日志中可知,是内存不够用了,默认一个php进程允许占用的内存是134217728bytes,而这个php进程还需要1048560bytes内存才能往下执行。
在php.ini中有关于内存的限制:
memory_limit = 128M//128M=131072K=134217728b
我可以把这个值改的大一点来解决问题。
但为什么才1万多数据就占去了128M的内存那?
于是用 echo__LINE__.":".memory_get_usage(),"br>";
逐行看程序内存占用,以此来优化内存
PHP内存优化方法
去掉多余函数和变量
代码中的空格和注释都不影响内存的占用,但调用文件中多余的函数和变量就会占用内存,于是把不用的函数方法和变量删除掉,尤其是一些复制过来的文件,会有很多不需要的方法,一定要删掉
不要声明多余的变量
如:
不用的变量及时释放掉
有些变量都是过程变量,尤其是做一些数据格式化转换的时候,一些原始的,过度的变量要及时释放掉
如:
优化函数返回结果大小
函数尽可能的只返回每次调用所需要的结果集
比如:要得到的是:$datastruct
优化mysql返回结果集的大小(效果显著)
查询了一下表中数据的大小 (看图)
大小:2.52MB.
再看看结果集在PHP中占的内存:
内存耗用:(76201912-1086264)/1024/1024 = 71.64M
哇 PHP的数组太占内存了
网上有人做过数组占用内存的测试,如下:
PHP中的数组是用一种HASH结构(HashTable)来实现的,
关于PHP中的数组的实现,鸟哥有一篇文章介绍过:深入理解PHP之数组(遍历顺序)
那么我们怎么优化那?
1:缩小返回的结果集,一开始是查询出了所有字段,改成 只返回需要的字段
2:在1的基础上,我们再使用mysql_unbuffered_query来查询数据
缓存里尽量只存需要的信息
目前我们常用redis memcache做缓存,如果存全量信息,随着数据量的增加,全量信息会成倍数的增加,都很消耗机器内存
设计数据库的时候,把数据库字段设计的尽可能小(前提是满足需求)
1:为了省空间 2:为了查询的时候
这样基本就搞定了。
推荐以下鸟哥的三篇文章:(http://www.laruence.com/)
深入理解PHP内存管理之谁动了我的内存
深入理解PHP之数组(遍历顺序)
PHP中的Hash算法
以上方法由办公区教程网编辑摘抄自百度经验可供大家参考!
相关文章
- 详细阅读
- 详细阅读
-
如何处理'mysql' 不是内部或外部命令的报错详细阅读
如何处理mysql 不是内部或外部命令的报错,今天安装myql-5.7.23,想要从命令行中连接myql,结果出现如图报错。下面来写下,这种报错的解决方式:......
2023-03-16 500 MYSQL