zoukankan      html  css  js  c++  java
  • 记一次php脚本memory exhausted

    表象报错如下:
    Error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 16651985 bytes)
    出这个问题 意味着PHP脚本使用了过多的内存,并超出了系统对其设置的允许最大内存。

    解决方法一般是php.ini中的memory_limit中的参数设置的太小,修改为合适大小后重启php-fpm,或者在脚本中申明ini_set('memory_limit’,’512M');就可以解决。

    奇葩的是这次碰到这个问题是因为一个事务导致,伪逻辑如下
    beginTransaction
    1.create card record;(直接DB操作)
    2.create order record;(直接DB操作)
    3.send order detail to another system (http request)
    成功
    commit
    失败
    roolbak

    分析问题:
    1.修改memory_limit的配置,发现依旧报这个错误
    2.脚本中添加ini_set('memory_limit’,’512M');发现依旧报这个错误
    3.最后发现表中自增id被占用了,但是没有数据,说明事务中的第一步和第二步已经被执行入了,但是因为某一步(最后发现是第三步)失败导致回滚,这才意识到在事务中请求第三方接口会导致这个问题。

    修改:
    将事务中的第三步放在事务外面执行。

    总结:事务中最好只放直接表插入或者修改的操作。

  • 相关阅读:
    Python-内存管理
    Python如何操作Excel
    336. 文本压缩
    Python-锁
    MVC接收以post形式传输的各种参数
    linux批量替换指定文件夹中所有文件的指定内容
    ES6:string.raw浅析
    node学习笔记
    运行node提示:events.js:160 throw er; // Unhandled 'error' event
    socket.io入门示例参考
  • 原文地址:https://www.cnblogs.com/ryanlamp/p/10060796.html
Copyright © 2011-2022 走看看