單聊壓測結論:
華為雲主機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