搭建go-stress-testing压力测试

参考地址:https://github.com/link1st/go-stress-testing
安装golang环境

1
yum install -y golang

下载软件包

1
2
wget -q https://codeload.github.com/link1st/go-stress-testing/zip/master
unzip go-stress-testing-master.zip

下载执行命令

1
2
3
4
5
6
7
8
9
10
https://github.com/link1st/go-stress-testing/releases/download/v1.0.1/go-stress-testing-linux
chmod +x go-stress-testing-linux
cat >/root/go-stress-testing-master/build.sh <<EOF
#!/usr/bin/env bash
# 编译linux下可以执行文件
go build -o go-stress-testing-linux main.go
# 使用交叉编译 linux和windows版本可以执行的文件
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o go-stress-testing-linux main.go
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -o go-stress-testing-win.exe main.go
EOF

执行编译 

1
sh build.sh

命令参数说明

1
2
3
-c 表示并发数
-n 每个并发执行请求的次数,总请求的次数 = 并发数 * 每个并发执行请求的次数
-u 需要压测的地址

测试百度

./go-stress-testing-linux -c 1 -n 100 -u https://www.baidu.com/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
开始启动  并发数:1 请求数:100 请求参数:
request:
 form:http
 url:https://www.baidu.com/
 method:GET
 headers:map[]
 data:
 verify:statusCode
 timeout:3s
 debu:false
─────┬───────┬───────┬───────┬────────┬────────┬────────┬────────┬────────
 耗时│ 并发数│ 成功数│ 失败数│   qps  │最长耗时│最短耗时│平均耗时│ 错误码
─────┼───────┼───────┼───────┼────────┼────────┼────────┼────────┼────────
   1s│      1│     31│      0│   31.41│   40.56│   28.32│   31.83│200:31
   2s│      1│     63│      0│   31.79│   40.56│   27.70│   31.45│200:63
   3s│      1│     91│      0│   30.56│  154.86│   26.33│   32.73│200:91
   3s│      1│    100│      0│   30.74│  154.86│   26.33│   32.53│200:100
 
 
*************************  结果 stat  ****************************
处理协程数量: 1
请求总数: 100 总请求时间: 3.263 秒 successNum: 100 failureNum: 0
*************************  结果 end   ****************************

./go run main.go -c 1 -n 100 -u https://www.baidu.com/

1
2
3
4
5
6
7
8
9
10
─────┬───────┬───────┬───────┬────────┬────────┬────────┬────────┬────────
 耗时│ 并发数│ 成功数│ 失败数│   qps  │最长耗时│最短耗时│平均耗时│ 错误码
─────┼───────┼───────┼───────┼────────┼────────┼────────┼────────┼────────
   1s│      1│     29│      0│   30.46│   40.27│   27.73│   32.83│200:29
   2s│      1│     55│      0│   27.89│  133.45│   26.71│   35.86│200:55
   3s│      1│     86│      0│   28.80│  133.45│   25.89│   34.73│200:86
   4s│      1│    115│      0│   28.84│  133.45│   25.89│   34.67│200:115
   5s│      1│    146│      0│   29.35│  133.45│   25.89│   34.07│200:146
   6s│      1│    176│      0│   29.45│  133.45│   25.89│   33.96│200:176
   7s│      1│    199│      0│   28.62│  184.13│   25.25│   34.94│200:199

 

1
参数解释:
1
2
3
4
5
6
7
8
9
耗时: 程序运行耗时。程序每秒钟输出一次压测结果
并发数: 并发数,启动的协程数
成功数: 压测中,请求成功的数量
失败数: 压测中,请求失败的数量
qps: 当前压测的QPS(每秒钟处理请求数量)
最长耗时: 压测中,单个请求最长的响应时长
最短耗时: 压测中,单个请求最短的响应时长
平均耗时: 压测中,单个请求平均的响应时长
错误码: 压测中,接口返回的 code码:返回次数的集合  

内核优化
修改程序最大打开文件数
被压测服务器需要保持100W长连接,客户和服务器端是通过socket通讯的,每个连接需要建立一个socket,程序需要保持100W长连接就需要单个程序能打开100W个文件句柄

vim /etc/security/limits.conf
这里需要把硬限制和软限制、root用户和所有用户都设置为 1040000
core 是限制内核文件的大小,这里设置为 unlimited
 添加以下参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
root soft nofile 1040000
root hard nofile 1040000
 
root soft nofile 1040000
root hard nproc 1040000
 
root soft core unlimited
root hard core unlimited
 
* soft nofile 1040000
* hard nofile 1040000
 
* soft nofile 1040000
* hard nproc 1040000
 
* soft core unlimited
* hard core unlimited

注意:
/proc/sys/fs/file-max 表示系统级别的能够打开的文件句柄的数量,不能小于limits中设置的值
如果file-max的值小于limits设置的值会导致系统重启以后无法登录
# file-max 设置的值参考
cat /proc/sys/fs/file-max
12553500
修改以后重启服务器,ulimit -n 查看配置是否生效

posted @   缺个好听的昵称  阅读(2394)  评论(2编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示