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使用率也恢复正常。说明果真是扩展的问题,纠结了几天的问题终于解决。