前段時間對某個企業應用網站進行了一次優化分析,解決這個網站經常死機和CPU高負載的種種問題,根據我接觸的一些應用和服務器配置,我對這個案例總結了一些優化方案,用來解決網站的高負載和高并發等問題,這里我和大家分享一下這個案例,希望能和大家一起探討一下這種解決方案的優劣。 一、網站當前狀況和性能現狀 系統硬件配置:CPU為兩個Intel Xeon 2.4G,物理內存為2.5G. 系統軟件配置:操作系統為Windows Server 2003標準版,數據庫為SQL Server 2000. 服務器訪問量:工作日:訪問人數 10000,瀏覽量 30000 ,休息日:訪問人數 4000,瀏覽量 10000,每用戶訪問頁面為2.88頁面,平均停留時間為3分鐘。由于存在大型下載文件,服務器流量每天有80G到160G左右。 WEB系統:采用Tomcat服務器,使用Struts和Hibernate. 網站系統:網站有幾套不同的系統,有新聞發布CMS系統、文件下載系統、反饋系統等等,使用基于Java的Struts和Hibernate的MVC架構,動態應用。 服務器CPU目前通常為40%左右,很多情況能增加到80-90%. 二、網站性能分析 通常情況下CPU達到80%說明系統性能存在瓶頸,需要找出系統的瓶頸究竟在哪里。 分析過程是,遠程登錄服務器,打開SQL Server 2000的事件探查器,記錄和分析SQL語句,同時打開任務管理器,查看各個進程占用CPU的狀況。 經過查詢,SQLServer占用較大的CPU,說明系統調用CPU查詢較多,初步可以確認是數據庫引起的系統瓶頸,由于使用Struts和Hibernate應用,調用數據庫頻繁,因此可以采用減少SQL查詢的方式降低對SQLServer的調用,通常情況下有兩種方法:Cache或靜態化。 另外,服務器的Web系統采用的架構存在一些問題,因為存在大型下載文件,占用的流量非常大,而Tomcat本身對于靜態文件的處理性能并不好,也會對系統性能產生負面的影響。 三、網站和服務器優化方案 1、緩存 將頁面靜態化是通常的優化方案,但是對于當前的Tomcat服務器下的Struts和Hibernate未必有效,因為Tomcat對于靜態HTML文件本身支持并不理想,并且新聞內容更新較為頻繁。因此,在現有架構的基礎上,可以使用hibernate的ehcached的動態緩存的方式,在動態應用中減少數據庫負載,提升訪問速度。 使用ehcache對訪問頻率高,對數據庫消耗大的頁面進行動態緩存(時間10分鐘),在緩存的時間范圍內這些頁面直接重緩存中讀取,無需訪問數據庫,提高這些頁面的訪問速度,減小數據庫訪問的壓力。這樣SQL Server數據庫的負載會大為降低。 2、靜態化 對于一般的網站來說,效率最高、消耗最小的就是純靜態化的html頁面,所以我們盡可能使我們的網站上的頁面采用靜態頁面來實現,這個最簡單的方法其實也是最有效的方法。因此,從長遠考慮,需要對當前網站的架構進行一番調整,以適應靜態化頁面的需求。 首先,由于Tomcat對于靜態頁面支持不太好,也不支持URL 重寫,因此需要安裝Apache服務器。 其次,由于Struts對于搜索引擎不友好,因此將其全部轉換為靜態HTML頁面,即可降低對數據庫的查詢次數,也可提高對搜索引擎的友好度。因此需要使用HTML靜態化的方式優化服務器端的WEB程序。 具體實施方案是,將現有Tomcat配置為8080端口,安裝Apache服務器,配置為80端口,在Apache中修改httpd.conf文件,使得Tomcat解析JSP文件,靜態HTML文件、圖片文件、大型下載文件使用性能更好的Apache支持。 修改Apache的。haccess文件,將Struts應用重寫為靜態Html文件形式,修改相關代碼,使得其能自動生成靜態HTML文件。 優化訪問量最多的頁面,首頁index.jsp為目前訪問量最多的頁面,里面的動態代碼刪除,將這個頁面轉化為靜態的html頁面index.html. 3、應用部署 如果資金允許的話,可以將數據庫SQL Server 2000升級為SQLServer 2005,并單獨部署到另外一臺獨立服務器上,文件下載也單獨部署一臺服務器。 由于Tomcat本身的局限性,一個Tomcat的資源無法無限利用服務器的所有資源,并且Tomcat需要響應的請求太多,勢必影響到整體的性能,因此配置多服務器可以使得Web網站的負載大幅降低,從而提高整體的響應能力。 不過這種部署的缺點是需要付出升級軟件、購買服務器、托管帶寬等成本開銷,建議不到萬不得已,可以不用付出額外的資金升級。
|