最近做的一个项目中需要用到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导致内存溢出的更多相关文章

  1. POI读写大数据量excel,解决超过几万行而导致内存溢出的问题

    1. Excel2003与Excel2007 两个版本的最大行数和列数不同,2003版最大行数是65536行,最大列数是256列,2007版及以后的版本最大行数是1048576行,最大列数是16384 ...

  2. WPF循环加载图片导致内存溢出的解决办法

    程序场景:一系列的图片,从第一张到最后一张依次加载图片,形成“动画”. 生成BitmapImage的方法有多种: 1. var source=new BitmapImage(new Uri(" ...

  3. 图片--Android加载图片导致内存溢出(Out of Memory异常)

    Android在加载大背景图或者大量图片时,经常导致内存溢出(Out of Memory  Error),本文根据我处理这些问题的经历及其它开发者的经验,整理解决方案如下(部分代码及文字出处无法考证) ...

  4. 添加IFrame导致内存溢出的解决过程(IE浏览器,目前发现了原因,还未解决)

    1.  现象 每次动态添加iframe时,iexplore.exe进程占据的内存都会增加(大概10M左右),不会自动释放,最终导致内存溢出 2.  解决过程 经过网络的一番搜索,基本上给出的解决方案是 ...

  5. php查询mysql返回大量数据结果集导致内存溢出的解决方法

    web开发中如果遇到php查询mysql返回大量数据导致内存溢出.或者内存不够用的情况那就需要看下MySQL C API的关联,那么究竟是什么导致php查询mysql返回大量数据时内存不够用情况? 答 ...

  6. Android加载图片导致内存溢出(Out of Memory异常)

    Android在加载大背景图或者大量图片时,经常导致内存溢出(Out of Memory  Error),本文根据我处理这些问题的经历及其它开发者的经验,整理解决方案如下(部分代码及文字出处无法考证) ...

  7. String的replace导致内存溢出

    从一次内存溢出来看JDK的String应该怎么用 背景 JDK在String类中给我们提供的API,replace是个使用频率很高的的方法.因为他可以对字符串内容进行替换,只需要输入替换字符串和被替换 ...

  8. Restful规则及JPA导致内存溢出

    HTTP动词 对于资源的具体操作类型,由HTTP动词表示. 常用的HTTP动词有下面五个(括号里是对应的SQL命令). GET(SELECT):从服务器取出资源(一项或多项). POST(CREATE ...

  9. go-处理字符串导致内存溢出

    今日用go来做字符的“+”连接操作,每次连接的字符串大致有10M左右,循环连接100次,直接导致go内存溢出了. // Text project main.go package main import ...

随机推荐

  1. How to Convert Subversion Repo to Git

    用了比较长时间的 SVN,但现在新的项目都采用Git.之前的项目又不得不维护,那么能不能将项目从SVN迁移到Git呢.答案是肯定的,网上的方案是 git-svn,或者更高级的封装 svn2git. 方 ...

  2. (一)Protobuf的Java使用

    学习使用Protobuf,创建java文件 windows : 步骤一:两个文件:proto.exe,  protobuf-Java-2.4.1.jar 步骤二:建立一个工程CreateProtoBu ...

  3. [CLR via C#]21. 自动内存管理(垃圾回收机制)

    目录 理解垃圾回收平台的基本工作原理 垃圾回收算法 垃圾回收与调试 使用终结操作来释放本地资源 对托管资源使用终结操作 是什么导致Finalize方法被调用 终结操作揭秘 Dispose模式:强制对象 ...

  4. sql: sq_helptext

    --查看表生成脚本 sql server     --- '\r'是回车,'\n'是换行  /t相当于键盘的Tab键    --- 操作系统的不同,换行符操也不同:/r Mac /n Unix/Lin ...

  5. SpreadJS 中应用 KnockoutJS 技术

    SpreadJS 支持 Knockout (KO)技术, KnockoutJS 是一个使用 MVVM 模式的 JavaScript 库,允许双向数据绑定,使数据和UI界面进行实时的交互更新.关于KO的 ...

  6. C# 发邮件

    using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...

  7. 发布ASP.NET Core程序到Linux生产环境

    原文翻译:Publish to a Linux Production Environment 作者:Sourabh Shirhatti 在这篇文章里我们将介绍如何在 Ubuntu 14.04 Serv ...

  8. 每一个成功的程序员的身后都有一个--------Parse

    相信好多同行都用过Parse,而正是因为Parse给我们的开发带来的极大的便利,才有了项目从零开始,到正式上线仅仅用上不到两周的时间,现在Swift还在迅速的发展,很快就会占有大量的市场,现在就就结合 ...

  9. CSS3中的box-shadow

    语法: box-shadow: h-shadow v-shadow blur spread color inset; box-shadow 向框添加一个或多个阴影.该属性是由逗号分隔的阴影列表,每个阴 ...

  10. 关于一个js连续赋值问题之我见(词略穷,见谅)

    前几天在搜索面试题时发现了这么一段代码,执行完后感觉完全不与所想的一样 var a = { n : 1 }; var b = a; a.x = a = {n : 2}; console.log(a.x ...