zoukankan      html  css  js  c++  java
  • http接口性能测试工具

    一、 http_load

    程序非常小,解压后也不到100K。http_load以并行复用的方式运行,用以测试web服务器的吞吐量与负载。

    但是它不同于大多数压力测试工具,它可以以一个单一的进程运行,一般不会把客户机搞死。还可以测试HTTPS类的网站请求。

    下载地址:wget http://soft.vpser.net/test/http_load/http_load-12mar2006.tar.gz

    安装很简单:

    tar zxvf http_load-12mar2006.tar.gz

    cd http_load-12mar2006

    make

    make install

    命令格式:http_load -p 并发访问进程数 -s 访问时间 需要访问的URL文件

    参数其实可以自由组合,参数之间的选择并没有什么限制。比如你写成http_load -parallel 5 -seconds 300 urls.txt也是可以的。我们把参数给大家简单说明一下:

    -parallel 简写-p :含义是并发的用户进程数。

    -fetches 简写-f :含义是总计的访问次数。

    -rate    简写-p :含义是每秒的访问频率。

    -seconds简写-s :含义是总计的访问时间

    准备URL文件:urllist.txt,文件格式是每行一个URL,URL最好超过50-100个测试效果比较好。文件格式如下:

    http://127.0.0.1:80/getuserinfo?uid=1

    http://127.0.0.1:80/getgroupinfo?gid=1

    ... ...

    我们来看运行一条命令来看看它的返回结果 命令:% ./http_load -rate 5 -seconds 10 urls说明执行了一个持续时间10秒的测试,每秒的频率为5。

    49 fetches, 2 max parallel, 289884 bytes, in 10.0148 seconds5916 mean bytes/connection4.89274

    fetches/sec, 28945.5 bytes/secmsecs/connect: 28.8932 mean, 44.243 max, 24.488 minmsecs/first

    -response: 63.5362 mean, 81.624 max, 57.803 minHTTP response codes: code 200 — 49

    结果分析:

    1.49 fetches, 2 max parallel, 289884 bytes, in 10.0148 seconds 说明在上面的测试中运行了49个请求,最大的并发进程数是2,总计传输的数据是289884bytes,运行的时间是10.0148秒

    2.5916 mean bytes/connection说明每一连接平均传输的数据量289884/49=5916

    3.4.89274 fetches/sec, 28945.5 bytes/sec 说明每秒的响应请求为4.89274,每秒传递的数据为28945.5 bytes/sec

    4.msecs/connect: 28.8932 mean, 44.243 max, 24.488 min说明每连接的平均响应时间是28.8932 msecs,最大的响应时间44.243 msecs,最小的响应时间24.488 msecs

    5.msecs/first-response: 63.5362 mean, 81.624 max, 57.803 min

    6、HTTP response codes: code 200 — 49     说明打开响应页面的类型,如果403的类型过多,那可能要注意是否系统遇到了瓶颈。

    特殊说明: 测试结果中主要的指标是 fetches/sec、msecs/connect 这个选项,即服务器每秒能够响应的查询次数,

    用这个指标来衡量性能。似乎比 apache的ab准确率要高一些,也更有说服力一些。 Qpt-每秒响应用户数和response time,每连接响应用户时间。 测试的结果主要也是看这两个值。当然仅有这两个指标并不能完成对性能的分析,我们还需要对服务器的cpu、men进行分析,才能得出结论。

    二、wrk

    wrk 是一个很简单的 http 性能测试工具,也可以叫做 http benchmark工具。只有一个命令行,就能做很多基本的 http 性能测试。wrk 是开源的,代码在 github 上:https://github.com/wg/wrk。

    首先要说的一点是: wrk 只能运行在 Unix 类的系统上. 比如 linux, mac, solaris 等. 也只能在这些系统上编译. wrk 的一个很好的特性就是能用很少的线程压出很大的并发量. 原因是它使用了一些操作系统特定的高性能 io 机制, 比如 select, epoll, kqueue 等. 其实它是复用了 redis 的 ae 异步事件驱动框架.  确切的说 ae 事件驱动框架并不是 redis 发明的, 它来至于 Tcl的解释器 jim, 这个小巧高效的框架, 因为被 redis 采用而更多的被大家所熟知.

    要用 wrk, 首先要编译 wrk. 你的机器上需要已经安装了 git 和基本的c编译环境. wrk 本身是用 c 写的. 代码很少. 并且没有使用很多第三方库.  所以编译基本不会遇到什么问题.

    1、下载编译:

    git clone https://github.com/wg/wrk.git

    cd wrk 

    make 

    就 ok了. make 成功以后在目录下有一个 wrk 文件. 就是它了. 你可以把这个文件复制到其他目录, 比如 bin 目录. 或者就这个目录下执行.

    如果编译过程中出现:

    src/wrk.h:11:25: fatal error: openssl/ssl.h: No such file or directory 

     #include <openssl/ssl.h>  是因为系统中没有安装openssl的库.

    sudo apt-get install libssl-dev

    或 sudo yum install  openssl-devel

    2、测试运行:

    我们先来做一个简单的性能测试:

    ./wrk -t10 -c10 -d10s -T10s --latency 'http://127.0.0.1:7001/login/im?appid=1&udata=2'  30秒钟结束以后可以看到如下输出:

    核数的2到4倍足够了. 多了反而因为线程切换过多造成效率降低. 因为 wrk 不是使用每个连接一个线程的模型, 而是通过异步网络 io 提升并发量. 所以网络通信不会阻塞线程执行.

    这也是 wrk 可以用很少的线程模拟大量网路连接的原因. 而现在很多性能工具并没有采用这种方式, 而是采用提高线程数来实现高并发. 所以并发量一旦设的很高, 测试机自身压力就很大. 测试效果反而下降.

    3、脚本扩展:

    我们通过一些测试场景在看看怎么使用 lua 脚本.

    POST + header + body.

    首先创建一个 post.lua 的文件:

    wrk.method = "POST" 

    wrk.body   = "foo=bar&baz=quux" 

    wrk.headers["Content-Type"] = "application/x-www-form-urlencoded"

    就这三行就可以了, 当然 headers 可以加入任意多的内容. 然后执行:

    wrk -t12 -c100 -d30s -T30s --script=post.lua --latency   'http://127.0.0.1:7001/login/im?appid=1&udata=2' 

  • 相关阅读:
    椭圆形 上传图片预览 image preview (未整理版本)
    canvas学习笔记03:简单脉冲效果
    canvas学习笔记02:饼图&柱状图
    canvas学习笔记01:Math.sin & Math.cos
    java jdk 随机数阻塞问题
    家政/保洁 平台设计
    Lock和synchronized
    jvm 中java new 对象顺序
    Java 多线程原理
    java ftp上传下载,下载文件编码设置
  • 原文地址:https://www.cnblogs.com/Kingfans/p/8331435.html
Copyright © 2011-2022 走看看