go pprof压测文档压测相关

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 查看内存使用情况

猜你喜欢

转载自blog.csdn.net/anran186/article/details/90171741
今日推荐