使用ab和wrk对OSS进行benchmark测试

背景

随着应用OSS的用户越来越多,很多人都想知道,OSS能提供的性能是什么。
这里的性能主要指的是每秒能处理的请求次数(QPS),以及每次请求处理的时延(Latency)。
该如何对OSS进行性能测试,这是一个很广泛的话题。

从用户的角度来看,OSS能提供的性能和请求的压力类型(同步,异步),请求Object的大小,请求的方式(读,写)都是有关系的。
从OSS服务端的角度,对外提供的性能和自身的机器型号(磁盘,网卡,内存,CPU),机器数量,整个集群的网络,负载都有关系。

使用范围

本文讲的是:
使用ab和wrk工具

  • 在单机的环境下
  • 向OSS的Endpoint发出请求
  • 然后在客户端统计请求的QPS,请求的Latency。

工具介绍

ab

ab,全称是apache benchmark,是apache官方推出的工具。
该工具是用来测试Apache服务器的性能的。查看安装的apache的服务器能提供的服务能力,每秒可以处理多少次请求。

获取和安装

http://httpd.apache.org/docs/2.4/install.html
http://httpd.apache.org/docs/2.4/programs/ab.html
在编译apache服务器的时候,会一起编译出来。这里就不赘述了。

使用方法

由于OSS的bucket有权限,而ab不支持OSS的签名,需要将bucket变成public-read-write(公开读写)后进行测试。

假如模拟的是10个并发,请求100KB的Object
ab 执行时常用的配置项
-c 并发数
一次发送的总请求数,默认是一次发一个请求。

-k 保持keep-alive
打开keep-alive,在一个HTTP Session中请求多次。默认是关闭的。

-n 请求数
整个benchmark测试过程中需要发送的请求次数。
默认是一次,默认情况下得到的性能参数没有代表性。

-t 最大时间
benchmark测试最长时间. 默认没有限制。

-u 上传文件
File containing data to PUT. Remember to also set -T.-T content-type

-T 设置上传文件的Content-Type
例如:application/x-www-form-urlencoded. Default is text/plain.

使用示例

  • 测试OSS高并发的读写小文件场景性能
  • 前置条件

    创建了一个public-read-write的bucket,假如叫public。下载了ab测试工具(开源),linux运行环境。oss提供可服务的endpoint,假如叫oss-cn-hangzhou-test.aliyuncs.com,准备5KB的文件,假如叫5KB.txt

  • 测试过程
    1. 模拟小文件(5KB),高并发(50个线程)的写,运行5分钟
      ./ab -c 50 -t 300 -T 'text/plain' -u 5KB.txt http://oss-cn-hangzhou-test.aliyuncs.com/public/5KB.txt
    2. 模拟小文件(5KB),高并发(50个线程)的读,运行5分钟
      ./ab -c 50 -t 300 http://oss-cn-hangzhou-test.aliyuncs.com/public/5KB.txt
  • 预期结果

    测试正常结束 ,Failed requests 为0,Requests per second即表示每秒中客户端能获取的处理能力。这不代表OSS服务端的处理能力。

注意事项

  • 观察测试工具ab所在机器,以及被测试的前端机的CPU,内存,网络等都不超过最高限度的75%。
  • 测试中可能出现端口不足导致的测试失败

需要调整内核参数以支持端口重用
例如:在Linux平台下
1 sudo vim /etc/sysctl.conf
2 添加如下内容
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
kernel.printk = 7 4 1 7
3 运行sudo sysctl –p生效

结果分析

$./ab -c 50 -t 60 -n 300000 -k http://oss-cn-hangzhou-test.aliyuncs.com/public/5KB.txt
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking oss-cn-hangzhou-test.aliyuncs.com (be patient)
Completed 30000 requests
Completed 60000 requests
Completed 90000 requests
Completed 120000 requests
Completed 150000 requests
Completed 180000 requests
Completed 210000 requests
Completed 240000 requests
Finished 250137 requests

Server Software:        AliyunOSS
Server Hostname:        oss-cn-hangzhou-test.aliyuncs.com
Server Port:            80

Document Path:          /public/5KB.txt
Document Length:        5120 bytes

