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

【原创】开源OpenIM:轻量、高效、实时、可靠、低成本的消息模型 【原创】开源OpenIM:轻量、高效、实时、可靠、低成本的消息模型 1、内容概述 一套完整IM系统中,除开基本的业务设计,消息模型的设计是其中最为关键的一环,它关系到整个IM系统的可靠性、高效性、稳定性,因此需要设计一套合理的消息传递收发机制以承载IM的各种需求,OpenIM结合具体的业务场景,提炼出IM后端的重要接口,并经过反复推敲,验证,设计出了自己的一套通信协议OMTP,协议中每个字段尽量的减少冗余,使其精简高效、最大限度的满足现有的业务需求并能够支持业务的水平拓展,同时为了达到消息的实时可靠与高效, 阅读详情

压测前准备

(一)服务端配置调整 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/#

开源即时通讯(IM)项目OpenIM源码部署流程 由于OpenIM依赖的组件较多,开发者需求不一,导致OpenIM部署一直被人诟病,经过几次迭代优化,包括依赖的组件compose的一键部署,环境变量设置一次,全局生效,以及脚本重构,目前OpenIM部署比较丝滑,特写文章分享给大家。OpenIM是什么OpenIM不是一个独立的聊天产品,它不像telegram、Signal、rocket.chat那样是一个完全独立、可以直接安装使用的聊天应用程序。而是一个开源的即时通讯解决方案,为开发者提供了一系列的工具和服务,以便于他们在自己的应用程序中集成即时通讯功能。 阅读详情

相关推荐

OpenIM Server v3.8.3-patch.16:高并发IM系统性能与稳定性深度优化实践

在构建高并发、高可用的即时通讯(IM)系统时,性能瓶颈与稳定性挑战是开发者必须面对的核心问题。其原理通常涉及消息分发、在线状态管理、数据存储与缓存等关键链路的技术选型与架构设计。通过异步非阻塞、多级缓存、防御性编程等工程实践,可以有效提升系统的吞吐量、降低延迟并保障服务长期稳定运行,这对于社交平台、企业协作等应用场景至关重要。本文聚焦于OpenIM Server的最新补丁版本,深入解析其如何针对消息队列、Goroutine泄漏等热词进行精准优化,并通过配置数据库连接池、引入本地缓存等具体手段,为IM系统的性

weixin_33827590的博客 415

时不我待,拥抱趋势,开源IM项目OpenIM技术简介

同时,它还提供了完整的管理后台,帮助管理员监控和管理用户、群组、消息、通知等内容。OpenIM支持iOS和Android原生开发,并且也提供了Flutter、uniapp、React Native等跨平台开发框架的SDK,开发者可以根据自己的需求选择不同的开发方式。作为一款开源的IM项目,OpenIM提供了丰富的功能和完善的技术支持,吸引了众多开发者的关注和使用。对于iOS和Android原生开发,OpenIM提供了针对各个平台的SDK和相应的开发文档,开发者可以根据文档指引完成相应的集成和开发工作。

OpenIM的博客 6371

MobileIMSDK与RainbowChat:高并发IM系统产品级解决方案深度解析

即时通讯(IM)系统作为现代应用的核心组件,其底层架构设计直接决定了消息传输的可靠性和实时性。基于TCP、UDP、WebSocket等多协议统一抽象层,MobileIMSDK通过轻量级框架实现了跨平台通信的一致性,有效降低了Android、iOS、H5等多端维护成本。在工程实践中,异步化处理、无锁队列等技术显著提升了高并发场景下的吞吐量,而RainbowChat则在此基础上完成了产品化封装,解决了设备兼容性、UI适配、业务逻辑完整性等真实运营痛点。从v11.7到v12.1的迭代中,离线消息存储优化、会话合并

weixin_30294295的博客 515

紧跟潮流,抓住趋势,跟上全民AI的节奏,开源IM项目OpenIM产品介绍,为AIGC贡献力量

