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