开源IM项目OpenIM单聊及万人群压测报告
单聊压测结论:
华为云主机s3一台:8核16G内存,网络带宽10Mb,普通磁盘(非SSD)
同时在线及压测客户端数量:1万
每秒钟发送消息量:2300条;
从发送到对方接收平均消息延时:5秒
群聊压测结论:
华为云主机s3一台:8核16G内存,网络带宽10Mb,普通磁盘(非SSD)
群规模:1万人
同时在线人数:1千人
每秒发送消息量:500条;
从发送到对方接收平均消息延时:6秒
注:(1)客户端和服务端在同一台机器,不消化网络带宽;(2)未使用nginx反向代理
服务器资源
华为云主机s3一台:8核16G内存,网络带宽10Mb,普通磁盘(非SSD)

OpenIM配置信息
(一)服务端配置调整 config/config.yaml 以8核16G为例
(1)openImMessagePort: [ 10130, 10131, 10132, 10133, 10134,10135 ]
(2)openImPushPort: [ 10170, 10171, 10172, 10173 ]
(3)remainLogLevel: 3
(4)chatpersistencemysql: false
(5) dbMaxOpenConns: 100
dbMaxIdleConns: 10
dbMaxLifeTime: 5
(二)调整path_info.cfg中msg_transfer_service_num=4
(三)kafka分区调整
(1)设置ws2ms_chat为8个分区 msg_transfer_service_num的2倍
(2)设置msg_to_mongo为8个分区 msg_transfer_service_num的2倍
(3)设置ms2ps_chat为8个分区 openImMessagePort的2倍
(四)mysql服务端设置最大连接数为2000
(五)etcd kafka redis mongo都是单机部署
启动单聊压测
(1)启动1万个压测客户端,发送1000万消息,出现[send msg begin ] 表示初始化连接及登录完毕,开始发送消息
./press_open_im -sn 10000 -mn 1000 -t 4000
(2)查看连接数约2万个连接,由于压测客户端在本机,所有连接数乘2
(3)查看消息收发量,每秒2377条消息压测
tail -f OpenIM.log.all.2022-09-02 |grep "msg_gateway sendMsgCount"
(4)启动消息延时检测程序,在此压力下,消息从发送方发出到接收方成功接收大概需要5秒
./msg_delay_open_im -sn 2 -mn 100 -t 100
单聊压测结论
华为云主机s3一台:8核16G内存,网络带宽10Mb,普通磁盘(非SSD),在每秒收发2377条单聊消息时,消息平均延时在5秒左右。
cpu 100%, 内存80% (压测程序占用了15%内存),消息入库会导致redis/mongodb内存增加



启动万人群聊压测
(1)创建一个万人群组
./create_work_group_open_im -gmn 10000
创建完毕,groupID为3282359177
(2)模拟群3282359177中1000个成员登录并往群里发送消息,每秒发送500条消息。出现[send msg begin ] 表示初始化连接及登录完毕,开始发送消息
./press_open_im -gid 3282359177 -sn 1000 -mn 1000 -t 2000
(3)查看消息收发量,每秒500条消息
tail -f OpenIM.log.all.2022-09-02 |grep "msg_gateway sendMsgCount"
(4)启动消息延时检测程序,在此压力下,消息从发送方发出到接收方成功接收大概需要6秒
./msg_delay_open_im -gid 3282359177 -mn 100 -t 100
万人大群压测结论
华为云主机s3一台:8核16G内存,网络带宽10Mb,普通磁盘(非SSD),群成员1万人,同时在线 1千人,每秒往群内发送500条消息,,消息平均延时在6秒左右。
cpu 45%, 内存70% (压测程序占用了15%内存),消息入库会导致redis/mongodb内存增加
关于OpenIM
OpenIM是由IM技术专家打造开源即时通讯组件,也是目前最受欢迎的开源IM项目之一,开发者通过集成OpenIM组件,并私有化部署服务端,可以将即时通讯、实时通讯能力快速集成到自身应用中,并确保业务数据的安全性和私密性。github社区活跃,star近万,排名遥遥领先,开发者万人,OpenM力争开源IM项目No1,打造开源IM第一社区。
开源IM OpenIM最近更新如下,请各位知悉:1、pc端允许开多个实例,即一台电脑可以同时登陆多个不同的账号;2、app发现页后台动态配置url;3、pc在多台电脑上同时登录同一个账号不互踢, 手机端统一平台互踢;4、后台给全员发送广播消息,触达所有用户;5、网络重连提示、消息同步开始和结束提示;6、后台客户IP显示查询功能,可拉黑指定IP ,可查询相同ip账户注册量 ;拉黑ip不能注册,也不能登录系统;7、后台可设置注册成功自动添加指定好友;8、指定账号可设置指定多个IP才能登录;9、未读数多端同步,卸载重装未读数同步,解决多端在线时未读数实时同步问题,解决多端离线再登录后未读数同步同步
github地址:https://github.com/OpenIMSDK/Open-IM-Server
开发者中心:https://doc.rentsoft.cn/#/

