首页 > 软件开发 > MYSQL >

如何解决 PHP Fatal error: Allowed memory of

来源:互联网 2023-03-16 23:01:20 版权归原作者所有,如有侵权,请联系我们

在导出订单数据的时候,当订单量达到13849的时候,页面就直接返回:500了。查看nginx日志,错误信息如下:mnM办公区 - 实用经验教程分享!

如何解决 PHP Fatal error: Allowed memory ofmnM办公区 - 实用经验教程分享!

问题描述

  • 1

    mnM办公区 - 实用经验教程分享!

    从nginx日志中可知,是内存不够用了,默认一个php进程允许占用的内存是134217728bytes,而这个php进程还需要1048560bytes内存才能往下执行。mnM办公区 - 实用经验教程分享!

    在php.ini中有关于内存的限制:mnM办公区 - 实用经验教程分享!

    memory_limit = 128M//128M=131072K=134217728bmnM办公区 - 实用经验教程分享!

    我可以把这个值改的大一点来解决问题。mnM办公区 - 实用经验教程分享!

    如何解决 PHP Fatal error: Allowed memory ofmnM办公区 - 实用经验教程分享!

  • 2

    但为什么才1万多数据就占去了128M的内存那?mnM办公区 - 实用经验教程分享!

    于是用 echo__LINE__.":".memory_get_usage(),"br>";mnM办公区 - 实用经验教程分享!

    逐行看程序内存占用,以此来优化内存mnM办公区 - 实用经验教程分享!

    如何解决 PHP Fatal error: Allowed memory ofmnM办公区 - 实用经验教程分享!

  • 2此文章非法爬取自百度经验
  • PHP内存优化方法

  • 1

    去掉多余函数和变量mnM办公区 - 实用经验教程分享!

    代码中的空格和注释都不影响内存的占用,但调用文件中多余的函数和变量就会占用内存,于是把不用的函数方法和变量删除掉,尤其是一些复制过来的文件,会有很多不需要的方法,一定要删掉mnM办公区 - 实用经验教程分享!

    如何解决 PHP Fatal error: Allowed memory ofmnM办公区 - 实用经验教程分享!

  • 2

    不要声明多余的变量mnM办公区 - 实用经验教程分享!

    mnM办公区 - 实用经验教程分享!

    如:mnM办公区 - 实用经验教程分享!

    如何解决 PHP Fatal error: Allowed memory ofmnM办公区 - 实用经验教程分享!

  • 3

    不用的变量及时释放掉mnM办公区 - 实用经验教程分享!

    有些变量都是过程变量,尤其是做一些数据格式化转换的时候,一些原始的,过度的变量要及时释放掉mnM办公区 - 实用经验教程分享!

    如:mnM办公区 - 实用经验教程分享!

    如何解决 PHP Fatal error: Allowed memory ofmnM办公区 - 实用经验教程分享!

  • 4

    优化函数返回结果大小mnM办公区 - 实用经验教程分享!

    mnM办公区 - 实用经验教程分享!

    函数尽可能的只返回每次调用所需要的结果集mnM办公区 - 实用经验教程分享!

    比如:要得到的是:$datastructmnM办公区 - 实用经验教程分享!

    如何解决 PHP Fatal error: Allowed memory ofmnM办公区 - 实用经验教程分享!

  • 5

    优化mysql返回结果集的大小(效果显著)mnM办公区 - 实用经验教程分享!

    mnM办公区 - 实用经验教程分享!

    mnM办公区 - 实用经验教程分享!

    查询了一下表中数据的大小 (看图)mnM办公区 - 实用经验教程分享!

    mnM办公区 - 实用经验教程分享!

    大小:2.52MB.mnM办公区 - 实用经验教程分享!

    mnM办公区 - 实用经验教程分享!

    再看看结果集在PHP中占的内存:mnM办公区 - 实用经验教程分享!

    内存耗用:(76201912-1086264)/1024/1024 = 71.64MmnM办公区 - 实用经验教程分享!

    mnM办公区 - 实用经验教程分享!

    哇 PHP的数组太占内存了mnM办公区 - 实用经验教程分享!

    网上有人做过数组占用内存的测试,如下:mnM办公区 - 实用经验教程分享!

    如何解决 PHP Fatal error: Allowed memory ofmnM办公区 - 实用经验教程分享!

    如何解决 PHP Fatal error: Allowed memory ofmnM办公区 - 实用经验教程分享!

  • 6

    PHP中的数组是用一种HASH结构(HashTable)来实现的,mnM办公区 - 实用经验教程分享!

    关于PHP中的数组的实现,鸟哥有一篇文章介绍过:深入理解PHP之数组(遍历顺序)mnM办公区 - 实用经验教程分享!

    那么我们怎么优化那?mnM办公区 - 实用经验教程分享!

    1:缩小返回的结果集,一开始是查询出了所有字段,改成 只返回需要的字段mnM办公区 - 实用经验教程分享!

    2:在1的基础上,我们再使用mysql_unbuffered_query来查询数据mnM办公区 - 实用经验教程分享!

    如何解决 PHP Fatal error: Allowed memory ofmnM办公区 - 实用经验教程分享!

  • 7

    缓存里尽量只存需要的信息mnM办公区 - 实用经验教程分享!

    目前我们常用redis memcache做缓存,如果存全量信息,随着数据量的增加,全量信息会成倍数的增加,都很消耗机器内存mnM办公区 - 实用经验教程分享!

    如何解决 PHP Fatal error: Allowed memory ofmnM办公区 - 实用经验教程分享!

  • 8

    设计数据库的时候,把数据库字段设计的尽可能小(前提是满足需求)mnM办公区 - 实用经验教程分享!

    1:为了省空间 2:为了查询的时候mnM办公区 - 实用经验教程分享!

    如何解决 PHP Fatal error: Allowed memory ofmnM办公区 - 实用经验教程分享!

  • 9

    这样基本就搞定了。mnM办公区 - 实用经验教程分享!

    mnM办公区 - 实用经验教程分享!

    推荐以下鸟哥的三篇文章:(http://www.laruence.com/)mnM办公区 - 实用经验教程分享!

    深入理解PHP内存管理之谁动了我的内存mnM办公区 - 实用经验教程分享!

    深入理解PHP之数组(遍历顺序)mnM办公区 - 实用经验教程分享!

    PHP中的Hash算法mnM办公区 - 实用经验教程分享!

    如何解决 PHP Fatal error: Allowed memory ofmnM办公区 - 实用经验教程分享!

  • 以上方法由办公区教程网编辑摘抄自百度经验可供大家参考!mnM办公区 - 实用经验教程分享!


    标签: PHPMYSQL

    办公区 Copyright © 2016-2023 www.bgqu.net. Some Rights Reserved. 备案号:湘ICP备2020019561号