Http benchmarking 工具 wrk 基本使用

Http benchmarking 工具 wrk 基本使用

Intro

wrk 是一款现代HTTP基准测试工具,能够在单个多核CPU上运行时产生显着负载。它将多线程设计与可扩展事件通知系统(如epoll和kqueue)结合在一起。

官方描述:

wrk is a modern HTTP benchmarking tool capable of generating significant load when run on a single multi-core CPU. It combines a multithreaded design with scalable event notification systems such as epoll and kqueue.

An optional LuaJIT script can perform HTTP request generation, response processing, and custom reporting. Details are available in SCRIPTING and several examples are located in scripts/.

wrk 使用了 epoll,使得可以通过较少的线程来实现较多的连接,而用 ab 测试的时候就会发现很难达到特别高的并发,而 wrk 则利用 i/o 复用来实现较少的线程达到较高的并发。

Install

wrk支持大多数类UNIX系统,不支持windows。需要操作系统支持 LuaJIT 和 OpenSSL,不过不用担心,大多数类Unix系统都支持。安装wrk非常简单,只要从github上下载wrk源码,在项目路径下执行 make 命令即可。

在 win10 bash 上安装参考 :https://www.cnblogs.com/savorboard/p/wrk.html直接在 linux 上安装参考:https://www.cnblogs.com/jiftle/p/7158291.html

不想安装也可以直接使用 docker ,参考 williamyeh/wrk

Use

  • 直接使用安装的 wrk,使用示例如下:

  1. wrk -t 400 -c 4000 --timeout 10s -d 10s --latency http://localhost:12345/api/values

  • 使用 docker

  1. docker run --rm williamyeh/wrk -t 400 -c 4000 --timeout 10s -d 10s --latency http://localhost:12345/api/values

参数详解:

在 bash 中输入 wrk 即可获取到详细的参数说明:

  1. -c, --connections(连接数): total number of HTTP connections to keep open with each thread handling N = connections/threads

  2. -d, --duration(测试持续时间): duration of the test, e.g. 2s, 2m, 2h

  3. -t, --threads(线程): total number of threads to use

  4. -s, --script(脚本): LuaJIT script, see SCRIPTING

  5. -H, --header(头信息): HTTP header to add to request, e.g. "User-Agent: wrk"

  6. --latency(响应信息): print detailed latency statistics

  7. --timeout(超时时间): record a timeout if a response is not received within this amount of time.

来对必应做一个测试

  1. wrk -t8 -c200 -d30s --latency "http://www.bing.com"

输出:

  1. Running 30s test @ http://www.bing.com

  2. 8 threads and 200 connections

  3. Thread Stats Avg Stdev Max +/- Stdev

  4. Latency 46.67ms 215.38ms 1.67s 95.59%

  5. Req/Sec 7.91k 1.15k 10.26k 70.77%

  6. Latency Distribution

  7. 50% 2.93ms

  8. 75% 3.78ms

  9. 90% 4.73ms

  10. 99% 1.35s

  11. 1790465 requests in 30.01s, 684.08MB read

  12. Requests/sec: 59658.29

  13. Transfer/sec: 22.79MB

结果分析:

  1. Running 30s test @ http://www.bing.com (压测时间30s)

  2. 8 threads and 200 connections (共8个测试线程,200个连接)

  3. Thread Stats Avg Stdev Max +/- Stdev

  4. (平均值) (标准差)(最大值)(正负一个标准差所占比例)

  5. Latency 46.67ms 215.38ms 1.67s 95.59%

  6. (延迟)

  7. Req/Sec 7.91k 1.15k 10.26k 70.77%

  8. (处理中的请求数)

  9. Latency Distribution (延迟分布)

  10. 50% 2.93ms

  11. 75% 3.78ms

  12. 90% 4.73ms

  13. 99% 1.35s (99分位的延迟)

  14. 1790465 requests in 30.01s, 684.08MB read (30.01秒内共处理完成了1790465个请求,读取了684.08MB数据)

  15. Requests/sec: 59658.29 (平均每秒处理完成59658.29个请求)

  16. Transfer/sec: 22.79MB (平均每秒读取数据22.79MB)

注:如果 url 不带 & 参数可以不需要加加引号,如:"url",但是如果有多个get参数有 &则需要加上双引号才能请求完整的地址,否则会把 & 后面的参数丢失。

Reference

  • https://hub.docker.com/r/williamyeh/wrk/

  • https://github.com/wg/wrk

  • https://cloud.tencent.com/developer/article/1346649

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/312858.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TCP/IP 体系结构

TCP/IP体系结构又称为TCP/IP协议簇,是Transmission Control Protocol/Internet Protocol的简写,译为传输控制协议/因特网互联协议。 TCP/IP提供点对点的链接机制,将数据应该如何封装、定址、传输、路由以及在目的地如何接收,都加以…

黑客之道-解码Facebook的DevOps之路

内容来源:DevOps案例深度研究第3期 – Facebook DevOps实践研究战队(本文只展示部分PPT及研究成果,更多细节请关注案例分享会,及本公众号。)本案例内容贡献者:张楠(Topic Leader)、高…

IP地址与MAC地址的区别

IP地址是指互联网协议地址(Internet Protocol Address),是IP Address的缩写。IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。 MAC地址又称…

ping命令整个过程详解

转自:http://wanicy.blog.51cto.com/509018/335207/ 如果你想了解ping命令的原理,看了这篇文章,你会从对网络一窍不通,到豁然开朗。 先看拓朴图: 在这里讲ping的两情况:一种是同一网段内,一种…

