简单的 http 性能测试工具

wrk.git

一个简单的 http benchmark 工具, 能做很多基本的 http 性能测试.
wrk 的一个很好的特性就是能用很少的线程压出很大的并发量.
原因是它使用了一些操作系统特定的高性能 io 机制, 比如 select, epoll, kqueue 等.

其实它是复用了 redis 的 ae 异步事件驱动框架. 确切的说 ae 事件驱动框架并不是 redis 发明的, 它来至于 Tcl的解释器 jim, 这个小巧高效的框架, 因为被 redis 采用而更多的被大家所熟知。

要用 wrk, 首先要编译 wrk

你的机器上需要已经安装了 git 和基本的c编译环境。wrk 本身是用 c 写的并且没有使用很多第三方库. 所以编译基本不会遇到什么问题(运行不会存在太大难度)。

安装

Mac 安装

brew install wrk

注意: mac 本身连接数有限制,不要做太大的测试

Linux 安装

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

成功以后在目录下有一个 wrk 文件,将这个文件复制到你的软件目录,配置好环境变量即可,这里就不细说了

编译错误

fatalerror: openssl/ssl.h: Nosuchfileor directory

是因为系统中没有安装openssl的库

sudo apt-get install libssl-dev
# or run
sudo yum install openssl-devel

使用

简单的性能测试

wrk -t12 -c100 -d30s http://192.168.31.107

# 输出为
12 threadsand 100 connections
ThreadStats Avg Stdev Max +/- Stde
Latency 538.64ms 368.66ms 1.99s 77.33
Req/Sec 15.62 10.28 80.00 75.35
5073 requestsin 30.09s, 75.28MB rea
Socketerrors: connect 0, read 5, write 0, timeout 6
Requests/sec: 168.5
Transfer/sec: 2.50M
  • -t12 为模拟12个用户线程 -c100模拟100个连接

一般线程数不宜过多. 核数的2到4倍足够,wrk 不是使用每个连接一个线程的模型, 而是通过异步网络 io 提升并发量. 所以网络通信不会阻塞线程执行

结果统计分析

线程统计分析

项目 名称 说明
Avg 平均值 每次测试的平均值
Stdev 标准偏差 结果的离散程度,越高说明越不稳定
Max 最大值 最大的一次结果
+/- Stdev 正负一个标准差占比 结果的离散程度,越大越不稳定

Latency: 可以理解为响应时间
Req/Sec: 每个线程每秒钟的完成的请求数

一般我们来说我们主要关注平均值和最大值.
标准差如果太大说明样本本身离散程度比较高. 有可能系统性能波动很大

读写分析

  • 总共完成请求数
  • 读取数据量
  • 错误统计
5073 requestsin 30.09s, 75.28MB rea
Socketerrors: connect 0, read 5, write 0, timeout 6
Requests/sec: 168.5
Transfer/sec: 2.50M

wrk Post 接口测试

首先需要准备一个lua文件

wrk.method = "POST"
wrk.headers["Content-Type"] = "application/x-www-form-urlencoded"
wrk.body = "youbody&youset"

这个文件内容建议自己填写,保存为 post.lua 文件

当然这个脚本内容可以再次定义,具体查看wrk的git文档

执行脚本

wrk -t4 -c2000 -d60s -T5s --script=post.lua --latency http://192.168.31.107/user/login

这样就是模拟4个线程,2000个连接,在60s内,间隔5s 执行 post.lua 的请求

  • 你可以扩展一下,制作 shell 脚本来批量测试各种接口
如测试post json:
post.lua
-- example HTTP POST script which demonstrates setting the
-- HTTP method, body, and adding a header
wrk.method = "POST"
wrk.body   = "{\"q\":1}"
wrk.headers["Content-Type"] = "application/json"

