一、环境:

服务器:linux 4核 16G 虚拟机 1台

客户端:linux 4核 16G 2000台(模拟)

数据包大小:1036字节

二、参数设置:

ulimit -n 65536

服务端处理线程2,端口4440

客户端数据包大小:约1k

三、应答模式测试

3.1 测试

模拟2000客户端并发访问,每个客户端与服务端交互10次总共花费的时间,单位是毫秒

3.2 结果

平均:24149.5ms

每条线程平均耗时:12.07475ms

单个任务平均:1.207475ms

客户端数量[个]

单个客户端的QPS[每秒钟应答客户端能力]

10

2458次

50

1578次

100

1133次

1000

160次

服务端的分4次统计内存与CPU使用情况

第一次:物理内存:220m,CPU:90%~120%

第二次:物理内存:282m,CPU:90%~120%

第三次:物理内存:284m,CPU:90%~120%

第四次:物理内存:273m,CPU:90%~120%

四、推送模式测试

4.1 测试

服务端由2条线程处理2000订阅

针对服务端的每一个订阅启动10个客户端,一共是20000个客户端

模拟出20000个订阅的场景

4.2 结果

客户端数量[个]

单个客户端的平均推送延迟

2W

14ms

1W

5ms

物理内存

CPU

2W客户端推送中

5.2G

210%~250%

断掉全部客户端

3.4G

198%~210%

注:在重新打开2W客户端后,内存会瞬间降到2.6G左右,然后稳步提高,大约5分钟左右服务端稳定在5.2G左右,根据PUB/SUB原理来分析,这个时候应该是输出队列占用的物理内存,另外新版本的PUB/SUB模式,在SUB处理慢的情况下,会阻塞在SUB端,这样对PUB不造成影响。

五、问题

1)【已解决】2000个线程时,socket创建异常:通过zmq_ctx_set增加ctx的socket上线

2)【已解决】并发效率不稳定:通过zmq_setsockopt,结合服务器的内存和CPU,适当调整ZMQ_BACKLOG、ZMQ_SNDHWM    ZMQ_RCVHWM参数,本次测试均为1000

3)【已解决】随着并发数提高,频繁请求服务器造成的客户端不稳定:并发访问在2W个连接,由于单机端口数量限制造成连续请求的socket不足,会造成模拟客户端为了等待系统分配socket端口造成的假死现象,通过netstat查证与服务器无关

4)【临时替代方案解决】使用zmq_recvmsg的API时会产生严重的内存泄露,目前采用zmq_recv代替方案。注:这两个API一个是针对zmq_msg结构体的传输,一个是针对buffer的传输,原本以为用zmq_msg会好一些,结果压测时造成大量内存的泄露,这个api内存泄露问题据说在3.1.X中修复过,目前我用的3.2.4版本居然仍然存在。

[原]zeromq框架测试报告的更多相关文章

  1. J.U.C体系进阶(三)- juc-atomic 原子类框架

    Java - J.U.C体系进阶 作者:Kerwin 邮箱:806857264@qq.com 说到做到,就是我的忍道! juc-atomic 原子类框架 AtomicInteger AtomicInt ...

  2. [原]ZolltyMVC框架简介

    ZolltyMVC框架是一款轻量级的Java应用编程框架(Java Application Framework),融合了常用的IOC/DI.MVC(注解.XML配置式.RESTful风格.模型驱动.视 ...

  3. HttpRunnerManager接口自动化测试框架测试报告页面优化

    在测试报告生成结果页面,点击左上角的图标不能快速返回到首页.在大神的指点下,要改一个跳转链接,如下图: 修改路径如下: 修改的字段:把<a href="#!" class=& ...

  4. python - 自动化测试框架 - 测试报告

    testSuitr.py: # -*- coding:utf-8 -*- '''@project: Voctest@author: Jimmy@file: testSuite.py@ide: PyCh ...

  5. Java原子类--框架

    根据修改的数据类型,可以将JUC包中的原子操作类可以分为4类. 1. 基本类型: AtomicInteger, AtomicLong, AtomicBoolean ;2. 数组类型: AtomicIn ...

  6. 从零开始编写自己的C#框架(26)——小结

    一直想写个总结,不过实在太忙了,所以一直拖啊拖啊,拖到现在,不过也好,有了这段时间的沉淀,发现自己又有了小小的进步.哈哈...... 原想框架开发的相关开发步骤.文档.代码.功能.部署等都简单的讲过了 ...

  7. RabbitMQ、ActiveMQ和ZeroMQ

    消息中间件的技术选型心得-RabbitMQ.ActiveMQ和ZeroMQ 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs RabbitMQ.Active ...

  8. 消息中间件的技术选型心得-RabbitMQ、ActiveMQ和ZeroMQ

    消息中间件的技术选型心得-RabbitMQ.ActiveMQ和ZeroMQ 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs RabbitMQ.Active ...

  9. 更快、更强——解析Hadoop新一代MapReduce框架Yarn(CSDN)

    摘要:本文介绍了Hadoop 自0.23.0版本后新的MapReduce框架(Yarn)原理.优势.运作机制和配置方法等:着重介绍新的Yarn框架相对于原框架的差异及改进. 编者按:对于业界的大数据存 ...

随机推荐

  1. html 5中的新特性之强化表单元素及属性

    之前我们判断用户提交的是否是Email 的时候,往往使用js 进行判断,但在html5中可以有新的方式进行判断而且更简单 <!DOCTYPE html> <html lang=&qu ...

  2. 《网络攻防》Web安全基础实践

    20145224陈颢文 <网络攻防>Web安全基础实践 基础问题回答 SQL注入攻击原理,如何防御: 部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,黑客利用这个bug在数 ...

  3. Hungry Rabbit

    Problem C. Hungry Rabbit Input file: hungry.in Output file: hungry.out Time limit: 10 seconds Memory ...

  4. HDU 1241 油田

    这道题明明很简单但不知道为什么运行结果一直错,但提交却是对的!代码真是神奇,不过我猜测可能是提上给出的数据错了,可能提上给的数据m和n后多给了一个空格或回车,但题的数据没有 #include<s ...

  5. springboot--配置文件加载顺序

    -file:./config(内部配置) -file:./ (内部配置) -classpath:/config (外部配置) -classpath:/ (外部配置) 运维: spring -jar s ...

  6. JAVA基础补漏--多态

    Fu obj = new ZI(); 访问成员变量规则 编译看左,运行看左. obj.num; 1.直接通过对象名访问成员变量:看等号左右是谁,优先用谁,没有则往上找. obj.getnum(); 2 ...

  7. HTML中a标签的锚点

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. postgre数据库插入错误:prepared statement “S_1”already exist, 解决办法

    在使用kettle工具(数据迁移软件)在postgre数据库中插入记录时,出现如下错误,解决办法: 在/etc/pgsql/pgbouncer.ini中修改配置,设置 server_reset_que ...

  9. php 后台接受POST值

    [场景描述]:展示型企业站制作管理后台,前端框架:vue.js2.0,bootstrap,后台语言:php [问题描述]:使用管理后台向接口发送请求时,接口使用PHP的$_POST['args'],接 ...

  10. 新东方雅思词汇---7.4、cap

    新东方雅思词汇---7.4.cap 一.总结 一句话总结: 抓住 capable 英 ['keɪpəb(ə)l]  美 ['kepəbl]  adj. 能干的,能胜任的:有才华的 词组短语 capab ...