php的amqp扩展set导致内存溢出
最近做的一个项目中需要用到rabbitmq,按照自己的之前的一篇文章http://www.cnblogs.com/mingaixin/archive/2012/10/28/2743807.html进行安装测试,都ok了,但是实际使用过程却发现很大的问题;
场景是这样的:
我建了10个队列,写了一个循环,目的是往每个队列中写入3万条数据,得到的结果是经过N多次的测试,程序在写到第四个队列的时候,就被杀死了;经过top命令,监控内存,发现程序在执行的过程中,cpu使用率达到70%以上,php进程占用内存可以达到2800M多,进而php进程消失,cpu 使用率恢复正常,为0.3%; 经过多轮测试及上网查资料,发现可能是php的这个扩展有问题,之前没发现问题,可能是没有持续大量的写入。于是,想升级一下amqp的扩展的版本,验证一下这个猜测;
由于rabbitmq-c 和 amqp的不同版本的兼容有问题,我这里用了rabbitmq-c-0.4.1,amqp-1.4.0,经过测试这两个版本可以配套使用;下面具体写一下安装步骤;
下载rabbitmq-c:
首先是rabbitmq-c-0.4.1.tar.gz包,可以访问https://github.com/alanxz/rabbitmq-c去下载最新的
wget https://github.com/alanxz/rabbitmq-c/releases/download/v0.4.1/rabbitmq-c-0.4.1.tar.gz
注意:有时候这个Wget显示连接不上,无法下载;我用了一个笨的方法,https://github.com/alanxz/rabbitmq-c/releases/tag/v0.4.1通过这个地址,先将压缩包利用浏览器下载到Windows中,再上传至linux下;如果还是下载不了,请留言,我给你们传安装包;
安装rabbitmq-c:
mkdir /usr/local/rabbitmq-c
chmod 777 /usr/local/rabbitmq-c
tar zxvf rabbitmq-c-0.4.1.tar.gz
cd rabbitmq-c-0.4.1
./configure --prefix=/usr/local/rabbitmq-c
最后显示一下内容表示正常
view source
rabbitmq-c build options:
Host: x86_64-unknown-linux-gnu
Version: 0.4.1
SSL/TLS: openssl
Tools: yes
Documentation: no
Examples: yes
然后进行make和安装了.
make && make install
如果没有报错,那就是安装成功了,
下载amqp,地址:http://pecl.php.net/package/amqp 下载最新版1.4.0
wget http://pecl.php.net/get/amqp-1.4.0.tgz
安装
tar -zxvf amqp-1.4.0.tgz
cd amqp-1.4.0
/usr/local/php/bin/phpize (这是我的phpize的路径,你的可以通过 find / -name phpize 查找)
./configure --with-php-config=/usr/local/php/bin/php-config --with-amqp --with-librabbitmq-dir=/usr/local/rabbitmq-c
make
make install
执行完成之后会生成一个amqp.so所在的路径
将amqp.so加入php.ini,然后重启php-fpm;
然后在用同样的用例进行测试,30万条数据顺利写入队列,cpu使用率也恢复正常。说明果真是扩展的问题,纠结了几天的问题终于解决。
php的amqp扩展set导致内存溢出的更多相关文章
- POI读写大数据量excel,解决超过几万行而导致内存溢出的问题
1. Excel2003与Excel2007 两个版本的最大行数和列数不同,2003版最大行数是65536行,最大列数是256列,2007版及以后的版本最大行数是1048576行,最大列数是16384 ...
- WPF循环加载图片导致内存溢出的解决办法
程序场景:一系列的图片,从第一张到最后一张依次加载图片,形成“动画”. 生成BitmapImage的方法有多种: 1. var source=new BitmapImage(new Uri(" ...
- 图片--Android加载图片导致内存溢出(Out of Memory异常)
Android在加载大背景图或者大量图片时,经常导致内存溢出(Out of Memory Error),本文根据我处理这些问题的经历及其它开发者的经验,整理解决方案如下(部分代码及文字出处无法考证) ...
- 添加IFrame导致内存溢出的解决过程(IE浏览器,目前发现了原因,还未解决)
1. 现象 每次动态添加iframe时,iexplore.exe进程占据的内存都会增加(大概10M左右),不会自动释放,最终导致内存溢出 2. 解决过程 经过网络的一番搜索,基本上给出的解决方案是 ...
- php查询mysql返回大量数据结果集导致内存溢出的解决方法
web开发中如果遇到php查询mysql返回大量数据导致内存溢出.或者内存不够用的情况那就需要看下MySQL C API的关联,那么究竟是什么导致php查询mysql返回大量数据时内存不够用情况? 答 ...
- Android加载图片导致内存溢出(Out of Memory异常)
Android在加载大背景图或者大量图片时,经常导致内存溢出(Out of Memory Error),本文根据我处理这些问题的经历及其它开发者的经验,整理解决方案如下(部分代码及文字出处无法考证) ...
- String的replace导致内存溢出
从一次内存溢出来看JDK的String应该怎么用 背景 JDK在String类中给我们提供的API,replace是个使用频率很高的的方法.因为他可以对字符串内容进行替换,只需要输入替换字符串和被替换 ...
- Restful规则及JPA导致内存溢出
HTTP动词 对于资源的具体操作类型,由HTTP动词表示. 常用的HTTP动词有下面五个(括号里是对应的SQL命令). GET(SELECT):从服务器取出资源(一项或多项). POST(CREATE ...
- go-处理字符串导致内存溢出
今日用go来做字符的“+”连接操作,每次连接的字符串大致有10M左右,循环连接100次,直接导致go内存溢出了. // Text project main.go package main import ...
随机推荐
- 组合数学 - 母函数的变形 --- hdu 1171:Big Event in HDU
Big Event in HDU Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- win8.1注册表-修改资源管理器的默认路径regedit
默认情况下,激活Win8的资源管理器都是直接打开库,对于习惯了以前版本的Windows用户来说,还要重新选择“计算机”才能进入相应的磁盘寻找文件,操作起来很是不便.为此,可以进行设置,让资源管理器默认 ...
- vs2015 Android SDK
It was not possible to complete an automatic installation. This might be due to a problem with your ...
- Linq查询操作之投影操作
投影操作,乍一看不知道在说啥.那么什么是投影操作呢?其实就是Select操作,名字起的怪怪的.和Linq查询表达式中的select操作是一样的.它能够选择数据源中的元素,并指定元素的表现形式.投影操作 ...
- 设计模式--原型(Prototype)模式
写这些也许有人认为“为了模式而模式”.Insus.NET所想到的,每个大师成为大师之前,也许都得这样做. 走路,从小就开始学,直至现在,谁还不是为了走路而走路?一直重复着...... 很多人没有分享自 ...
- DataGridView隐藏列用CSS实现
隐藏DataGridView某一列,用CSS控制 CSS Code: .hidden{ display:none;} c# Code: <asp:BoundField DataField=&qu ...
- jquery实现网页选项卡
这个功能在现在的网站中使用较为普遍,就是以选项卡的形式来对一些内容做了分类.,比如下面的天猫商城. 下面的源码是仿照天猫写的一个选项卡,实现起来的效果如下. 主要是利用我们在点击相应板块是触发它的单击 ...
- VS "15" 预览 5 中 VB 15 新增的功能
VS "15" 预览 5 给 VB 带来了更新.这次的更新内容有3个: * 值元组 ValueTuple这个功能能把一组计算结果成组返回.为了使用这个功能,我们要安装 System ...
- spring中的DisposableBean和InitializingBean,ApplicationContextAware的用法
在spring容器初始化bean和销毁bean的以前的操作有很多种, 目前我知道的有:在xml中定义的时候用init-method和destory-method,还有一种就是定义bean的时候实现Di ...
- mongodb学习2---常用命令解析
1,mongodb insert()和save()的相同点和区别区别:若新增的数据中存在主键 ,insert() 会提示错误,而save() 则更改原来的内容为新内容.insert({_id : 1, ...