1、前言

  最近工作需要测试nginx反向代理的性能,于是找了一些http测试工具,例如经典的Apache的ab、siege、wrk。wrk使用多线程事件驱动方式,支持lua脚本扩展。关于wrk介绍可以参考:https://github.com/wg/wrk。测试http的性能,主要关注的是QPS(每秒处理的请求数目),QPS越高说明web站点的性能越好。测试这个参数,就需要工具能够发生多个连接。涉及到网络编程的一些知识,如何同时使用connect建立多个连接,如何控制connect超时,如何判断fd可读还是可写。linux网络套接字默认都是阻塞的,使用阻塞的套接字很难实现大量的请求,需要使用非阻塞,快速创建连接,轮询连接的状态来出来网络事件。

  自己对这些地方不求甚解,如有借此机会分析一下wrk的源码,如何发送大量的并发连接,学习一下常见的网络编程框架。

2、wrk的基本介绍

  wrk支持多线程,每个线程之间是独立的,线程中使用经典的事件驱动模型来创建连接、处理连接,wrk支持参数配置,主要是参数如下:

wrk使用如下:

3、wrk使用技术介绍

  wrk是一个典型的linux客户端网络程序,能够创建和处理大量的并发连接,使用的技术有多线程,网络编程、http协议解析、ssl协议,lua脚本引擎。wrk使用了redis的事件驱动库,关于事件驱动模型(一般是由事件收集器事件发送器事件处理器三部分组成基本单元组成),可以参考:https://gist.github.com/jcouyang/9914091

  事件驱动模型是为了解决传统服务器与网络工作负载的需求的不匹配,实现高度可伸缩服务器,并降低内存开销。事情驱动模型更改了连接到服务器的方式。所有的连接都由事件循环管理,每个连接触发一个在事件循环进程中运行的事件,而不是为每个连接生成一个新的 OS 线程,并为其分配一些配套内存。因此不用担心出现死锁,而且不会直接调用阻塞资源,而采用异步的方式来实现非阻塞式I/O。通过事件驱动模型是的在相同配置的服务器能接受更多的并发请求,实现可伸缩的服务器。

  接下来需要深入学习这个地方。

http性能测试工具wrk源码学习之开篇的更多相关文章

  1. 【Java】【常用类】 Arrays工具类 源码学习

    虽然在数组的随笔中有说过,但实际上应该仔细深入一下源码进行分析 源码没有想象中的高大上,代码终究还是写给人看的,可读性大于执行性 最小阵列排序:1 乘 2的13次方 =  8192 学识浅薄,暂时还不 ...

  2. Java并发包源码学习系列:挂起与唤醒线程LockSupport工具类

    目录 LockSupport概述 park与unpark相关方法 中断演示 blocker的作用 测试无blocker 测试带blocker JDK提供的demo 总结 参考阅读 系列传送门: Jav ...

  3. 性能测试工具 wrk 安装与使用

    介绍 今天给大家介绍一款开源的性能测试工具 wrk,简单易用,没有Load Runner那么复杂,他和 apache benchmark(ab)同属于性能测试工具,但是比 ab 功能更加强大,并且可以 ...

  4. 002_性能测试工具wrk安装与使用

    介绍 今天给大家介绍一款开源的性能测试工具 wrk,简单易用,没有Load Runner那么复杂,他和 apache benchmark(ab)同属于性能测试工具,但是比 ab 功能更加强大,并且可以 ...

  5. HTTP性能测试工具wrk安装及使用

    wrk 是一个很简单的 http 性能测试工具,没有Load Runner那么复杂,他和 apache benchmark(ab)同属于HTTP性能测试工具,但是比 ab 功能更加强大,并且可以支持l ...

  6. MVC系列——MVC源码学习:打造自己的MVC框架(四:了解神奇的视图引擎)

    前言:通过之前的三篇介绍,我们基本上完成了从请求发出到路由匹配.再到控制器的激活,再到Action的执行这些个过程.今天还是趁热打铁,将我们的View也来完善下,也让整个系列相对完整,博主不希望烂尾. ...

  7. MVC系列——MVC源码学习:打造自己的MVC框架(一:核心原理)

    前言:最近一段时间在学习MVC源码,说实话,研读源码真是一个痛苦的过程,好多晦涩的语法搞得人晕晕乎乎.这两天算是理解了一小部分,这里先记录下来,也给需要的园友一个参考,奈何博主技术有限,如有理解不妥之 ...

  8. 【iScroll源码学习04】分离IScroll核心

    前言 最近几天我们前前后后基本将iScroll源码学的七七八八了,文章中未涉及的各位就要自己去看了 1. [iScroll源码学习03]iScroll事件机制与滚动条的实现 2. [iScroll源码 ...

  9. spring源码学习之路---IOC初探(二)

    作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 上一章当中我没有提及具体的搭 ...

随机推荐

  1. 关于事件mouseover ,mouseout ,mouseenter,mouseleave的区别

    轮播中大多会选择mouseover和mouseout  这个时候是没有任何问题的 但当遇到有css3动画的时候,会发现移入移出过快 动画还没加载完成就需要执行下一个动画,完了动画样式就错乱了. 这时候 ...

  2. css实现六边形图片(最简单易懂方法实现高逼格图片展示)

    不说别的,先上效果: 用简单的div配合伪元素,即可‘画出’这幅六边形图片,原理是三个相同宽高的div,通过定位旋转拼合成一个六边形,再利用背景图层叠,形成视觉上的一张整图.下面咱们一步一步来实现. ...

  3. 常用接口简析2---IComparable和IComparer接口的简析

    常用接口的解析(链接) 1.IEnumerable深入解析 2.IEnumerable.IEnumerator接口解析 3.IList.IList接口解析 默认情况下,对象的Equals(object ...

  4. 新一代 CI 持续集成工具 flow.ci 正式开源

    很高兴地宣布 flow.ci 在 Apache-2.0 协议下正式开源了.flow.ci 是国内首套开源持续集成(CI) 解决方案,帮助企业团队实现开发流程(build-test-deploy)自动化 ...

  5. python使用rsa库做公钥解密(网上别处找不到)

    使用RSA公钥解密,用openssl命令就是openssl rsautl -verify -in cipher_text -inkey public.pem -pubin -out clear_tex ...

  6. [菜鸟弄nginx]nginx ---- 同一个server下根据host 配置不同的error_page页

    有一个需求: 两个域名指向同一个nignx,不同的域名404跳转页面不同.如www.y.com跳到www.y.com/error.html ,www.j.com跳到www.j.com/errorxxx ...

  7. UWP ListView下模板宽度问题

    在ListView中模板的宽度默认不会根据listView的宽度改变为改变,这需要更改一下设置,重点在于设置HorizontalContentAlignment的拉伸模式.注意是HorizontalC ...

  8. linux下yum安装redis以及使用

    1.yum install redis      --查看是否有redis   yum 源 2.yum install epel-release    --下载fedora的epel仓库 3. yum ...

  9. 【luogu P2002】消息扩散

    https://www.luogu.org/problem/show?pid=2002 SCC缩点的模板题,缩点后统计入度为0的点的数量就完了. #include <iostream> # ...

  10. Django1.10+Mysql 5.7存储emoji表情,报Incorrect string value: '\\xF0\\x9F\\x90\\xA8' for column 'signature' at row 1的解决方法

    问题: 在做webapp项目的时候,用户提交emoji数据,控制台报错:Incorrect string value: '\\xF0\\x9F\\x90\\xA8' for column 'signa ...