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