http性能测试工具wrk源码学习开始

2023-10-08 01:41

1.前言

  最近工作中需要测试nginx反向代理的性能,于是找了一些http测试工具,比如经典的Apache ab、siege、wrk。 wrk采用多线程事件驱动方式,支持Lua脚本扩展。关于wrk的介绍请参考:https://m.genealogy-computer-tips.com/wg/wrk。在测试http的性能时,主要关注的是QPS(每秒处理的请求数)。 QPS越高,网站的性能越好。测试此参数需要可以生成多个连接的工具。涉及到一些网络编程的知识,如何使用connect同时建立多个连接,如何控制connect超时,如何判断fd是否可读或可写。 Linux 网络套接字默认是阻塞的。使用阻塞套接字很难实现大量请求。您需要使用非阻塞,快速创建连接,并轮询连接状态以报告网络事件。

  我对这些地方不太了解。如果有机会分析一下wrk的源码,如何发送大量并发连接,了解常见的网络编程框架。

2。 wrk基本介绍

  wrk 支持多线程。每个线程都是独立的。该线程使用经典的事件驱动模型来创建和处理连接。 Wrk支持参数配置。主要参数如下:


wrk 的用法如下:

3。 wrk使用技术介绍

  wrk是一个典型的Linux客户端网络程序,可以创建和处理大量并发连接。它采用了多线程、网络编程、http协议解析、SSL协议、Lua脚本引擎等技术。wrk 使用 redis 事件驱动库。事件驱动模型(一般由三部分组成:事件收集器事件发送器事件处理器单元组成),可以参考:https: //m.genealogy-computer-tips.com/jcouyang/9914091

  事件驱动模型旨在解决传统服务器的需求与网络工作负载之间的不匹配,实现服务器的高度可扩展性,并减少内存开销。事件驱动模型改变了您连接到服务器的方式。所有连接都由事件循环管理,每个连接都会触发一个在事件循环进程中运行的事件,而不是为每个连接生成一个新的操作系统线程并为其分配一些伴随的内存。因此,不需要担心死锁,阻塞资源不会被直接调用,而是会以异步的方式实现非阻塞I/O。通过事件驱动模型,相同配置的服务器可以接受更多的并发请求,实现服务器的可扩展性。

  接下来,我们要深入研究一下这个地方。