天天看點

開源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)

開源IM項目OpenIM單聊及萬人群壓測報告

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記憶體增加

開源IM項目OpenIM單聊及萬人群壓測報告
開源IM項目OpenIM單聊及萬人群壓測報告

啟動萬人群聊壓測

(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/#/

開源IM項目OpenIM單聊及萬人群壓測報告

單聊壓測程式

倉庫位址

​​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

繼續閱讀