HTTP性能压测工具

性能说明

  • 测试机与被测试机要分开
  • 不要对线上的服务器做压力测试

ab工具

ab安装说明

# yum -y install httpd-tools

安装后命令所在的目录

# which ab
/usr/bin/ab

ab参数说明

$ ab [可选的参数选项] 需要进行压力测试的url
  • 参数说明:

    -n  即requests,用于指定压力测试总共的执行次数。
    -c  即concurrency,用于指定的并发数。
    -t  即timelimit,等待响应的最大时间(单位:秒)。
    -b  即windowsize,TCP发送/接收的缓冲大小(单位:字节)。
    -p  即postfile,发送POST请求时需要上传的文件,此外还必须设置-T参数。
    -u  即putfile,发送PUT请求时需要上传的文件,此外还必须设置-T参数。
    -T  即content-type,用于设置Content-Type请求头信息,例如:application/x-www-form-urlencoded,默认值为text/plain。
    -v  即verbosity,指定打印帮助信息的冗余级别。
    -w  以HTML表格形式打印结果。
    -i  使用HEAD请求代替GET请求。
    -x  插入字符串作为table标签的属性。
    -y  插入字符串作为tr标签的属性。
    -z  插入字符串作为td标签的属性。
    -C  添加cookie信息,例如:"Apache=1234"(可以重复该参数选项以添加多个)。
    -H  添加任意的请求头,例如:"Accept-Encoding: gzip",请求头将会添加在现有的多个请求头之后(可以重复该参数选项以添加多个)。
    -A  添加一个基本的网络认证信息,用户名和密码之间用英文冒号隔开。
    -P  添加一个基本的代理认证信息,用户名和密码之间用英文冒号隔开。
    -X  指定使用的和端口号,例如:"126.10.10.3:88"。
    -V  打印版本号并退出。
    -k  使用HTTP的KeepAlive特性。
    -d  不显示百分比。
    -S  不显示预估和警告信息。
    -g  输出结果信息到gnuplot格式的文件中。
    -e  输出结果信息到CSV格式的文件中。
    -r  指定接收到错误信息时不退出程序。
    -h  显示用法信息,其实就是ab -help。
    
  • 长链接参数:

    $ ab -k -c 100 -t 10 http://domain/path
    

    其中,参数「c」表示的是并发,参数「t」表示的是整个测试持续的时间。
    一个很容易被忽视的参数是「k」,它会增加请求头 Connection:Keep-Alive,相当于开启了HTTP长连接,这样做一方面可以降低测试服务器动态端口被耗尽的风险,另一方面也有助于给目标服务器更大的压力,测试出更接近极限的结果。

ab-FAQ

  • 报错apr_socket_recv: Connection reset by peer (104)

    查看应用服务器和数据库均未报错,连接被重置,bingyi了以下,apr_socket_recv这个是操作系统内核的一个参数,在高并发的情况下,内核会认为系统受到了SYN flood攻击,会发送cookies(possible SYN flooding on port 80. Sending cookies),这样会减慢影响请求的速度,所以在应用服务器上设置下这个参数为0禁用系统保护就可以进行大并发测试.然后就可以超过1000个并发测试了。

    # vim /etc/sysctl.conf 
    net.ipv4.tcp_syncookies = 0
    # sysctl -p
    

wrk工具

wrk安装说明

# git clone https://github.com/wg/wrk.git
# cd wrk
# make
# cp wrk /usr/sbin

wrk参数说明

  • Basic Usage

    wrk -t12 -c400 -d30s http://127.0.0.1:8080/index.html
    

    This runs a benchmark for 30 seconds, using 12 threads, and keeping 400 HTTP connections open.

    Output:
    
    Running 30s test @ http://127.0.0.1:8080/index.html
      12 threads and 400 connections
      Thread Stats   Avg      Stdev     Max   +/- Stdev
        Latency   635.91us    0.89ms  12.92ms   93.69%
        Req/Sec    56.20k     8.07k   62.00k    86.54%
      22464657 requests in 30.00s, 17.76GB read
    Requests/sec: 748868.53
    Transfer/sec:    606.33MB
    
  • Command Line Options

    -c, --connections: total number of HTTP connections to keep open with
                       each thread handling N = connections/threads
    
    -d, --duration:    duration of the test, e.g. 2s, 2m, 2h
    
    -t, --threads:     total number of threads to use
    
    -s, --script:      LuaJIT script, see SCRIPTING
    
    -H, --header:      HTTP header to add to request, e.g. "User-Agent: wrk"
    
        --latency:     print detailed latency statistics
    
        --timeout:     record a timeout if a response is not received within
                       this amount of time.
    

wrk-post方式

  • 编写post.lua脚本

    # cat post.lua 
    wrk.method = "POST" 
    
  • wrk调用post.lua脚本

    # /usr/local/bin/wrk -t12 -c400 -d30s --script=post.lua http://127.0.0.1:2050/
    

你可能感兴趣的:(HTTP性能压测工具)