http性能测试工具wrk源码学习之开篇
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源码学习之开篇的更多相关文章
- 【Java】【常用类】 Arrays工具类 源码学习
虽然在数组的随笔中有说过,但实际上应该仔细深入一下源码进行分析 源码没有想象中的高大上,代码终究还是写给人看的,可读性大于执行性 最小阵列排序:1 乘 2的13次方 = 8192 学识浅薄,暂时还不 ...
- Java并发包源码学习系列:挂起与唤醒线程LockSupport工具类
目录 LockSupport概述 park与unpark相关方法 中断演示 blocker的作用 测试无blocker 测试带blocker JDK提供的demo 总结 参考阅读 系列传送门: Jav ...
- 性能测试工具 wrk 安装与使用
介绍 今天给大家介绍一款开源的性能测试工具 wrk,简单易用,没有Load Runner那么复杂,他和 apache benchmark(ab)同属于性能测试工具,但是比 ab 功能更加强大,并且可以 ...
- 002_性能测试工具wrk安装与使用
介绍 今天给大家介绍一款开源的性能测试工具 wrk,简单易用,没有Load Runner那么复杂,他和 apache benchmark(ab)同属于性能测试工具,但是比 ab 功能更加强大,并且可以 ...
- HTTP性能测试工具wrk安装及使用
wrk 是一个很简单的 http 性能测试工具,没有Load Runner那么复杂,他和 apache benchmark(ab)同属于HTTP性能测试工具,但是比 ab 功能更加强大,并且可以支持l ...
- MVC系列——MVC源码学习:打造自己的MVC框架(四:了解神奇的视图引擎)
前言:通过之前的三篇介绍,我们基本上完成了从请求发出到路由匹配.再到控制器的激活,再到Action的执行这些个过程.今天还是趁热打铁,将我们的View也来完善下,也让整个系列相对完整,博主不希望烂尾. ...
- MVC系列——MVC源码学习:打造自己的MVC框架(一:核心原理)
前言:最近一段时间在学习MVC源码,说实话,研读源码真是一个痛苦的过程,好多晦涩的语法搞得人晕晕乎乎.这两天算是理解了一小部分,这里先记录下来,也给需要的园友一个参考,奈何博主技术有限,如有理解不妥之 ...
- 【iScroll源码学习04】分离IScroll核心
前言 最近几天我们前前后后基本将iScroll源码学的七七八八了,文章中未涉及的各位就要自己去看了 1. [iScroll源码学习03]iScroll事件机制与滚动条的实现 2. [iScroll源码 ...
- spring源码学习之路---IOC初探(二)
作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 上一章当中我没有提及具体的搭 ...
随机推荐
- 《java.util.concurrent 包源码阅读》23 Fork/Join框架之Fork的冰山一角
上篇文章一直追踪到了ForkJoinWorkerThread的pushTask方法,仍然没有办法解释Fork的原理,那么不妨来看看ForkJoinWorkerThread的run方法: public ...
- python学习笔记 list
1.list中的任一元素可以是任一类型.可以是混合的,如,前两个字符串后面的是数字.都是可以的. 2.可以用-1表示最后一个元素. 3.注意不要越界. 4.len(mates) 用来计算list的大小 ...
- [ 面试没回答上的问题2]IOS上给body绑定click事件的bug
面试被问到ios上的bug,自己提到绑定click事件的bug,但是并没有把问题讲的很清楚,这里再清理一下思路. 这个bug只在IOS上有,包括ihone,ipad,由于ios浏览器都用的safari ...
- zend Framework的MVC模式的搭建
1.首先搭建Apache和MySQL,搭建的Apache中必须有PDO_MYSQL模块,如果没有,可以到官方下载. 1.配置HTTP.CONF (1)进入Apache的conf目录下,打开httpd. ...
- linux磁盘管理系列-LVM的使用
LVM是什么 LVM是Linux操作系统的逻辑卷管理器. 现在有两个Linux版本的LVM,分别是 LVM1,LVM2.LVM1是一种已经被认为稳定了几年的成熟产品,LVM2 是最新最好的LVM版本. ...
- 洛谷银牛派对SPFA
题目描述 One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered 1..N is going to attend the b ...
- MySQL服务找不到了,navicat打不开数据库连接
今天打开Navicat看看连接名,突然发现连接不上了,打开服务发现MySQL服务不见了,所以手动安装了遍MySQL服务. 详细步骤如下: 1.管理员身份打开cmd,切换到MySQL安装目录下的bin目 ...
- Webpack3.0入门指南
前言 本文是基于我厂基友的Webpack学习系列(一)初学者使用教程 这篇文章做构建.可能基友的文章是基于Mac环境,我是windows环境,在学习时遇到了很多坑,询问基友,他让我搞个基于window ...
- python学习之路day2
模块学习: 标准库: os: 第三方库:
- node.js之第一天
一.http模块 //require表示引包,引包就是引用自己的一个特殊功能 var http = require("http"); //创建服务器,参数是一个回调函数,表示如果有 ...