高度自主、安全可控、开放自由,私有化部署,一切皆可控透明度和可信度:开源软件的源代码是公开的,任何人都可以查看和检查代码,从而增强了软件的透明度和可信度。用户可以了解软件的内部结构和运作方式,发现和修复潜在的安全漏洞和错误。自由度和可定制性:开源软件允许用户自由地使用、复制、分发和修改软件代码。用户可以根据自己的需求和要求对软件进行自定义和定制,满足不同的业务需求。开放创新和协作:开源软件的源代码公开,鼓励开发者和用户之间的交流、合作和创新。

OpenIM的博客 2184

别再为IM发愁了!手把手教你用Docker Compose一键部署OpenIM开源聊天系统(附避坑指南)

本文详细介绍了如何使用Docker Compose一键部署OpenIM开源即时通讯系统,包括环境准备、源码获取、配置解析和实战部署步骤。通过清晰的避坑指南和优化建议,帮助开发者快速搭建稳定高效的聊天系统,适用于社交平台、企业协作等多种场景。

weixin_28736355的博客 189

OpenIM私有化部署实战:Docker离线环境搭建与优化

本文详细介绍了OpenIM私有化部署在Docker离线环境中的实战经验,包括离线镜像准备、Docker Compose配置优化、部署验证及性能调优技巧。针对无网络环境下的特殊需求,提供了从硬件准备到安全加固的完整解决方案,帮助开发者在隔离网络中高效搭建稳定的即时通讯系统。

weixin_30379531的博客 170

OpenIM Server开源即时通讯服务器快速上手终极指南

还在为搭建企业级即时通讯系统而烦恼吗?想要拥有像微信一样流畅的聊天体验,但又不想被大厂绑定?OpenIM Server就是你的最佳选择!这个开源项目让你轻松构建属于自己的即时通讯平台,支持千万级用户和百亿级消息处理。😊 ## 从零开始:搭建你的专属聊天系统 想象一下,你只需要几个简单的步骤,就能拥有一个功能完整的即时通讯服务器。OpenIM Server采用Go语言开发,微服务架构设计,让你

gitblog_00350的博客 1086

【项目实战】开源的即时通讯组件OpenIM入门介绍

IM,是即时通讯(Instant Messaging,简称 IM)OpenIM,是一个开源的、强大的即时通讯组件。OpenIM,提供了完整的即时通讯服务功能。OpenIM,被设计为高并发、高可用、易于扩展的架构。OpenIM,适合构建企业级的即时通讯平台。OpenIM,由一群热爱开源技术的开发者创建。OpenIM,旨在提供一个高性能、稳定、易用的即时通讯解决方案。OpenIM,是由IM技术专家打造的开源的即时通讯组件。

奶爸的编程之路,也就一周冷个三天 3484

企业级IM系统:OpenIM Server私有部署解决方案

在数字化转型加速的今天,企业对即时通讯工具的需求已从简单的消息传递升级为包含数据安全、系统集成和业务定制的综合通信平台。你是否遇到过第三方通讯工具数据隐私无法保障的问题?是否因商业IM软件功能固化而无法满足特定业务场景?OpenIM Server作为开源企业级即时通讯系统,通过**微服务架构**(通过独立部署的服务模块实现弹性扩展)提供了完整的私有部署解决方案,让企业拥有完全可控的通讯基础设施。

gitblog_00768的博客 753

【车载开发系列】ParaSoft单元测试环境配置(一)

bdf是数据文件的一种类型,表示一种数据库文件。在ParaSoft当中,可以使用bdf文件来快速创建一个测试项目。

千月星跡 2147

算法面经手撕系列(2)--手撕BatchNormlization

手动实现/手撕BatchNormlization

罟霖同学的站点 865

从0到1部署OpenIM Server:Kubernetes环境下的容器化实践指南

你是否还在为即时通讯(IM)系统的部署繁琐、扩展性差而烦恼?本文将带你通过Kubernetes实现OpenIM Server的容器化部署,从基础配置到性能优化,让你的IM服务具备企业级稳定性与弹性伸缩能力。读完本文,你将掌握: - 使用Kubernetes资源清单快速部署OpenIM集群 - 配置高可用的数据库与消息队列服务 - 实现服务暴露与流量控制的最佳实践 - 针对IM场景的性能调优技巧 ...

