2013年2月27日

開發者的 10 個網站壓力測試工具 ab, siege, curl-loader, httperf, http_load, tsung, funkload, openload, jmeter, blitz.io

網站上線前,壓力測試是不可少的步驟,這篇文章收錄十個開發者可以參考的壓力測試工具(Load/Stress Test Tools)。

一、ab

Apache HTTP server benchmarking tool

由 Apache 開發的測試工具,除了同廠牌的 Apache HTTP Server 之外,也能測試它牌的網站伺服器效能。

優點是此工具程式的效能極佳,可以輕易測試 1,000+ concurrent users 的測試,報表也算相當清楚。

輸出範例:

ab -n 10240 -c 512 http://localhost/

Concurrency Level:      512
Time taken for tests:   5.658 seconds
Complete requests:      10240
Failed requests:        0
Write errors:           0
Non-2xx responses:      10240
Total transferred:      4874240 bytes
HTML transferred:       2795520 bytes
Requests per second:    1809.94 [#/sec] (mean)
Time per request:       282.883 [ms] (mean)
Time per request:       0.553 [ms] (mean, across all concurrent requests)
Transfer rate:          841.34 [Kbytes/sec] received

常見問題:

Q: socket: Too many open files (24)

需要調整系統的 Open Files Limit 數值。

ulimit -n 8192

Q: apr_socket_recv: Connection reset by peer (104)

調整 Apache2 httpd.conf 的數值。

MaxClients          512
ServerLimit         512

二、siege

Siege is an http load testing and benchmarking utility.

http://www.joedog.org/siege-home/

三、curl-loader

使用 C 語言的 libcurl 函式庫為基礎開發的壓力測試工具,有優異的執行效能,如果硬體環境允許(處理器夠快、記憶體夠大),要模擬上萬個同時連線數量也做得到。

優點是方便用來模擬使用者登入、操作與登出的行為。

http://curl-loader.sourceforge.net/

四、httperf

由 HP 開發的壓力測試工具。

http://www.hpl.hp.com/research/linux/httperf/

可參考這篇教學

五、http_load

體積很小的壓力測試工具。

http://acme.com/software/http_load/

六、tsung

以 Erlang 語言開發,功能強大的分散式壓力測試工具。支援 HTTP/SSL、WebDAV、SOAP(Web Services)、資料庫(PostgreSQL, MySQL, LDAP)與即時通訊 XMPP/Jabber 等協定,並使用 XML 格式的設定。

http://tsung.erlang-projects.org/

Funkload Test Report
七、funkload

適合 Python 開發者的工具,壓力測試使用 PyUnit 單元測試框架;支援將測試結果利用 gnuplot 繪製成統計圖表。

http://funkload.nuxeo.org/

八、openload

開源的 OpenWebLoad 在 Linux 下執行網站壓力測試,算是簡單易用的工具,但是功能也相對較少。

http://openwebload.sourceforge.net/

圖片來源:Introduction to JMeter
九、jmeter

Apache 開發的 Java-based 壓力測試工具,功能十分強大且提供 GUI 設定介面。可以支援分散式的壓力測試,可事先設計好測試步驟(模擬多種使用者行為),並可將結果產生報表或繪製圖表。

http://jmeter.apache.org/

十、blitz.io

簡單好用的「網站壓力測試雲端服務」,註冊後可以獲得免費測試的點數(credits);如果只是進行小型的初步測試,並不需要費用或點數;進行 250+ concurrent users 以上的測試時,就需要扣取點數。

通過本網誌的介紹,已經邀請近百位開發者試用。

Blitz.io 預設使用的測試伺服器,位於北美的機房,所以測試架設於亞洲地區的網站,很容易出現 timeout 的問題(只要 response 時間超過 1000ms 就會 timeout)。所以可以將測試伺服器的地點指定「日本」(--region japan),就可以減少 timeout 頻繁的問題。

-p 0-250:10 --region japan http://company.coooom/

Blitz.io 可以說是最容易使用的壓力測試工具,只要以下步驟:
  1. 註冊成會員並登入(使用 FB 帳號)
  2. 填入想要測試的網址
  3. 依照指示在網站增加 .txt 文件檔(驗證網站是你擁有的)
  4. 套用預設的參數進行測試
  5. 調整測試參數取得需要的測試結果

Blitz.io 的測試結果是漂亮的圖形化報表,它也會針對測試結果給予一些分析。由於超過 1000ms 就會被列入 timeout,這個測試結果其實比較「嚴苛」,因為在上線人數較多時,網站延遲 2-3 seconds 回應,應該也算在合理的堪用範圍內。


使用 Blitz.io 的優點是,它是真實從遠方的測試主機進行壓力測試,所以測試結果也包含網路頻寬等因素。如果想要自行建立同樣的測試環境,就需要向 Amazon 租用 EC2 雲端虛擬機器,才能有充足的頻寬和運算資源來進行大量(例如 5,000+)的測試。比起自行建立分散式的測試架構,付點錢給 Blitz.io 是比較簡單的辦法。

免費獲取 Blitz.io 點數的方式,就是邀請其他人加入,所以建議可以早點參加,隨著它的發展愈久功能就會愈多。

立即免費註冊申請:http://blitz.io/gb98nG9v1ZRaN (邀請連結)

延伸閱讀

沒有留言:

張貼留言

lyhcode by lyhcode
歡迎轉載,請務必註明出處!