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

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM