[原]zeromq框架测试报告
一、环境:
服务器: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框架测试报告的更多相关文章
- J.U.C体系进阶(三)- juc-atomic 原子类框架
Java - J.U.C体系进阶 作者:Kerwin 邮箱:806857264@qq.com 说到做到,就是我的忍道! juc-atomic 原子类框架 AtomicInteger AtomicInt ...
- [原]ZolltyMVC框架简介
ZolltyMVC框架是一款轻量级的Java应用编程框架(Java Application Framework),融合了常用的IOC/DI.MVC(注解.XML配置式.RESTful风格.模型驱动.视 ...
- HttpRunnerManager接口自动化测试框架测试报告页面优化
在测试报告生成结果页面,点击左上角的图标不能快速返回到首页.在大神的指点下,要改一个跳转链接,如下图: 修改路径如下: 修改的字段:把<a href="#!" class=& ...
- python - 自动化测试框架 - 测试报告
testSuitr.py: # -*- coding:utf-8 -*- '''@project: Voctest@author: Jimmy@file: testSuite.py@ide: PyCh ...
- Java原子类--框架
根据修改的数据类型,可以将JUC包中的原子操作类可以分为4类. 1. 基本类型: AtomicInteger, AtomicLong, AtomicBoolean ;2. 数组类型: AtomicIn ...
- 从零开始编写自己的C#框架(26)——小结
一直想写个总结,不过实在太忙了,所以一直拖啊拖啊,拖到现在,不过也好,有了这段时间的沉淀,发现自己又有了小小的进步.哈哈...... 原想框架开发的相关开发步骤.文档.代码.功能.部署等都简单的讲过了 ...
- RabbitMQ、ActiveMQ和ZeroMQ
消息中间件的技术选型心得-RabbitMQ.ActiveMQ和ZeroMQ 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs RabbitMQ.Active ...
- 消息中间件的技术选型心得-RabbitMQ、ActiveMQ和ZeroMQ
消息中间件的技术选型心得-RabbitMQ.ActiveMQ和ZeroMQ 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs RabbitMQ.Active ...
- 更快、更强——解析Hadoop新一代MapReduce框架Yarn(CSDN)
摘要:本文介绍了Hadoop 自0.23.0版本后新的MapReduce框架(Yarn)原理.优势.运作机制和配置方法等:着重介绍新的Yarn框架相对于原框架的差异及改进. 编者按:对于业界的大数据存 ...
随机推荐
- zabbix监控windows
windows 版zabbix_agent下载地址: https://www.zabbix.com/download_agents 解压,有bin和conf两个文件夹 配置: 在windows被监控 ...
- php上传文件后无法移动到指定目录的解决
从浏览器访问而触发PHP脚本运行的用户是 apache 用户 无法移动文件的原因主要是目标目录没有写入权限 1.将目标目录权限设置为 777 #chmod 777 tar_dir 2.将目标目录用户和 ...
- UVA 10900 So you want to be a 2n-aire? (概率dp)
题意:玩家初始的金额为1:给出n,表示有n道题目:t表示说答对一道题目的概率在t到1之间均匀分布. 每次面对一道题,可以选择结束游戏,获得当前奖金:或者回答下一道问题,答对的话奖金翻倍,答错的话结束游 ...
- 死循环的/etc/profile
用户服务器登陆后停在以下界面 Connecting to ... Connection established. To escape to local shell, press 'Ctrl+Alt+] ...
- Python中有趣的数据结构
链表 链表的基本操作 >>> a = [66.25,333,333,1,1234.5] >>> print a.count(333),a.count(66.25), ...
- Memcached replace 命令
Memcached replace 命令用于替换已存在的 key(键) 的 value(数据值). 如果 key 不存在,则替换失败,并且您将获得响应 NOT_STORED. 语法: replace ...
- 阻止a标签跳转四种方法 兼容各大浏览器(包括IE)
阻止a标签跳转四种方法 兼容各大浏览器(包括IE) HTML <!--第一种--> <a href="javascript:;">我不会被跳转</a& ...
- Object有哪些方法?
有9个方法 1 clone 2 toString() 3 getClass 4 finalize 5 equals 6 hascode 7 notify 8 notifall 9 wait
- 用纯css写一个常见的小三角形
.test{ margin:50px auto; width: 0; height: 0; overflow: hidden; border-width: 10px; border-color: #0 ...
- SPOJ - VLATTICE
链接 题意:三维平面,找从(0,0,0)看(n,n,n)能看到的点 题解:很明显就是求gcd(i,j,k)==1的(i,j,k)对数,改一下公式即可,记得要算平行坐标轴的三个平面,还有含0的三个坐标 ...