记一次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被占用了,但是没有数据,说明事务中的第一步和第二步已经被执行入了,但是因为某一步(最后发现是第三步)失败导致回滚,这才意识到在事务中请求第三方接口会导致这个问题。
修改:
将事务中的第三步放在事务外面执行。
总结:事务中最好只放直接表插入或者修改的操作。
记一次php脚本memory exhausted的更多相关文章
- php编译 :virtual memory exhausted: Cannot allocate memory
有时候用vps建站时需要通过编译的方式来安装主机控制面板.对于大内存的VPS来说一般问题不大,但是对于小内存,比如512MB内存的VPS来说,很有可能会出现问题,因为编译过程是一个内存消耗较大的动作. ...
- 编译时:virtual memory exhausted: Cannot allocate memory
一.问题 当安装虚拟机时系统时没有设置swap大小或设置内存太小,编译程序会出现virtual memory exhausted: Cannot allocate memory的问题,可以用swap扩 ...
- 阿里云 virtual memory exhausted: 无法分配内存
在阿里云买了个云服务器,内存1G.编译php时出现下面的错误: virtual memory exhausted: Cannot allocate memory 问题原因:由于物理内存本身很小,且阿里 ...
- 编译时:virtual memory exhausted: Cannot allocate memory,常见于VPS
原文链接:http://blog.csdn.net/taiyang1987912/article/details/41695895 一.问题 当安装虚拟机时系统时没有设置swap大小或设置内存太小,编 ...
- 编译安装php时遇到virtual memory exhausted: Cannot allocate memory
有时候用vps建站时需要通过编译的方式来安装主机控制面板.对于大内存的VPS来说一般问题不大,但是对于小内存,比如512MB内存的godaddy VPS来说,很有可能会出现问题,因为编译过程是一个内存 ...
- virtual memory exhausted: Cannot allocate memory 解决方法
在阿里云买了个云服务器,内存1G.编译kudu时出现下面的错误: virtual memory exhausted: Cannot allocate memory 问题原因:由于物理内存本身很小,且阿 ...
- 编译时:virtual memory exhausted: Cannot allocate memory(转)
一.问题 当安装虚拟机时系统时没有设置swap大小或设置内存太小,编译程序会出现virtual memory exhausted: Cannot allocate memory的问题,可以用swap扩 ...
- 阿里云ECS云服务器编译安装PHP遇到virtual memory exhausted: Cannot allocate memory
阿里云编译安装php时遇到virtual memory exhausted: Cannot allocate memory 买了个服务器, 1G 的内存阿里云服务器,编译东西按说应该够了,安装相关的内 ...
- 树莓派编译程序时报错:virtual memory exhausted: Cannot allocate memory
一.原因分析: 树莓派内存太小,编译程序会出现virtual memory exhausted: Cannot allocate memory的问题,可以用swap扩展内存的方法. 二.解决方法: 安 ...
随机推荐
- redis编译问题
在编译redis时,出现以下问题 In file included from adlist.c:34:0: zmalloc.h:50:31: fatal error: jemalloc/jemallo ...
- Java问题解决:The project cannot be built until build path errors are resolved
参考:http://blog.csdn.net/marty_zhu/article/details/2566299 1,看看project -- Build Automatically有没有勾上?如果 ...
- layui框架
layui框架 Fly社区/分享一个layui风格的grid.greegrid
- P2292 [HNOI2004]L语言
传送门 思路: 毒瘤的字典树! ▲主要分有两个步骤: ① 日常的建树. ② 暴力地求解. ▲日常建树:过于基础,跳过. ▲重点在于如何暴力地求解而不被卡掉(DP?不存在的) 可以利用区间动规的思想, ...
- Hibernate注意项
Hibernate实体规则 1.持久化类提供无参数构造 2.成员变量私有,提供getset访问,提供实行 3.持久化类属性,尽量使用包装类型 4.持久化类需要提供oid与数据库中的主键列对应 5.不要 ...
- SQL SERVER 查看sql语句性能与执行时间
[方法一] set statistics profile on set statistics io on set statistics time on go --sql语句 go set statis ...
- 『计算机视觉』Mask-RCNN_训练网络其二:train网络结构&损失函数
Github地址:Mask_RCNN 『计算机视觉』Mask-RCNN_论文学习 『计算机视觉』Mask-RCNN_项目文档翻译 『计算机视觉』Mask-RCNN_推断网络其一:总览 『计算机视觉』M ...
- 漏洞复现——Apache HTTPD多后缀解析漏洞
漏洞原理:Apache Httpd支持一个文件拥有多个后缀,不同的后缀执行不同的命令,也就是说当我们上传的文件中只要后缀名含有php,该文件就可以被解析成php文件,利用Apache Httpd这个特 ...
- hbuider配置初始
{ "forEach": { "prefix": "fec", "body": [ ".forEach(fun ...
- Fedora 23+CUDA 8.0+ GTX970 安装
https://www.if-not-true-then-false.com/2015/fedora-nvidia-guide/ PRE-INSTALLATION ACTIONS Some actio ...