J2EE即Java 2企業版,或Java 2 Enterprise Edition,最近幾年已經躍升成為幾個響當當的技術縮寫詞之一。雖然有許多人樂意談論J2EE,但真正能夠勝任J2EE開發的人不是很多,善於開發J2EE應用的人就更少了。J2EE本身是一系列規范的集合,涉及諸多技術,除了包括人們熟知的Servlet、JSP之外,還包括EJB以及支持構建企業應用的整個基礎設施。當前已經有不少實現了J2EE規范的應用服務器產品,其中包括:
◆ BEA WebLogic
◆ IBM WebSphere
◆ Oracle Application Server
◆ JBoss
和其他技術一樣,對於J2EE來說,構建一個健壯的、可伸縮的應用並保證其運行在最佳狀態是一門藝術,優化應用的運行環境也是一門藝術。掌握這門藝術的關鍵在於分析應用及其運行基礎設置,同時還要求深入觀察應用的運行情況。
這個系列的文章主要探討J2EE應用和應用服務器的性能優化問題。本文首先介紹性能優化的基本概念,介紹性能優化對於J2EE應用的意義,闡述J2EE環境中可優化的性能因素。
一、什麼是性能優化
在深入探討J2EE應用以及它下面的應用服務器的優化問題之前,首先我們要搞清楚性能優化到底是什麼,因為在不同的場合性能優化這一概念有著不同的含義。就本文的討論而言,性能優化的目標就是提高下面幾個指標:並發用戶數量,吞吐量,可靠性。
換句話說,我們希望讓應用更快地為更多的用戶提供服務,且保證服務過程不會中斷。
圖1-1:性能優化概況當一個應用的性能未能滿足要求,應當從哪裡入手改善其性能?怎樣的情況下才必須增加硬件設施?如何通過調整幾個應用服務器的參數,獲得比添加硬件設備更好的性能效果?這些問題都是實踐中經常會遇到的問題,但遺憾的是,許多單位在看到應用的性能未能滿足要求時,首先考慮的就是增加硬件設備。增加硬件設備無疑會提高應用的性能表現,但同時也會增加維護費用和硬件體系的復雜程度(更不用說購買硬件設備本身和軟件許可的費用了)。
我們的目標應該是首先從現有的應用和應用服務器搾取最大的性能,在此之後才考慮添加硬件設備。從長遠來看,單純靠添加硬件來提高性能很難獲得好效果:雖然有可能暫時解決眼前的性能危機,但問題仍舊存在,一旦負載增加了又會出現。
■ 並發用戶
在應用服務器上運行應用,評估其在不能響應請求或響應請求所需時間超出許可范圍之前能夠支持的最大並發用戶數量。響應時間可以由服務水准協議(Service Level Agreement,SLA,參見用 SLA 保證 Web 服務)定義,規定一個請求允許消耗的最長時間,超出該時間就被認為不可接受。對應用進行負載測試時很重要的一點是必須確保測試過程反映了應用實際運行過程中出現的典型事務,因為後來的性能優化措施將針對負載測試的結果進行。如果負載測試的事務不夠典型,就不能有效地保證應用能夠象測試環境中表現地那樣為用戶提供服務。
■ 吞吐量
應用和應用服務器的吞吐量可以用每秒完成的事務數量來表示,它從一個側面反映了應用和應用服務器的運行是否正常,指出了服務器的能力。我們的目標是通過應用和應用服務器的調整,來盡可能地提高服務器的吞吐量。
■ 可靠性
除了支持最大數量的並發用戶、可接受的響應時間之外,另一個要求就是盡量減少請求失敗的次數。Web服務器都可能出現故障,最主要的原因是網絡延遲或超時,而我們優化的主要工作就是確保用戶能夠收到他請求的信息。