1. 程式人生 > >http效能測試工具wrk原始碼學習之開篇

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。通過事件驅動模型是的在相同配置的伺服器能接受更多的併發請求,實現可伸縮的伺服器。

  接下來需要深入學習這個地方。