单聊压测程序
仓库地址
https://github.com/OpenIMSDK/Open-IM-SDK-Core/tree/v2.3.0release/single_test
代码说明
press_open_im.go 压测消息发送,但发送者不校验是否完成接收到
msg_delay_open_im.go 检测消息发送和接收,在大压力情况下,消息的可靠性和时延测试
使用说明
(1)修改../test/config.go TESTIP和SECRET
(2)go build press_open_im.go
./press_open_im -sn 10000 -mn 1000 -t 100
参数sn 10000表示:启动10000个压测客户端;
参数mn 1000表示:每个客户端发送消息数量为1000条;
参数t 100表示:每次发送一条消息后,休眠100毫秒;如果是1万客户端,算起来大概是每秒钟发送10万条消息;
(3)go build msg_delay_open_im.go
./msg_delay_open_im -sn 2 -mn 1000 -t 100
参数sn 2 表示:启动2个客户端消息收发检测;
参数mn 1000表示:每个客户端发送1000条消息;
参数t 100表示:每次发送一条消息,休眠100毫秒;
群聊压测程序
仓库地址
https://github.com/OpenIMSDK/Open-IM-SDK-Core/tree/v2.3.0release/work_group_test
代码说明
create_work_group_open_im.go 创建测试群
press_open_im.go 压测消息发送,但发送者不校验是否完成接收到
msg_delay_open_im.go 检测消息发送和接收,在大压力情况下,消息的可靠性和时延测试
使用说明
(1)修改../test/config.go TESTIP和SECRET
(2)go build create_work_group_open_im.go
./create_work_group_open_im -gmn 10
参数gmn表示:创建群成员为10的测试群,实际会创建13个成员。
(3)go build press_open_im.go
./press_open_im -gid 1510503557 -sn 10 -mn 1000 -t 100
参数gid 1510503557 表示:压测群聊groupID
参数sn 10表示:压测客户端数量,要小于等于群成员数
参数mn 1000表示:每个客户端发送消息数量为1000条;
参数t 100表示:每次发送一条消息,休眠100毫秒;
(4)go build msg_delay_open_im.go
./msg_delay_open_im -gid 1510503557 -mn 100 -t 100
参数gid 1510503557 表示:压测群聊groupID
参数mn 100表示:每个客户端发送消息数量为100条;
参数t 100表示每次发送一条消息,休眠100毫秒;
开源IM项目OpenIM单聊及万人群压测报告的更多相关文章
- 新一代大数据任务调度 - Apache DolphinScheduler喜提十大开源新锐项目 & 最具人气项目
经 10000+ 开发者公开票选,20+专家评审. 10+ 主编团打分,历经数月打磨,11 月 19 日,由InfoQ 发起并组织的[2020中国技术力量年度榜单评选]结果正式揭晓. 2020 年度十 ...
- 【喜讯】Apache DolphinScheduler 荣获 “2020 年度十大开源新锐项目”
经 10000+ 开发者公开票选,20+专家评审. 10+ 主编团打分,历经数月打磨,11 月 19 日,由InfoQ 发起并组织的[2020中国技术力量年度榜单评选]结果正式揭晓. 2020 年度十 ...
- 28款GitHub最流行的开源机器学习项目,推荐GitHub上10 个开源深度学习框架
20 个顶尖的 Python 机器学习开源项目 机器学习 2015-06-08 22:44:30 发布 您的评价: 0.0 收藏 1收藏 我们在Github上的贡献者和提交者之中检查了用Python语 ...
- 把盏言欢,款款而谈,ChatGPT结合钉钉机器人(outgoing回调)打造人工智能群聊/单聊场景,基于Python3.10
就像黑火药时代里突然诞生的核弹一样,OpenAI的ChatGPT语言模型的横空出世,是人工智能技术发展史上的一个重要里程碑.这是一款无与伦比.超凡绝伦的模型,能够进行自然语言推理和对话,并且具有出色的 ...
- SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)
SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...
- 开源 iOS 项目分类索引大全 - 待整理
开源 iOS 项目分类索引大全 GitHub 上大概600个开源 iOS 项目的分类和介绍,对于你挑选和使用开源项目应该有帮助 系统基础库 Category/Util sstoolkit 一套Cate ...
- 开源 iOS 项目分类索引大全
GitHub 上大概600个开源 iOS 项目的分类和介绍,对于你挑选和使用开源项目应该有帮助 系统基础库 Category/Util sstoolkit 一套Category类型的库,附带很多自定义 ...
- flask 第五章 WebSocket GeventWebsocket 单聊群聊 握手 解密 加密
1.WebSocket 首先我们来回顾一下,我们之前用socket学习过的项目有: 1.django 2.flask 3.FTP - 文件服务 HTTP - TCP (特点): 1.一次请求,一次响应 ...
- 我发起了一个 .Net 开源 数据库 项目 SqlNet
大家好 , 我发起了一个 .Net 开源 数据库 项目 SqlNet . 项目计划 是 用 C# 写一个 关系数据库 . 可以先参考我之前写的 2 篇文章 : 谈谈数据库原理 https://w ...
- 如何用WebSocket实现一个简单的聊天室以及单聊功能
百度百科中这样定义WebSocket:WebSocket协议是基于TCP的一种新的网络协议.它实现了浏览器与服务器全双工(full-duplex)通信——允许服务器主动发送信息给客户端.简单的说,We ...
随机推荐
- 火山引擎DataTester:跨境电商网站,如何快速实施AB测试 ?
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 如今中企出海的形态愈加多样,很多企业都建有独立站可直接触达海外客户,但获取优质流量的成本会更加高昂.当优质流量 ...
- HanLP — 路径规划算法 - 求解最短路径 - 维特比(Viterbi)算法
维特比算法:从众多路径中,挑出最优的那条,他和隐马尔可夫没有强关联 中文分词任务 语料库 => 训练集 初始.转移.发射矩阵 => 训练过程 维特比算法,得到真正结果 训练的时候,是用不到 ...
- Chrome 护眼模式 - 黑暗模式 - 夜眼(Night Eye) 插件
Chrome 地址栏里输入: chrome://extensions/ 打开插件商城:
- Axure App 垂直滚动
拖两个动态面版 最外层[动态面板]用来定义显示区域,高度:692 (根据实际来) 里面的[动态面板],用来放内容,高度根据实际情况来,示例中是:1920 如下图所示 里面的[动态面板]添加垂直滚动 外 ...
- Qt 的Cmake方式如何创建资源文件和添加类
CLion(误,QT Creator) 添加资源文件时 选择Qt 然后选择Qt Resource File 单击choose,然后给你的资源文件输入一个名字比如res单击下一步,然后完成,保存 这时候 ...
- Codeforce:1300B. Assigning to Classes (math)
解题思路 题目说的意思是,给一个2n个数的数组,注意n为奇数,将这个数组平均分为2份,假设为c1和c2. c1和c2是奇数个元素的数组,比如数组[1,2,3],那么中位数就是2. 那么如何求得中位数差 ...
- C#使用正则表达式检查字符串中重复出现的词
private void button1_Click(object sender, EventArgs e) { MatchCollection matches =//使用正则表达式查找重复出现单词的 ...
- Windows 平台 UTF-8 编码转换为本机编码
std::string from_utf8(const std::string& src) { int n = MultiByteToWideChar(CP_UTF8, 0, src.c_st ...
- Skywalking 搭建 nacos 注册中心及mysql 存储的集群架构
本文为博主原创,未经允许不得转载 Skywalking 集群是将skywalking oap作为一个服务注册到nacos上,只要skywalking oap服务没有全部宕机,保证有一个skywalki ...
- Docker-01基本命令
1.Docker安装 系统镜像为Centos7.x yum包更新到最新 sudo yum update 安装需要的软件包,yum-util提供yum-config-manager功能.另外两个是dev ...