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被占用了,但是没有数据,说明事务中的第一步和第二步已经被执行入了,但是因为某一步(最后发现是第三步)失败导致回滚,这才意识到在事务中请求第三方接口会导致这个问题。

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

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

  • 相关阅读:
    SpringSecurity配置
    SpringBoot整合Mybatis
    springboot整合JDBC
    SpringBoot的WEB流程
    List&TreeSet实现斗地主发牌及牌序
    SpringBoot第一个程序
    项目错误总结2021.4.21
    Spring整合Mybatis
    学习——构建民航业知识图谱并实现语义查询的
    新闻文本分类——词云可视化
  • 原文地址:https://www.cnblogs.com/ryanlamp/p/10060796.html
Copyright © 2011-2022 走看看