效能測試與分析是軟體開發過程中介於架構和調整的一個廣泛並比較不容易理解的領域,更是一項較為複雜的活動。就像下棋遊戲一樣,有效的效能測試和分析只能在一個良好的計畫策略和具備了對不可預測事件的處理能力的條件下順利地完成。本文結合使用經驗和參考文件,對 Tomcat 效能方面的調整做一簡要介紹,並給出測試、分析和調整優化的一些方法。
測量 Web 伺服器的效能是一項讓人感到畏縮的任務。客戶端和伺服器端是在同一台機器上嗎?伺服器在測試時還運行著其他的什麼程式嗎?通訊是透過區域網路、100BaseT、10BaseT 還是使用調製解調器?客戶端是否一直重複請求相同的頁面,還是隨機存取不同的頁面(這影響到伺服器快取的效能)?請求是有規律的還是突發的?是在最終配置環境下運行還是除錯配置環境?請求包含圖片還是只有 HTML?是否有 Servlet/JSP、CGI、SSI 請求?所有這些都將是我們要關心的。
「工欲善其事,必先利其器」,壓力測試只有借助於一些工具才可得以實施。大多數 Web 壓力測試工具的實現原理都是透過重複的大量頁面請求來模擬多使用者對被測系統的並發存取。目前已經存在的效能測試工具林林總總,從單一的開放原始碼免費小工具如 Apache 自帶的 Apache Benchmark、開源的 JMeter 到大而全的商業效能測試軟體如 Mercury 的 LoadRunner 等等。任何工具都有其優缺點,我們可以根據實際情況挑選最合適的工具。
這裡我們所使用的工具要支援 Web 應用服務認證,要支援接收發送 Cookies。Tomcat 支援多種認證方式,比如基本認證、基於表單的認證、相互認證和客戶端認證,而一些工具僅僅支援 HTTP 基本認證。真實地模擬使用者認證是效能測試工具的一個重要部分。
Apache Benchmark 和 http_load 是命令列形式的工具,非常易於使用。Apache Benchmark 可以模擬單獨的 URL 請求並且重複地執行,可以使用不同的命令列參數來控制執行迭代的次數、並發使用者數等等。它的一個特點是可以週期性地列印出處理過程的資訊。
Root$ ab -k -n 1000 -c 127 https://tomcathost:8080/examples/date/date.jsp
This is ApacheBench, Version 2.0.36
Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd
Copyright (c) 1998-2002 The Apache Software Foundation
參數說明:-k 保持連線、-n 1000 總請求數、-c 127 並發使用者數。此工具可周期性輸出處理資訊,適合快速基準測試。