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

  • 相关阅读:
    linux eclipse cdt make error 127
    centos 安装网络错误
    c++ string 结束符‘00’
    北京市工资交税情况
    gprof参数说明及常见错误
    【转】Eclipse Plugin 在 Console上打印出message
    C++做client Java做客户端传送数据
    word统计章节字数
    【转】Profiling application LLC cache misses under Linux using Perf Events
    【转】eclipse插件开发,调试运行,导出与安装
  • 原文地址:https://www.cnblogs.com/mingaixin/p/4129110.html
Copyright © 2020-2023  润新知