ping某个域名的详细过程

在前一篇文章中,我们已经对ping命令的整个过程做了一个详解。但是,前一篇文章中所涉及到的两种ping命令使用情况,都是ping的IP,在这篇文章中,我们将要详细讲解ping某个域名的整个过程。 一、ICMP协议 在了解ping命令之…

Magicodes.IE之导入学生数据教程

基础教程之导入学生数据说明本教程主要说明如果使用Magicodes.IE.Excel完成学生数据的Excel导入。要点本教程使用Magicodes.IE.Excel来完成Excel数据导入需要通过创建Dto来完成导入Magicodes.IE.Excel可以根据Dto以及特性设置来自动生成导入的Excel模板,数据验证&am…

IP地址分类详解

一、IP地址简介 IP,即网际协议(Internet Protocol),或称互联网协议,是用于报文交换网络的一种面向数据的协议。 IP是在TCP/IP协议中网络层的主要协议,任务是仅仅根据源主机和目的主机的地址传送数据。为此目…

[ASP.NET Core 3框架揭秘] 文件系统[1]:抽象的“文件系统”

ASP.NET Core应用 具有很多读取文件的场景,比如配置文件、静态Web资源文件(比如CSS、JavaScript和图片文件等)以及MVC应用的View文件,甚至是直接编译到程序集中的内嵌资源文件。这些文件的读取都需要使用到一个IFileProvider对象。…

[原]调试PInvoke导致的内存破坏

缘起 最近项目中遇到一个诡异的问题,程序在升级到.net4.6.1后,执行某个功能时会崩溃,提示访问只读内存区。大概规律如下:debug版不崩溃,release版稳定崩溃。只有x64位的程序崩溃,32位及anycpu编译出来的程序运行不会崩…

被忽略的TraceId,可以用起来了

前言.NetCore日志,相信大家多少都接触过,博客园有关 ① AspNetCore依赖注入第三方日志组件 ②第三方日志组件Nlog,Serilog 应用方法的博文层出不穷。结合程序的部署结构,本文分单体和微服务聊一聊AspNetCore中追踪日志流的方法。TraceIdAsp…

TCP协议详解

一、TCP协议简介 TCP协议,即传输控制协议(Transmission Control Protocol),是一种面向连接的、可靠的、基于字节流的传输层通信协议。在因特网协议族中,TCP层是位于IP层之上,应用层之下的中间层。尽管IP层只…

UDP协议详解

一、UDP协议简介 UDP协议,即用户数据报协议(User Datagram Protocol),是一个简单的面向数据报的传输层协议。UDP协议只在IP数据报服务商增加了很少一点的功能,就是复用和分用,以及差错检测的功能。 二、UDP…

冰雪奇缘,白色世界:四个IT人的四姑娘山双桥沟游记

去年9月初去了川西的稻城亚丁,体会了金色世界秋日童话,还写了一篇游记《从你的全世界路过-一群程序员的稻城亚丁游记》,也是得到了很多朋友和童鞋的点赞。今年11月初趁着周末的两天时间和朋友去了川西的四姑娘山,体会了白色世界冰…

TCP三次握手建立连接

一、三次握手的过程 TCP需要三次握手才能建立连接,整个过程如下图所示: 假设A运行的是TCP客户端进程,而B运行的是TCP服务端进程。最开始的时候两端的TCP进程都处于ClOSED(关闭)状态。 这时候,A主动打开连接…

[原]排错实战——通过对比分析sysinternals事件修复程序功能异常

缘起 最近,我们程序的某个功能在一台机器上不正常,但是在另外一台机器上却是正常的。代码是同一份,vs版本也一样(打的补丁也一样)。编译出来的程序在两台电脑上运行的结果就是不一样。惊不惊喜,意不意外&am…

[原]windbg调试系列——崩溃在ComFriendlyWaitMtaThreadProc

前言 这是几年前在项目中遇到的一个崩溃问题,崩溃在了ComFriendlyWaitMtaThreadProc()里。没有源码,耗费了我很大精力,最终通过反汇编并结合原代码才最终搞清楚了事情的来龙去脉。本文的分析是基于真实项目进行的,中间略去了很多反…

TCP四次握手释放连接

一、四次握手的过程 TCP需要三次握手才能建立连接,整个过程如下图所示: 假设A运行的是TCP客户端进程,而B运行的是TCP服务端进程。最开始的时候两端的TCP进程都处于ESTABLISHED(已建立连接)状态。 这时候,A…

开源WPF控件库MaterialDesignInXAML推荐

今天介绍一个开源的C# WPF开源控件库,非常漂亮,重点是开源哦WPF做桌面开发是很有优势的,除了微软自带的控件外,还有很多第三方的控件库,比如收费的Dev Express For WPF、Telerik For WPF等,及Github上开源免…

TCP连续ARQ协议和滑动窗口协议

TCP协议通过使用连续ARQ协议和滑动窗口协议,来保证数据传输的正确性,从而提供可靠的传输。 一、ARQ协议 ARQ协议,即自动重传请求(Automatic Repeat-reQuest),是OSI模型中数据链路层和传输层的错误纠正协议之…

ASP.NET Core 集成测试中模拟登录用户的一种姿势

不管哪种用户验证方式,最终都是在验证成功后设置 HttpContext.User ,后续处理环节通过 HttpContext.User 获取用户信息。如果能直接修改 HttpContext.User ,就能达到模拟登录的目的,而 ASP.NET Core 的中间件(middlewa…