靠谱:开源IM项目OpenIM压测程序介绍-自己动手测试性能和稳定性

简介: 靠谱:开源IM项目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


注意事项

(1)由于需要本地处理sqlite读写,检测程序建议设置2个客户端,发送消息休眠100毫秒;
(2)注意压测客户端和服务端的网络带宽;
(3)如果客户端和服务端同一台机器,注意压测程序cpu占用;


单聊压测程序

仓库地址 
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毫秒;


压测程序使用示例

./press_open_im -sn 100 -mn 100000 -t 100
出现[send msg begin ] 表示初始化完成,开始发送消息
此时再启动可靠性及消息时延测试:
./msg_delay_open_im -sn 2 -mn 1000 -t 100

服务端统计日志查看

tail -f OpenIM.log.all.2022-08-30  |grep "msg_gateway sendMsgCount"
system stat  msg_gateway 60 second recv to msg_gateway sendMsgCount 45267  
表示一分钟收到45267条

消息时延检测查看

minCostTime:  729 ms, maxCostTime:  6332 ms, average cost time:  3295 ms 发送2000条数据 从发送到对方收到,平均时延是3.2秒
CheckReliabilityResult ok, exit 表示发出去的所有消息,对方都能精确收到


群聊压测程序

仓库地址 
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毫秒;


压测程序使用示例

