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

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

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

  • 相关阅读:
    「程序员」都是如何找到漂亮女朋友的?
    JAVA图片压缩到指定大小
    linux下nginx的(启动、重启、关闭)
    linux下启动rabbitmq,redis,nginx
    JAVA JAR包注册成服务,开机启动,WINSW使用
    linux下安装OpenJDK 1.8
    自定义滚动条
    面试题记录
    BOM
    SQL
  • 原文地址:https://www.cnblogs.com/ryanlamp/p/10060796.html
Copyright © 2020-2023  润新知