Concurrency Level:      50             并发数
Time taken for tests:   60.000 seconds 测试运行的时间
Complete requests:      250137         在运行期间完成的总请求次数
Failed requests:        0
Write errors:           0
Keep-Alive requests:    248492         keep-alive的请求次数
Total transferred:      1382504896 bytes
HTML transferred:       1280703929 bytes
Requests per second:    4168.94 [#/sec] (mean)   每秒的请求次数
Time per request:       11.993 [ms] (mean)       平均每次请求的时延
Time per request:       0.240 [ms] (mean, across all concurrent requests)
Transfer rate:          22501.67 [Kbytes/sec] received

Connection Times (ms)    请求连接的时间
              min  mean[+/-sd] median   max
Connect:        0    0   0.0      0       1
Processing:     1   12   7.6     12      87
Waiting:        1   12   7.6     12      87
Total:          1   12   7.6     12      87

Percentage of the requests served within a certain time (ms) 请求的半分比及时延
  50%     12
  66%     15
  75%     16
  80%     17
  90%     20
  95%     23
  98%     28
  99%     37
 100%     87 (longest request)

从测试结果,我们可以看到

  • 在50个并发请求的情况下,请求60秒,平均每秒可以处理4168次(也就是说,客户端在这种压力下,看到的QPS为4168)
  • 平均每次请求处理的Latency为12ms左右
  • 由于开启了keep-alive,连接几乎不耗时间
  • 99%的请求都在37ms内完成,最长的请求是87ms

wrk

wrk是一个用来做HTTP benchmark测试的工具。可以产生显著的压力。

获取和安装

https://github.com/wg/wrk

使用方法

wrk可以配合lua脚本来进行put操作

  • 前置条件
    > 创建了一个public-read-write的bucket,假如叫public。下载并安装了wrk,linux运行环境。oss提供可服务的endpoint,假如叫oss-cn-hangzhou-test.aliyuncs.com,准备5KB的文件,假如叫5KB.txt

上传

这里使用lua脚本来做上传的操作,lua脚本put.lua的内容

    counter = 0
    request = function()
       mypath = "5KB.txt";
       local file = io.open(mypath, "r");
       assert(file);
       local body = file:read("*a");      -- 读取所有内容
       file:close();
       wrk.method = "PUT"
       wrk.body = body
       path = "/public/test-" .. mypath .. "-" .. counter
       wrk.headers["X-Counter"] = counter
       counter = counter + 1
       return wrk.format(nil, path)
    end
    done = function(summary, latency, requests)
       io.write("------------------------------\n")
       for _, p in pairs({ 50, 60, 90, 95, 99, 99.999 }) do
          n = latency:percentile(p)
          io.write(string.format("%g%%, %d ms\n", p, n/1000.0))
       end
    end

执行命令:

$./wrk -c 50 -d 60 -t 5 -s put.lua http://oss-cn-hangzhou-test.aliyuncs.com
表示向Endpoint发起PUT请求,请求的内容在put.lua中规定,有5个线程,开启的连接有50个,运行60秒

测试结果:

Running input
-c 50 -d 60 -t 5 -s put.lua http://oss-cn-hangzhou-test.aliyuncs.com
Running 1m test @ http://oss-cn-hangzhou-test.aliyuncs.com, test input http://oss-cn-hangzhou-test.aliyuncs.com
  5 threads and 50 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    16.23ms    9.49ms 159.48ms   96.45%
    Req/Sec   635.38     98.38     0.91k    72.63%
  189072 requests in 1.00m, 48.73MB read
Requests/sec:   3151.10
Transfer/sec:    831.58KB
------------------------------
50%, 14 ms
60%, 15 ms
90%, 20 ms
95%, 23 ms
99%, 64 ms
99.999%, 159 ms

结果分析:
从测试结果,我们可以看到

  • 在5个并发请求的情况下,开启50个连接,请求60秒,平均每秒可以处理3151次(也就是说,客户端在这种压力下,看到的QPS为3151)
  • 平均每次请求处理的Latency为16ms左右
  • 99%的请求都在64ms内完成,最长的请求是159ms

下载

执行命令:

$./wrk -c 50 -d 60 -t 5 http://oss-cn-hangzhou-test.aliyuncs.com/public/5KB.txt
表示向Endpoint发起GET请求,有5个线程,开启的连接有50个,运行60秒
注意这里的5KB.txt是需要存在的。

测试结果:

Running input
-c 50 -d 60 -t 5 http://oss-cn-hangzhou-test.aliyuncs.com/public/5KB.txt
Running 1m test @ http://oss-cn-hangzhou-test.aliyuncs.com/public/5KB.txt, test input http://oss-cn-hangzhou-test.aliyuncs.com/public/5KB.txt
  5 threads and 50 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    12.72ms    5.14ms  62.68ms   80.14%
    Req/Sec   814.86    145.65     1.36k    69.43%
  241990 requests in 1.00m, 1.25GB read
Requests/sec:   4033.14
Transfer/sec:     21.26MB

结果分析:
从测试结果,我们可以看到

  • 在5个并发请求的情况下,开启50个连接,请求60秒,平均每秒可以处理4033次(也就是说,客户端在这种压力下,看到的QPS为4033)
  • 平均每次请求处理的Latency为12ms左右

总结

以上就是用开源的benchmark工具来从客户端的角度来衡量所能获取的QPS以及Latency。
但从客户端看到的性能会受到各种因素的影响,例如请求的方式,本机的资源(CPU,内存,网络),OSS的网络状况,OSS的负载等都会影响客户端看到的性能指标。
需要根据实际情况来查看性能瓶颈是来自于OSS还是来自于本机。

时间: 2024-10-03 12:01:36

使用ab和wrk对OSS进行benchmark测试的相关文章

Java 虚拟机 OpenJ9 和 Hotspot 的 Benchmark 测试

IBM 开源了它开发的 J9 Java 虚拟机 (JVM),并将其贡献给了 Eclipse 基金会,重命名为 Eclipse OpenJ9.J9 是一个高性能可伸缩的 Java 虚拟机,是许多 IBM 企业级软件产品的核心,OpenJ9 可作为 Hotspot 的替代者用于 OpenJDK,比如需要高性能的企业级运行时环境. 那么,这个 Eclipse OpenJ9 Java 虚拟机的性能到底如何?日前,有开发者运行了一些快速的 Benchmark 测试来和 Java 虚拟机 Hotspot 进

配置ab来为Nginx服务器做压力测试的方法_nginx

在运维工作中,压力测试是一项非常重要的工作.比如在一个网站上线之前,能承受多大访问量.在大访问量情况下性能怎样,这些数据指标好坏将会直接影响用户体验. 但是,在压力测试中存在一个共性,那就是压力测试的结果与实际负载结果不会完全相同,就算压力测试工作做的再好,也不能保证100%和线上性能指标相同.面对这些问题,我们只能尽量去想方设法去模拟.所以,压力测试非常有必要,有了这些数据,我们就能对自己做维护的平台做到心中有数. 目前较为常见的网站压力测试工具有webbench.ab(apache benc

利用ab压力工具对服务器进行压力测试

在使用之前,需要先确认是否服务器安装了Apache Http Server,如果没有安装,则需要先安装: $ sudo yum install httpd $ ab -V This is ApacheBench, Version 2.3 <$Revision: 1430300 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Fo

Http压测工具wrk使用指南

用过了很多压测工具,却一直没找到中意的那款.最近试了wrk感觉不错,写下这份使用指南给自己备忘用,如果能帮到你,那也很好. 安装 wrk支持大多数类UNIX系统,不支持windows.需要操作系统支持LuaJIT和OpenSSL,不过不用担心,大多数类Unix系统都支持.安装wrk非常简单,只要从github上下载wrk源码,在项目路径下执行make命令即可. git clone https://github.com/wg/wrk make make之后,会在项目路径下生成可执行文件wrk,随后

Apache AB性能测试工具使用教程_Linux

服务器负载太大而影响程序效率是很常见的,Apache服务器自带有一个叫ab(ApacheBench)的工具,在bin目录下.ab专门用于HTTP Server的benchmark testing,可以同时模拟多个并发请求,使用这个轻巧的工具我们可以对服务器进行负载测试. 今天在公司也用它作一些测试,现在整理了下它的一些东西分享下. 首先我们要得到Apache服务器的目录下bin的路径,我电脑中的路径是D:\wamp\bin\apache\Apache2.2.21\bin,打开cmd,转到这个目录

PostgreSQL 11 preview - pgbench 变量、函数扩展 - 暨pgbench 自定义 benchmark讲解

标签 PostgreSQL , pgbench , 压测 , 变量 , tpc-b , 自定义压测 背景 pgbench是PostgreSQL软件包中的一款benchmark软件,纯C编码,效率高,压测方便. 内置TPC-B benchmark测试,同时支持自定义benchmark. 详细文档见 https://www.postgresql.org/docs/10/static/pgbench.html pgbench 自定义benchmark脚本支持的语法 变量赋值的语法 压测需要生成输入变量

如何实施Benchmark标准测试(之一)---问题的提出及Tpc-C标准

标准|问题 如何实施Benchmark标准测试 ---问题的提出及Tpc-C标准 Last Updated: Monday, 2004-10-18 16:36 Eygle       1.问题的提出 不管你实施怎样的一个系统,你可能都考虑过这样的一系列问题: 我应该采购怎样的设备?我的系统性能如何?我的系统能够承受多少用户?我的系统能够承受多少并发?性能问题会在何时出现?我将在何时升级? 显然,回答这些问题并非那么简单,更多的人是根据经验给出一个经验值,用来评估系统.但是在大系统设计过程中,经验

SQL Server 7.0性能和Benchmark得分

server|性能 疑惑SQL Server 7.0比SQL Server 6.5或比其它企业级数据库系统强在何处?请阅读SQL Server 7.0的工业标准Benchmark得分和创记录的性能指标. </p><p> 一.工业标准 评价硬件和软件的理想方法,是组织机构比较不同的系统,在一定的工作负载下检测其性能,评估发展潜力和估算费用.当然,一般不会有组织机构有足够的时间和资源进行所有的测试,所以他们采用经过精心设计.可信度高的工业标准基准(Benchmark)测试. Micro

apache自带的性能测试工具ab使用教程

网站性能压力测试是服务器网站性能调优过程中必不可缺少的一环.只有让服务器处在高压情况下,才能真正体现出软件.硬件等各种设置不当所暴露出的问题. 性能测试工具目前最常见的有以下几种:ab.http_load.webbench.siege.今天我们专门来介绍ab. ab是apache自带的压力测试工具.ab非常实用,它不仅可以对apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试.比如nginx.tomcat.IIS等. 下面我们开始介绍有关ab命令的使用: 1.ab的原理