gitblog_00430的博客 466

[原创]Step by step 实现自己的AI知识库问答(二)

对小白很友好的AI智能问答开发保姆级教程,适合初级开发者、学生阅读参考,无限制分享,欢迎转载。在这个章节中,我们使用了百度千帆作为知识库,通过简单的代码调用API实现了智能问答。

BaiRiYiSanJin的博客 1471

OpenIM Server边缘节点部署:CDN加速消息传输

在即时通讯(Instant Messaging, IM)系统中,消息传输的延迟和稳定性直接影响用户体验。随着用户规模扩大和跨地域分布,传统中心化部署架构面临三大挑战: - **高延迟**:远距离用户访问中心服务器导致消息往返时间(RTT)过长 - **带宽瓶颈**:中心节点带宽压力大,高峰期易出现消息拥塞 - **单点故障风险**:核心服务集群故障影响全局用户 OpenIM Server作为开源...

gitblog_00108的博客 1082

【PT+Arduino+OneNET基础教程1】PacketTracer中MCU芯片编程教程(零基础入门)

PacketTracer软件内MCU芯片编程入门 零基础

ChloeMax_的博客 9454

解决‘GLIBC_2.28 not found‘错误:手把手教你升级glibc到最新版(附中文乱码修复)

本文提供了一份详尽的Linux系统glibc升级实战指南,旨在解决常见的'GLIBC_2.28 not found'错误。文章不仅涵盖从风险评估、环境准备到编译安装的完整流程,还特别加入了精简本地化数据以修复中文乱码的实用技巧,帮助管理员和开发者在安全可控的前提下完成系统核心库的升级。

a1b2c3d的博客 1344

OpenIM Server网络优化:TCP配置与连接复用全指南

即时通讯(Instant Messaging,IM)系统对网络延迟和连接稳定性有着极高的要求。用户期望消息实时送达,而TCP作为IM系统的基础传输协议,其配置优化直接影响着消息传输的实时性、可靠性和服务器资源利用率。 OpenIM Server作为一款高性能开源IM服务器,在处理海量并发连接时,TCP配置和连接复用策略显得尤为关键。本文将深入剖析OpenIM Server的TCP优化实践,提供从...

gitblog_00808的博客 473

在已有win10系统下安装Ubuntu,最后出现执行‘grub-install/dev/nvme0n1p5‘失败的致命错误的解决方案

本人电脑型号戴尔灵越,两个SSD512G固态硬盘,c盘为系统盘. Ubuntu版本为20.04LTS,在官网下载https://ubuntu.com/download/desktop/thank-you?version=20.04.3&architecture=amd64 系统盘制作工具为Rufus-3.15http://rufus.ie/zh/ 安装过程网上很多,在这里就不赘述了. 其他安装过程都很顺利,直至安装最后出现这个 本来安装了到最后还以为成了,结果又不行...... 后.

XiaoChen_gugugu的博客 1万+

深度解析OpenIM企业级开源即时通讯系统架构设计与性能优化

在数字化协作时代,企业级即时通讯系统面临高并发连接管理、消息实时同步、数据一致性保障等核心挑战。OpenIM作为一款开源即时通讯解决方案,通过微服务架构和分布式设计,为开发者提供了可扩展、高性能的即时通讯基础设施。本文将深入剖析OpenIM的技术架构、核心实现原理以及生产环境的最佳实践。 ## 技术挑战与解决方案概述 现代即时通讯系统需要解决的核心技术问题包括:大规模用户连接管理、消息实时传递

gitblog_00012的博客 277

产品经理如何运用AI提升工作效率

