Skip to content

Commit af0fdfa

Browse files
authored
feat: benchmark test doc (#289)
* feat: pressure test * feat: test * feat: test * feat: test
1 parent af929a8 commit af0fdfa

2 files changed

Lines changed: 344 additions & 312 deletions

File tree

Lines changed: 198 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,198 @@
1+
---
2+
title: '压测程序使用说明'
3+
hide_title: true
4+
sidebar_position: 2
5+
---
6+
7+
# 压测程序使用说明
8+
9+
本文用于指导客户在开源版环境中修改配置、编译与运行压测程序。
10+
11+
---
12+
13+
## 联动压测流程
14+
15+
按下面步骤即可完成一次“压力 + 抽样可靠性/时延”的联动压测。
16+
17+
1)启动服务端(OpenIMServer + 组件)。
18+
19+
- 根据压测规模调整服务端实例数(例如 `openim-push: 8``openim-msgtransfer: 8`)。
20+
21+
2)启动压力侧(msgtest)。
22+
23+
- 先修改 msgtest 连接配置(以 `msgtest/module/pressure.go` 为准),再编译并运行。
24+
25+
3)启动抽样侧(integration_test)。
26+
27+
- 修改 integration_test 连接配置文件:`integration_test/internal/config/config.go`
28+
- 在压力稳定后启动 integration_test,执行可靠性与时延统计、必要的一致性校验。
29+
30+
---
31+
32+
## integration_test
33+
34+
程序路径:`openim-sdk-core/integration_test/`
35+
36+
### 参数说明
37+
38+
| 参数 | 含义 | 类型 |
39+
| --- | --- | --- |
40+
| test | SDK 是否运行测试模式 | bool |
41+
| u | 用户数量 | int |
42+
| su | 拥有所有好友的用户数量 | int |
43+
| lg | 大群数量 | int |
44+
| lgm | 大群人数 | int |
45+
| cg | 每个人创建的常规群聊数量 | int |
46+
| cgm | 常规群人数 | int |
47+
| sm | 每人发送的私聊消息数量 | int |
48+
| gm | 每人发送的群聊消息数量 | int |
49+
| msgitv | 发送消息间隔(ms) | int |
50+
| reg | 是否注册 | bool |
51+
| imf | 是否导入好友 | bool |
52+
| crg | 是否创建群组 | bool |
53+
| sem | 是否发送消息 | bool |
54+
| ckgn | 是否检查群组数量 | bool |
55+
| ckcon | 是否检查会话数量 | bool |
56+
| ckmsn | 是否检查消息数量 | bool |
57+
| ckuni | 是否模拟卸载重装并再次检查 | bool |
58+
| lgr | 登录用户比例/登录率 | float |
59+
60+
### 配置文件
61+
62+
- 文件:`openim-sdk-core/integration_test/internal/config/config.go`
63+
- 需要修改:`TestIP / APIAddr / WsAddr / AdminUserID / Secret / PlatformID / DataDir`
64+
65+
### 示例命令与说明
66+
67+
- 仅注册用户(用于准备数据):
68+
69+
```bash
70+
go run main.go -reg -u 100000
71+
```
72+
73+
- 抽样登录 + 导入好友 + 建群 + 发消息 + 校验(常用联动压测模式):
74+
75+
```bash
76+
go run main.go \
77+
-lgr 0.8 -test \
78+
-u 100 -su 3 -lg 0 -cg 4 -cgm 5 \
79+
-sm 100 -gm 100 -msgitv 1500 \
80+
-imf -crg -sem -ckgn -ckcon -ckmsn
81+
```
82+
83+
- 小规模全链路校验(用于快速验证环境可跑通):
84+
85+
```bash
86+
go run main.go \
87+
-test \
88+
-u 10 -su 3 -lg 2 -cg 4 -cgm 5 \
89+
-sm 6 -gm 7 -msgitv 1000 \
90+
-reg -lgr 0.7 -imf -crg -ckgn -ckcon -sem -ckmsn -ckuni
91+
```
92+
93+
---
94+
95+
## msgtest
96+
97+
程序路径:`openim-sdk-core/msgtest/`,入口:`msgtest/main/main.go`
98+
99+
### 编译
100+
101+
```bash
102+
cd openim-sdk-core/msgtest
103+
104+
go build -o main ./main
105+
```
106+
107+
### 生效配置
108+
109+
msgtest 的连接配置
110+
111+
- 文件:`openim-sdk-core/msgtest/module/pressure.go`
112+
- 需要修改:`TESTIP / APIADDR / WSADDR / MANAGERUSERID / SECRET / PLATFORMID`
113+
114+
### 参数说明
115+
116+
| 参数 | 含义 | 类型 | 默认值 |
117+
| --- | --- | --- | --- |
118+
| `-o` | 在线用户总数 | int | 20000 |
119+
| `-s` | 起始用户(与 `-e` 配合使用) | int | 0 |
120+
| `-e` | 结束用户(与 `-s` 配合使用) | int | 0 |
121+
| `-sr` | 单聊抽样率 | float | 0.01 |
122+
| `-rs` | 单聊随机发送者数量 | int | 0 |
123+
| `-rr` | 单聊每个发送者随机接收者数量 | int | 0 |
124+
| `-c` | 每个发送者向每个接收者发送的消息条数 | int | 0 |
125+
| `-i` | 每个发送者发送间隔(毫秒) | int | 1000 |
126+
| `-r` | 是否注册用户 | bool | false |
127+
| `-u` | 仅保持在线,不发送消息 | bool | false |
128+
| `-pp` | 是否开启 pprof(0.0.0.0:6060) | bool | false |
129+
| `-gsr` | 群聊发送者比例 | float | 0.1 |
130+
| `-gor` | 群聊在线比例 | float | 0.0 |
131+
| `-htg` | 10 万人群数量 | int | 0 |
132+
| `-ttg` | 1 万人群数量 | int | 0 |
133+
| `-otg` | 1 千人群数量 | int | 0 |
134+
| `-hog` | 100 人群数量 | int | 0 |
135+
| `-fog` | 50 人群数量 | int | 0 |
136+
| `-teg` | 10 人群数量 | int | 0 |
137+
138+
### 示例命令
139+
140+
- 5 万在线(仅保持在线):
141+
142+
```bash
143+
nohup ./main -o 50000 -u >> openIM.log 2>&1 &
144+
```
145+
146+
- 5 万在线 + 单聊压测(示例:300 发送者,300 接收者,每对 100 条):
147+
148+
```bash
149+
nohup ./main -o 50000 -rs 300 -rr 300 -c 100 -i 1 -r >> openIM.log 2>&1 &
150+
```
151+
152+
---
153+
154+
# 注意事项
155+
156+
以下调整用于提升压测稳定性,避免“压测程序自身压力”干扰对 OpenIMServer(ChatServer)承载能力的判断。
157+
158+
1. 修改请求超时时间
159+
- 程序:OpenIMClientSDK(`openim-sdk-core`
160+
- 位置:`openim-sdk-core/pkg/network/http_client.go`
161+
- 修改:搜索 `Timeout`,将默认超时适当延长。
162+
163+
2. 修改 SDK 异步管道超时时间
164+
- 程序:OpenIMClientSDK(`openim-sdk-core`
165+
- 位置:`openim-sdk-core/pkg/common/trigger_channel.go`
166+
- 修改:找到 `const timeout`,将管道超时时间适当调大。
167+
168+
3. 修改服务端通知超时时间
169+
- 程序:OpenIMServer
170+
- 位置:`open-im-server/pkg/notification/msg.go`
171+
- 修改:搜索 `WithTimeout`,适当调大 `context` 超时时间。
172+
173+
4. 降低服务端日志级别
174+
- 程序:OpenIMServer
175+
- 位置:`open-im-server/config/log.yml`
176+
- 修改:将 `remainLogLevel` 设置为 3。
177+
178+
5. 通知消息未读状态(用于未读数统计口径一致)
179+
- 程序:OpenIMServer
180+
- 位置:`open-im-server/config/notification.yml`
181+
- 修改:将 `groupCreated``friendApplicationApproved``unreadCount` 设置为 `true`
182+
183+
6. 服务端最大连接数量(FD)
184+
- 程序:OpenIMServer
185+
- 位置:`open-im-server/start-config.yml`
186+
- 修改:根据需要登录的用户数量,将 `maxFileDescriptors` 适当调大。
187+
188+
7. 客户端动态端口范围
189+
- 位置:msgtest 所在压测机
190+
191+
```sh
192+
sudo sysctl -w net.ipv4.ip_local_port_range="10000 65000"
193+
```
194+
195+
8. 打开全量在线缓存
196+
- 程序:OpenIMServer
197+
- 位置:`open-im-server/config/openim-push.yml`
198+
- 修改:将 `fullUserCache` 设置为 `true`

0 commit comments

Comments
 (0)