写点什么

开源 IM 项目 OpenIM 单聊及万人群压测报告

作者:Geek_1ef48b
  • 2022 年 9 月 02 日
    云南
  • 本文字数:2589 字

    阅读完需:约 8 分钟

单聊压测结论:


华为云主机 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 毫秒;

用户头像

Geek_1ef48b

关注

还未添加个人签名 2021.08.25 加入

还未添加个人简介

评论

发布
暂无评论
开源IM项目OpenIM单聊及万人群压测报告_Geek_1ef48b_InfoQ写作社区