AI技术的应用为产品经理的工作流程带来了显著的效率提升。从需求收集到产品上线,AI可以在多个阶段提供智能化支持,帮助产品经理更好地理解用户需求、优化产品设计、提高开发和测试效率。在未来,随着AI技术的不断发展,产品经理将能够更加高效地管理产品生命周期,为用户提供更优质的产品体验。应用 | AI + 千行百业欢迎关注我的后续博文,我将分享更多关于人工智能、自然语言处理和计算机视觉的精彩内容。

不想宅的冷同学 1336

AI处理器组合

编号0-3的处理器处于同一个链路中,编号4-7的处理器处于另外一个链路中,不通链路中的处理器不能通信,如下图所示。- 如果申请处理器个数为1,则选择同一链路,剩余可用的处理器数量为1个的最佳,其次是剩余3个的为次佳,然后是剩余2个,最后是剩余4个。输出为组合列表,当array=[0, 1, 4, 5, 6, 7] ,num=1时,输出为[[0], [1]]- 如果申请处理器个数为2,则选择同一链路剩余可用的处理器数量2个的为最佳,其次是剩余4个,最后是剩余3个。任务申请1个处理器。

面试高手的博客 1万+

OpenIM 可观测性实战指南:Prometheus + Grafana 监控部署与 AlertManager 邮件告警配置

本篇技术指南以 OpenIM 官方监控文档([docs/contrib/prometheus-grafana.md](https://link.gitcode.com/i/100a8642cdce1b0efd21df419c55cfc5))为核心骨架,结合本仓库的 Prometheus 配置、告警规则、服务发现源码与 Docker Compose 编排,系统讲解 OpenIM 即时通讯服务的监控体

gitblog_01011的博客 468

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

OpenIM Server监控与告警终极指南:Prometheus+Grafana实战配置

OpenIM Server作为开源即时通讯解决方案,在生产环境中需要完善的监控和告警系统来确保服务稳定性。本文将详细介绍如何使用Prometheus和Grafana搭建OpenIM Server的完整监控体系,涵盖从基础配置到高级告警的全流程。🚀 ## 为什么需要监控OpenIM Server? OpenIM Server作为实时通讯平台,需要监控关键指标如用户在线状态、消息吞吐量、API响

gitblog_00609的博客 407

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

OpenIM Server版本升级指南:平滑过渡到新版本

在当今快速发展的即时通讯(Instant Messaging, IM)领域,系统的稳定性、安全性和功能迭代直接影响用户体验和业务连续性。OpenIM Server作为一款开源的即时通讯服务器解决方案,通过持续的版本更新不断优化性能、修复漏洞并引入新特性。然而,版本升级过程中若操作不当,可能导致服务中断、数据丢失或功能异常。本指南将系统阐述OpenIM Server的升级流程,帮助运维人员和开发者实...

gitblog_00938的博客 600

如何构建企业级即时通讯系统:开源方案的技术选型与实践指南

在数字化转型加速的今天,企业对即时通讯系统的需求不再局限于简单的消息传递,而是需要一个能够深度集成业务流程、保障数据安全、支持高并发的通信平台。OpenIM Server作为一款企业级开源即时通讯系统,通过微服务架构设计和灵活的组件化方案,为企业提供了自主可控的通信基础设施。本文将从技术选型、架构设计、实践部署到扩展集成,全面解析如何基于OpenIM构建符合企业需求的即时通讯解决方案。 ## 技

gitblog_00474的博客 1032

OpenIM Server v3.8 版本演进深度解析:多端登录、流式消息与高可用架构新特性

本篇技术指南以 OpenIM Server 官方 [CHANGELOG-3.8.md](https://link.gitcode.com/i/af744ef12f058763f62c8ca6a415bd30) 为骨架,系统梳理 v3.8.3-patch.7 至 v3.8.3-patch.16 期间的核心新特性、关键修复与架构演进,并结合当前仓库源码与配置文件逐项佐证。读完本文,你将掌握 OpenI

gitblog_00751的博客 497
上一篇: 收藏-即时通讯(IM)开源项目OpenIM-功能手册
下一篇: 开源IM项目OpenIM单聊及万人群压测报告
OpenIM
博客等级 码龄5年 295粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值