1. 压测工具:
1. ab || jemeter 主要用于http接口类服务的压测。
2. win [ab压力测试参考](https://www.jianshu.com/p/43d04d8baaf7 "ab压力测试参考")
3. 自己开发tcp压测工具:erlang 有针对push的压力测试工具
2. 性能指标
1. 吞吐率(request per second):
1. 概念:某个并发用户下单位时间内处理的请求数。某个并发用户下单位时间内处理的最大请求数称为最大吞吐率
2. 含义:
1. 吞吐率和并发用户相关
2. 不同的并发用户下,吞吐率一般是不同的。
3. 计算公式:request per sec = complete requests/time take for test
2. 并发连接数: 并发连接数指的是某个时刻服务器所接受的请求数目
3. 并发用户数:要注意区分这个概念和并发连接数之间的区别,一个用户可能同时会产生多个会话,也即连接数。在HTTP/1.1下,IE7支持两个并发连接,IE8支持6个并发连接,FireFox3支持4个并发连接,所以相应的,我们的并发用户数就得除以这个基数。
4. 用户平均请求等待时间:计算公式:处理完成所有请求数所花费的时间/(总请求数/并发用户数),即:Time per request=Time taken for tests/(Complete requests/Concurrency Level)
5. 服务器平均请求等待时间:计算公式:处理完成所有请求数所花费的时间/总请求数,即:Time taken for/testsComplete requests可以看到,它是吞吐率的倒数。同时,它也等于用户平均请求等待时间/并发用户数,即Time per request/Concurrency Level
2. ab测试工具
1. 命令:
1. ab -c 10 -n 100 http://10.115.88.111/api/v1/test
-c 表示并发用户
-n 表示请求总数
2. 结果说明:
```shell
Server Software: #server name
Server Hostname: 10.115.88.111 #host
Server Port: 8000 #port
Document Path: /api/v1/test #请求的URL中的根绝对路径
Document Length: 48 bytes #HTTP响应数据的正文长度
Concurrency Level: 10 #并发用户数,这是我们设置的参数之一
Time taken for tests: 12.922 seconds #所有这些请求被处理完成所花费的总时间 单位秒
Complete requests: 10000 # 总请求数量,这是我们设置的参数之一
Failed requests: 0 # 表示失败的请求数量,这里的失败是指请求在连接服务器、发送数据等环节发生异常,以及无响应后超时的情况
Total transferred: 1710000 bytes #所有请求的响应数据长度总和。包括每个HTTP响应数据的头信息和正文数据的长度
HTML transferred: 480000 bytes # 所有请求的响应数据中正文数据的总和,也就是减去了Total transferred中HTTP响应数据中的头信息的长度
Requests per second: 773.88 [#/sec] (mean)#吞吐率,计算公式:Complete requests/Time taken for tests 总请求数/处理完成这些请求数所花费的时间
Time per request: 12.922 [ms] (mean) #用户平均请求等待时间,计算公式:Time token for tests/(Complete requests/Concurrency Level)。处理完成所有请求数所花费的时间/(总请求数/并发用户数)
Time per request: 1.292 [ms] (mean, across all concurrent requests) ) #服务器平均请求等待时间,计算公式:Time taken for tests/Complete requests,正好是吞吐率的倒数。也可以这么统计:Time per request/Concurrency Level
Transfer rate: 129.23 [Kbytes/sec] received #表示这些请求在单位时间内从服务器获取的数据长度,计算公式:Total trnasferred/ Time taken for tests,这个统计很好的说明服务器的处理能力达到极限时,其出口宽带的需求量。
Connection Times (ms)
min mean[+/-sd] median max
Connect: 1 1 0.3 1 3
Processing: 1 12 0.8 12 19
Waiting: 1 8 2.8 9 18
Total: 3 13 0.9 13 21
Percentage of the requests served within a certain time (ms)
50% 13
66% 13
75% 13
80% 13
90% 13
95% 14
98% 15
99% 17
100% 21 (longest request)
#Percentage of requests served within a certain time(ms)这部分数据用于描述每个请求处理时间的分布情况,比如以上测试,80%的请求处理时间都不超过7ms,这个处理时间是指前面的Time per request,即对于单个用户而言,平均每个请求的处理时间
```
4. pprof
1. gin 中集成:github.com/DeanThompson/ginpprof
2. 参考文档:https://www.jianshu.com/p/4e4ff6be6af9
3. 实际操作:
1. 查看cpu使用情况:go tool pprof http://localhost:8000/debug/pprof/profile
2. ab -c 10 -n 100 http://10.115.88.111/api/v1/test
3. 等待命令行执行完:
```
(pprof) top10
Showing nodes accounting for 1930ms, 58.48% of 3300ms total
Dropped 95 nodes (cum <= 16.50ms)
Showing top 10 nodes out of 206
flat flat% sum% cum cum%
740ms 22.42% 22.42% 740ms 22.42% runtime.futex
470ms 14.24% 36.67% 690ms 20.91% syscall.Syscall
260ms 7.88% 44.55% 260ms 7.88% runtime.epollwait
100ms 3.03% 47.58% 130ms 3.94% syscall.Syscall6
90ms 2.73% 50.30% 90ms 2.73% runtime.usleep
80ms 2.42% 52.73% 360ms 10.91% runtime.sysmon
50ms 1.52% 54.24% 50ms 1.52% runtime.findfunc
50ms 1.52% 55.76% 90ms 2.73% runtime.getStackMap
50ms 1.52% 57.27% 50ms 1.52% runtime.lock
40ms 1.21% 58.48% 570ms 17.27% runtime.findrunnable
说明:
1. flat:给定函数上运行耗时
2. flat%:给定函数的cpu运行耗时总比
3. sum%:给定函数累积使用CPU总比
4. cum:当前函数加上它之上的调用运行总耗时
5. cum:当前函数加上它之上的调用运行总耗时总比
```
4. web 命令生成svg,打开后分析cpu占比
5. go tool pprof http://localhost:8000/debug/pprof/heap 查看内存使用情况