记一次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扩展内存的方法. 二.解决方法: 安 ...
随机推荐
- galera+mycat高可用集群部署
环境描述 10.30.162.29 client 环境描述 10.30.162.29 client 10.30.162.72 mysql1 10.30.162.73 mysql2 10.30.162 ...
- elbow 求拐点
distancePointLine <- function(x, y, slope, intercept) { ## x, y is the point to test. ## slope, ...
- [Hibernate] 通过 properties 类和 hql 语句进行动态查询
//需要保证Emp和EmpProperties中的setter和getter以及属性以及 参数占位符(:eName) 的一致//动态查询 @Test public void test4(){ EmpP ...
- html5(五)拖放
http://www.w3school.com.cn/html5/html_5_draganddrop.asp http://www.cnblogs.com/return-false/p/332628 ...
- python之模块定义、导入、优化详解
一.模块 1.模块的定义 模块是一组包含了一组功能的python文件,比如test.py,模块名为test,可以通过import test进行调用.模块可以分为以下四个通用类别 1 使用python编 ...
- UVa 10905 - Children's Game 排序,题目没有说输入是int 难度: 0
题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...
- Java覆盖
Java的覆盖: 源代码: package dijia;class Parent1{ void f() { System.out.println("迪迦奥特曼1"); } void ...
- 读取磁盘:LBA方式
LBA简介 磁盘读取发展 IO操作读取硬盘的三种方式: chs方式 :小于8G (8064MB) LBA28方式:小于137GB LBA48方式:小于144,000,000 GB LBA方式访问使用了 ...
- mvvm框架
了解mvvm框架吗 vue.js react.js angular.js 谈谈你对mvvm的认识 mvc View :用来把数据以某种方式呈现给用户 Model :其实就是数据 Controller ...
- 201671010142 java类与对象的定义及使用
通过这章学习,了解到面向对象程序设计.面向对象的程序设计是有对象组成的,每个对象对用户公开的特定功能部分和隐藏的实现部分.有类构造对象的过程称为创建类的实例.实现封装的关键在于绝对不能让类中的方法直接 ...