wrk 压力测试 http benchmark POST接口的更多相关文章

  1. 使用 WRK 压力测试工具对 ASP.NET Core 的接口进行压力测试

    0. 简要介绍 WRK 是一款轻量且易用的 HTTP 压力测试工具,通过该工具我们可以方便地对我们所开发的 WebAPI 项目进行压力测试,并且针对测试的情况返回结果. PS:Wrk 并不能针对测试的 ...

  2. Redis(十九):Redis压力测试工具benchmark

    redis-benchmark使用参数介绍 Redis 自带了一个叫 redis-benchmark 的工具来模拟 N 个客户端同时发出 M 个请求. (类似于 Apache ab 程序).你可以使用 ...

  3. apacheBench对网站进行压力测试

    apacheBench对网站进行压力测试 分类: 学习 2014-02-19 10:35 4154人阅读 评论(1) 收藏 举报 apacheBench压力测试 Apache Benchmark下载 ...

  4. jmeter进行的接口测试和压力测试

    1.接口测试 接口测试的内容我们之前已经讲过,values-key形式和json串传参形式: 包括的协议有http,webservice(soap),jdbc数据库,java请求 2.参数化 定义:把 ...

  5. 使用siege对web接口进行post方式的压力测试

    为了达到压力测试的效果,需要申请一台线上机器,并且安装压力测试的工具siege. 安装新版siege.资料说yum安装的版本2.70对于post方式支持的不好,验证后发现请求可以正常发过去,但是打开d ...

  6. 使用wrk进行压力测试

    最近需要对新的服务进行压力测试.比较了ab和jemeter以及wrk.最终选择wrk来作为压力测试工具,可以把cpu压到100%. 官方源码: https://github.com/wg/wrk 安装 ...

  7. 使用COSBench工具对ceph s3接口进行压力测试--续

    之前写的使用COSBench工具对ceph s3接口进行压力测试是入门,在实际使用是,配置内容各不一样,下面列出 压力脚本是xml格式的,套用UserGuide文档说明,如下 有很多模板的例子,在co ...

  8. [转] CentOS单独安装Apache Benchmark压力测试工具的办法

    Apache安装包中自带的压力测试工具 Apache Benchmark(简称ab) 简单易用,这里就采用 ab作为压力测试工具了. 1.独立安装 ab运行需要依赖apr-util包,安装命令为: 1 ...

  9. 使用Loadrunner进行http接口压力测试

    业务描述: 在业务系统里进行查询操作,查询的结果是通过请求http接口,从系统中处理并将结果以json字符串返回. 本文就讲述使用Loadrunner对此类接口进行压力测试并记录相关的性能指标数据: ...

随机推荐

  1. [转]Node.JS使用Sequelize操作MySQL

    Sequelize官方文档  https://sequelize.readthedocs.io/en/latest/ 本文转自:https://www.jianshu.com/p/797e10fe23 ...

  2. C# 读写App.config配置文件

    一.C#项目中添加App.config配置文件 在控制台程序中,默认会有一个App.config配置文件,如果不小心删除掉,或者其他程序需要配置文件,可以通过添加得到. 添加步骤:右键项目名称,选择“ ...

  3. Win10一周年纪念版,瞧一瞧Linux子系统

    Bash Bash是一个命令处理器,通常运行于文本窗口中,并能执行用户直接输入的命令.Bash还能从文件中读取命令,这样的文件称为脚本.和其他Unix shell 一样,它支持文件名替换(通配符匹配) ...

  4. [android] 在不同的activity之间传递数据

    新建一个activity,继承Activity 清单文件中进行配置,添加<activity/>节点 设置名称 android:name=”.类名” 点 代表的是当前包名,也可以不写 新建一 ...

  5. 6.3 OrderBy 优化

    1. 创建实例 create table tblA( age int, birth TIMESTAMP not null ); insert into tblA(age,birth) values(2 ...

  6. JavaAndroid项目配置文件笔记

    配置文件AndroidManifest.xml如下: <?xml version="1.0" encoding="utf-8"?> <!-- ...

  7. 6;XHTML 超链接

    1.超链接的基本格式 2.超链接的种类 3.相对链接和绝对链接 4.书签的链接 5.基准参考点 6.超链接事件 7.为链接创建键盘快捷键 8.为链接设置制表符次序 超链接也叫 URL 中文翻译为资源定 ...

  8. centos7学习笔记-安装配置apache

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 1.安装apache #yum install httpd 2.配置开机启动 systemctl enable httpd 3. ...

  9. 简析服务端通过geotools导入SHP至PG的方法

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 项目中需要在浏览器端直接上传SHP后服务端进行数据的自动入PG ...

  10. 1.Odoo产品分析系列 – 目录

    Odoo产品分析 (一) – 一切为零 Odoo产品分析 (二) – 商业板块(1) – 销售(1) Odoo产品分析 (二) – 商业板块(1) – 销售(2) Odoo产品分析 (二) – 商业板 ...