./create_work_group_open_im -gmn 10
出现[[CREATE GROUP  {"errCode":0,"errMsg":"","data":{"creatorUserID":"openIM123456","groupID":"3144245614","groupName":"Group Chat","groupType":2,"memberCount":13,"ownerUserID":"openIM123456"}} ] 表示创建群聊成功,记录groupID 3144245614
启动压测程序:
./press_open_im -gid 3144245614 -sn 10 -mn 1000 -t 100 
此时再启动可靠性及消息时延测试:
./msg_delay_open_im -gid 3144245614 -mn 100 -t 100

服务端统计日志查看

tail -f OpenIM.log.all.2022-08-30  |grep "msg_gateway sendMsgCount"
system stat  msg_gateway 60 second recv to msg_gateway sendMsgCount 45267  
表示一分钟收到45267条

消息时延检测查看

minCostTime:  594 ms, maxCostTime:  5181 ms, average cost time:  2930 ms  发送2000条数据 从发送群聊到对方收到,平均时延是3.2秒
CheckReliabilityResult ok, exit   表示发出去的所有群聊消息,对方都能精确收到。

关于OpenIM

OpenIM是由IM技术专家打造开源即时通讯组件,也是目前最受欢迎的开源IM项目之一,开发者通过集成OpenIM组件,并私有化部署服务端,可以将即时通讯、实时通讯能力快速集成到自身应用中,并确保业务数据的安全性和私密性。github社区活跃,star近万,排名遥遥领先,开发者万人,OpenM力争开源IM项目No1,打造开源IM第一社区。支持Android、iOS原生开发,支持Flutter、uni-app跨端开发,支持小程序、React等所有主流web前端技术框架, PC支持Electron。重点应用在政务办公,社交,web3场景,一切皆可控,让OpenIM深入到各行业。从开源的内在含义来看,需要这五个维度:透明度;协作;持续发布;精英制度;社区运营,OpenIM在这五方面还需要持续努力,稳固生态建设,巩固OpenIM影响力。


作为开源IM领跑者,OpenIM开源有几个目的:(1)IM核心数据应该掌控在运营者手中(2)IM需求广泛,有很多人免费使用,并能发现问题(3)让更多开发者参与项目项目,特别是IM需求繁多。 在开源社区里面,每个项目都可以开启pr,pr功能将允许每一位开发者对代码进行修改,但是需要项目拥有者的合并代码。集体的力量是最大的,充分体现开源的价值。

github地址:https://github.com/OpenIMSDK/Open-IM-Server

开发者中心:https://doc.rentsoft.cn/#

目录
相关文章
|
9月前
|
测试技术 Go
客服系统程序入口文件解析-唯一客服系统源码开发
该代码为 Go 语言编写的客服系统命令行程序入口,结构清晰,使用 cmd 包启动业务逻辑,可能基于 cobra 框架实现,具备良好可扩展性与可维护性,适用于服务启动与管理。
316 69
|
7月前
|
测试技术 UED 开发者
性能测试报告-用于项目的性能验证、性能调优、发现性能缺陷等应用场景
性能测试报告用于评估系统性能、稳定性和安全性,涵盖测试环境、方法、指标分析及缺陷优化建议,是保障软件质量与用户体验的关键文档。
|
运维 Prometheus 监控
如何在测试环境中保持操作系统、浏览器版本和服务器配置的稳定性和一致性?
如何在测试环境中保持操作系统、浏览器版本和服务器配置的稳定性和一致性?
|
机器学习/深度学习 人工智能 监控
提升软件质量的关键路径:高效测试策略与实践在软件开发的宇宙中,每一行代码都如同星辰般璀璨,而将这些星辰编织成星系的过程,则依赖于严谨而高效的测试策略。本文将引领读者探索软件测试的奥秘,揭示如何通过精心设计的测试方案,不仅提升软件的性能与稳定性,还能加速产品上市的步伐,最终实现质量与效率的双重飞跃。
在软件工程的浩瀚星海中,测试不仅是发现缺陷的放大镜,更是保障软件质量的坚固防线。本文旨在探讨一种高效且创新的软件测试策略框架,它融合了传统方法的精髓与现代技术的突破,旨在为软件开发团队提供一套系统化、可执行性强的测试指引。我们将从测试规划的起点出发,沿着测试设计、执行、反馈再到持续优化的轨迹,逐步展开论述。每一步都强调实用性与前瞻性相结合,确保测试活动能够紧跟软件开发的步伐,及时适应变化,有效应对各种挑战。
|
9月前
|
Kubernetes Go 数据库
客服系统命令行程序-Cobra 命令行应用入口
唯一客服系统是基于 Go 语言与 Cobra 框架构建的命令行工具,用于管理在线客服系统。支持启动、安装和停止服务,具备清晰的命令结构和良好的扩展性,便于维护与功能拓展。
220 0
|
测试技术 数据库 UED
Python 性能测试进阶之路:JMeter 与 Locust 的强强联合,解锁性能极限
【9月更文挑战第9天】在数字化时代,确保软件系统在高并发场景下的稳定性至关重要。Python 为此提供了丰富的性能测试工具,如 JMeter 和 Locust。JMeter 可模拟复杂请求场景,而 Locust 则能更灵活地模拟真实用户行为。结合两者优势,可全面评估系统性能并优化瓶颈。例如,在电商网站促销期间,通过 JMeter 模拟大量登录请求并用 Locust 模拟用户浏览和购物行为,可有效识别并解决性能问题,从而提升系统稳定性和用户体验。这种组合为性能测试开辟了新道路,助力应对复杂挑战。
499 2
|
10月前
|
前端开发 搜索推荐 NoSQL
错过就亏大了!这款开源 IM 项目,功能强大、部署简单,适合私有化部署,开发者必收藏!
Lumen IM 是一个基于 Vue3 + Naive UI 前端与 Go 后端的开源即时通讯系统,支持私聊、群聊、文件传输、消息撤回等功能,适用于企业内部沟通及开发者学习。项目采用 WebSocket 实现即时消息推送,技术栈包括 MySQL、Redis 和 Minio 等,确保高效稳定运行。界面简约美观,操作便捷,并支持笔记功能和个性化设置。无论是企业使用还是二次开发,Lumen IM 都是一个优质选择
807 0
|
存储 监控 前端开发
如何确保测试脚本的稳定性和可靠性?
确保测试脚本的稳定性和可靠性是保证性能测试结果准确有效的关键
456 58
|
存储 监控 网络协议
服务器压力测试是一种评估系统在极端条件下的表现和稳定性的技术
【10月更文挑战第11天】服务器压力测试是一种评估系统在极端条件下的表现和稳定性的技术
753 32
|
测试技术 UED 开发者
软件测试的艺术:从代码审查到用户反馈的全景探索在软件开发的宇宙中,测试是那颗确保星系正常运转的暗物质。它或许不总是站在聚光灯下,但无疑是支撑整个系统稳定性与可靠性的基石。《软件测试的艺术:从代码审查到用户反馈的全景探索》一文,旨在揭开软件测试这一神秘面纱,通过深入浅出的方式,引领读者穿梭于测试的各个环节,从细微处着眼,至宏观视角俯瞰,全方位解析如何打造无懈可击的软件产品。
本文以“软件测试的艺术”为核心,创新性地将技术深度与通俗易懂的语言风格相结合,绘制了一幅从代码审查到用户反馈全过程的测试蓝图。不同于常规摘要的枯燥概述,这里更像是一段旅程的预告片,承诺带领读者经历一场从微观世界到宏观视野的探索之旅,揭示每一个测试环节背后的哲学与实践智慧,让即便是非专业人士也能领略到软件测试的魅力所在,并从中获取实用的启示。

热门文章

最新文章

下一篇
开通oss服务