校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > 基于Web應(yīng)用的性能分析及兩種優(yōu)化的案例

基于Web應(yīng)用的性能分析及兩種優(yōu)化的案例

熱門標(biāo)簽:真如外呼系統(tǒng) 電話機器人適合哪些行業(yè) 搜地圖標(biāo)注怎么找標(biāo) 武漢外呼防封系統(tǒng)多少錢 360地圖標(biāo)注t9 中國的地圖標(biāo)注遠(yuǎn)東 400電話杭州辦理 騰訊地圖標(biāo)注美食 荊門智能溝通電話機器人源碼

  一、 基于動態(tài)內(nèi)容為主的網(wǎng)站優(yōu)化案例

  1.網(wǎng)站運行環(huán)境說明

  硬件環(huán)境:1臺IBM x3850服務(wù)器, 單個雙核Xeon 3.0G CPU,2GB內(nèi)存,3塊72GB SCSI磁盤。

  操作系統(tǒng):CentOS5.4。

  網(wǎng)站架構(gòu):Web應(yīng)用是基于LAMP架構(gòu),所有服務(wù)都在一臺服務(wù)器上部署。

  2.性能問題現(xiàn)象及處理措施

  現(xiàn)象描述

  網(wǎng)站在上午10點左右和下午3點左右訪問高峰時,網(wǎng)頁無法打開,重啟服務(wù)后,網(wǎng)站能在一段時間內(nèi)能正常服務(wù),但過一會又變得響應(yīng)緩慢,最后網(wǎng)頁徹底無法打開。

  檢查配置

  首先檢查系統(tǒng)資源狀態(tài),發(fā)現(xiàn)服務(wù)出現(xiàn)故障時系統(tǒng)負(fù)載極高,內(nèi)存基本耗盡,接著檢查Apache配置文件httpd.conf,發(fā)現(xiàn)“MaxClients”選項值被設(shè)置為2000,并且打開了Apache的KeepAlive特性。

  處理措施

  根據(jù)上面的檢查,初步判斷是Apache的”MaxClients“選項配置不當(dāng)引起的,因為系統(tǒng)內(nèi)存僅有2GB大小,而“MaxClients”選項被配置為2000,過多的用戶訪問進(jìn)程耗盡了系統(tǒng)內(nèi)存;然后,修改httpd.conf配置文件的“MaxClients”選項,將此值由2000降到1500;繼續(xù)觀察發(fā)現(xiàn),網(wǎng)站還是頻繁宕機,于是又將“MaxClients”選項值降到1024,觀察一段時間發(fā)現(xiàn),網(wǎng)站服務(wù)宕機時間間隔加長了,不像以前那么頻繁,但是系統(tǒng)負(fù)載還是很高,網(wǎng)頁訪問速度極慢。

  3.第一次分析優(yōu)化

  既然是由系統(tǒng)資源耗盡導(dǎo)致的網(wǎng)站服務(wù)失去響應(yīng),那么就深入分析系統(tǒng)資源的使用情況,通過uptime、vmstat、top、ps等命令的聯(lián)合使用,得出如下結(jié)論:

  結(jié)論描述

  系統(tǒng)平均負(fù)載很高,通過uptime輸出的系統(tǒng)“load average”值都在10以上,而CPU資源也消耗嚴(yán)重,這是造成網(wǎng)站響應(yīng)緩慢或長時間沒有響應(yīng)的主要原因,而導(dǎo)致系統(tǒng)資源消耗過高的主要依據(jù)是用戶進(jìn)程消耗資源嚴(yán)重。

  原因分析

  通過top命令發(fā)現(xiàn),每個Apache子進(jìn)程消耗將近6~8MB左右內(nèi)存,這是不正常的。根據(jù)經(jīng)驗,在正常情況下每個Apache子進(jìn)程消耗的內(nèi)存在1MB左右,結(jié)合Apache輸出日志發(fā)現(xiàn),網(wǎng)站首頁訪問頻率最高,也就是說首頁程序代碼可能存在問題。于是檢查首頁的PHP代碼,發(fā)現(xiàn)首頁的頁面非常大,圖片很多,并且由全動態(tài)的程序組成,這樣每次用戶訪問首頁都要多次查詢數(shù)據(jù)庫,而查詢數(shù)據(jù)庫是個非常耗費CPU資源的過程,并且首頁PHP代碼也沒有相應(yīng)的緩存機制,每個用戶請求都要重新進(jìn)行數(shù)據(jù)庫查詢操作,數(shù)據(jù)庫查詢負(fù)荷有多高可想而知。

  處理措施

  修改首頁PHP代碼,縮減頁面大小,并且對訪問頻繁的操作增加緩存機制,盡量減少程序?qū)?shù)據(jù)庫的訪問。

  4.第二次分析優(yōu)化

  通過前面簡單優(yōu)化,系統(tǒng)服務(wù)宕機現(xiàn)象出現(xiàn)次數(shù)減少很多,但是在訪問高峰時網(wǎng)站偶爾還會無法正常訪問。這次仍然從分析系統(tǒng)資源使用狀況入手,發(fā)現(xiàn)系統(tǒng)內(nèi)存資源消耗過大,并且磁盤I/O有等待問題,于是得出如下結(jié)論:

  原因分析

  內(nèi)存消耗過大,肯定是用戶訪問進(jìn)程數(shù)過多導(dǎo)致的,在沒有優(yōu)化PHP代碼之前,每個Apache子進(jìn)程消耗6~8MB內(nèi)存,如果設(shè)置Apache的最大用戶數(shù)為1024,那么內(nèi)存耗盡是必然的,當(dāng)物理內(nèi)存耗盡時,虛擬內(nèi)存就會啟用,頻繁地使用虛擬內(nèi)存,肯定會出現(xiàn)磁盤I/O等待問題,最終導(dǎo)致CPU資源耗盡。

  處理措施

  通過上面對PHP代碼的優(yōu)化,每個Apache子進(jìn)程消耗的內(nèi)存資源基本維持在1~2MB左右,因此修改Apache配置文件httpd.conf中的”MaxClients”選項值為“600”,同時把Apache配置中的“KeepAlive”特性關(guān)閉,這樣Apache進(jìn)程數(shù)大量減少,基本維持在500~600之間,雖然偶爾也會使用虛擬內(nèi)存,但是Web服務(wù)正常了,服務(wù)宕機問題也很少出現(xiàn)了。

  5.第三次分析優(yōu)化

  經(jīng)過前兩次的優(yōu)化,網(wǎng)站基本運行正常,但是在訪問高峰時偶爾還會出現(xiàn)站點無法訪問得現(xiàn)象,繼續(xù)進(jìn)行問題分析,通過命令查看系統(tǒng)資源,發(fā)現(xiàn)仍是CPU資源耗盡導(dǎo)致的,但是與前兩次又有所不同:

  原因分析

  通過觀察后臺日志,發(fā)現(xiàn)PHP程序有頻繁訪問數(shù)據(jù)庫的操作,大量的SQL語句中有where, order by等子句;同時,數(shù)據(jù)庫查詢過多,大部分都是復(fù)雜查詢,一般都需要遍歷全表,而大量的表沒有建立索引,這樣的程序代碼導(dǎo)致MySQL數(shù)據(jù)庫負(fù)荷過高,而MySQL數(shù)據(jù)庫和Apache部署在同一臺服務(wù)器上,這也是導(dǎo)致服務(wù)器消耗CPU資源過高的原因。

  處理措施

  優(yōu)化程序中的SQL語句,增加where子句上的匹配條件,減少遍歷全部的查詢,同時在where和order by子句的字段上建立索引,并且增加程序緩存機制,通過這次優(yōu)化,網(wǎng)站運行基本處于正常狀態(tài),再也沒有出現(xiàn)宕機的現(xiàn)象。

  6.第四次優(yōu)化分析

  通過前面三次優(yōu)化以后,網(wǎng)站在程序代碼、操作系統(tǒng)、Apache等方面的優(yōu)化空間越來越小,要避免出現(xiàn)服務(wù)氣宕機現(xiàn)象,并且保證網(wǎng)站穩(wěn)定、高效、快速地運行,可以從網(wǎng)站結(jié)構(gòu)上進(jìn)行優(yōu)化,也就是將Web和數(shù)據(jù)庫分離部署,可以增加一臺專用的數(shù)據(jù)庫服務(wù)器,單獨部署MySQL數(shù)據(jù)庫。隨著訪問量的增加,如果前端無法滿足訪問請求,還可以增加多臺Web服務(wù)器,Web服務(wù)器之間進(jìn)行負(fù)載均衡部署,解決前端性能瓶頸;如果在數(shù)據(jù)庫端還存在讀寫壓力,還可以繼續(xù)增加一臺MySQL服務(wù)器,將MySQL進(jìn)行讀寫分離部署,這樣一套高性能、高可靠的網(wǎng)站系統(tǒng)就構(gòu)建起來了。

  二、  基于動態(tài)、靜態(tài)內(nèi)容結(jié)合的網(wǎng)站優(yōu)化案例

  1.網(wǎng)站運行環(huán)境說明

  硬件環(huán)境:兩臺IBM x3850服務(wù)器, 單個雙核Xeon 3.0G CPU,4GB內(nèi)存,3塊72GB SCSI磁盤。

  操作系統(tǒng):CentOS5.4。

  網(wǎng)站架構(gòu):Web應(yīng)用是基于J2EE架構(gòu)的電子商務(wù)應(yīng)用,Web端應(yīng)用服務(wù)器是Tomcat,采用MySQL數(shù)據(jù)庫,Web和數(shù)據(jù)庫獨立部署在兩臺服務(wù)器上。

  2.性能問題現(xiàn)象以及處理措施

  現(xiàn)象描述

  網(wǎng)站訪問高峰時,網(wǎng)頁無法打開,重啟Java服務(wù)后,網(wǎng)站可以正常運行一段時間,但過一會又變得響應(yīng)緩慢,最后網(wǎng)頁徹底無法打開。

  檢查配置

  首先檢查系統(tǒng)資源狀態(tài),發(fā)現(xiàn)服務(wù)出現(xiàn)故障時系統(tǒng)負(fù)載極高,CPU滿負(fù)荷運行,Java進(jìn)程占用了系統(tǒng)99%的CPU資源,但內(nèi)存資源占用不大;接著檢查應(yīng)用服務(wù)器信息,發(fā)現(xiàn)只有一個Tomcat在運行Java程序;接著查看Tomcat配置文件server.xml,發(fā)現(xiàn)server.xml文件中的參數(shù)都是默認(rèn)配置,沒有進(jìn)行任何優(yōu)化。

  處理措施

  server.xml文件的默認(rèn)參數(shù)需要根據(jù)應(yīng)用的特性進(jìn)行適當(dāng)?shù)男薷模缈梢孕薷?ldquo;connectionTimeout“、“maxKeepAliveRequests”、“maxProcessors”等幾個Tmcat配置文件的參數(shù),適當(dāng)加大這幾個參數(shù)值。修改參數(shù)值后,繼續(xù)觀察發(fā)現(xiàn),網(wǎng)站服務(wù)宕機時間間隔加長了,不像以前那么頻繁,但是Java進(jìn)程消耗CPU資源還是很嚴(yán)重,網(wǎng)頁訪問速度極慢。

  3.第一次分析優(yōu)

  既然Java進(jìn)程消耗CPU資源嚴(yán)重,那么需要查看到底是什么導(dǎo)致Java消耗資源嚴(yán)重,通過lsof、netstat命令發(fā)現(xiàn)有大量的Java請求等待信息,然后查看Tomcat日志,發(fā)現(xiàn)大量報錯信息、日志提示和數(shù)據(jù)庫連接超時,最終無法連接到數(shù)據(jù)庫,同時,訪問網(wǎng)站靜態(tài)資源,也無法訪問,于是得出如下結(jié)論:

  原因分析

  Tomcat本身就是一個Java容器,是使用連接/線程模型處理業(yè)務(wù)請求的,主要用于處理Jsp、servlet等動態(tài)應(yīng)用,雖然它也能當(dāng)作HTTP服務(wù)器,但是處理靜態(tài)資源的效率很低,遠(yuǎn)遠(yuǎn)比不上Apache或Nginx。從前面觀察到的現(xiàn)象分析,可以初步判斷是Tomcat無法及時響應(yīng)客戶端的請求,進(jìn)而導(dǎo)致請求隊列越來越多,直到Tomcat徹底崩潰。對于一個正常的訪問請求來說,服務(wù)器接收到請求后,會把請求交給Tomcat去處理,Tomcat接著執(zhí)行編譯、訪問數(shù)據(jù)庫等操作,然后把信息返回給客戶端,客戶端接收到信息后,Tomcat就關(guān)閉這個請求鏈接,這樣一個完整的訪問過程就結(jié)束了。而在高并發(fā)訪問狀態(tài)下,很多的請求瞬間都交給Tomcat處理,這樣Tomcat還沒有完成第一個請求,第二個請求就來了,接著是第三個,等等,這樣越積越多,Tomcat最終失去響應(yīng), Java進(jìn)程就會處于僵死狀態(tài),資源無法釋放,這就是根本原因。

  處理措施

  要優(yōu)化Tomcat性能,需要從結(jié)構(gòu)上進(jìn)行重構(gòu),首先,加入Apache支持,由Apache處理靜態(tài)資源,由Tomcat處理動態(tài)請求,Apache服務(wù)器和Tomcat服務(wù)器之間使用Mod_JK模塊進(jìn)行通信。使用Mod_JK模塊的好處是:它可以定義詳細(xì)的資源處理規(guī)則,根據(jù)動態(tài)、靜態(tài)網(wǎng)站的特點,將靜態(tài)資源文件全部交給Apache處理,而動態(tài)請求通過Mod_JK模塊傳給Tomcat去處理,通過Apache+JK+Tomcat的整合,可以大幅度提高Tomcat應(yīng)用的性能。

  4.第二次分析優(yōu)化

  經(jīng)過前面的優(yōu)化措施,Java資源偶爾會增高,但是一段時間后又會自動降低,這屬于正常狀態(tài),而在高并發(fā)訪問情況下,Java進(jìn)程有時還會出現(xiàn)資源上升無法下降的情況,通過查看Tomcat日志,綜合分析得出如下結(jié)論:要獲得更高、更穩(wěn)定的性能,單一的Tomcat應(yīng)用服務(wù)器有時會無法滿足需求,因此要結(jié)合Mod_JK模塊運行基于Tomcat的負(fù)載均衡系統(tǒng),這樣前端由Apache負(fù)責(zé)用戶請求的調(diào)度,后端又多個Tomcat負(fù)責(zé)動態(tài)應(yīng)用的解析操作,通過將負(fù)載均分配給多個Tomcat服務(wù)器,網(wǎng)站的整體性能會有一個質(zhì)的提升。

  以上就是基于Web應(yīng)用的性能分析及優(yōu)化案例,謝謝閱讀,希望能幫到大家,請繼續(xù)關(guān)注腳本之家,我們會努力分享更多優(yōu)秀的文章。

標(biāo)簽:河源 紅河 迪慶 本溪 江門 聊城 社區(qū)通知 南充

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《基于Web應(yīng)用的性能分析及兩種優(yōu)化的案例》,本文關(guān)鍵詞  基于,Web,應(yīng),用的,性能,分析,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《基于Web應(yīng)用的性能分析及兩種優(yōu)化的案例》相關(guān)的同類信息!
  • 本頁收集關(guān)于基于Web應(yīng)用的性能分析及兩種優(yōu)化的案例的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 衡阳县| 沂源县| 内黄县| 阿拉善左旗| 吉林省| 博白县| 闽侯县| 拉萨市| 奉节县| 萨迦县| 榆社县| 淄博市| 铜陵市| 界首市| 昆明市| 岚皋县| 遵义县| 安乡县| 固镇县| 阿拉善左旗| 清水县| 云阳县| 涿鹿县| 丹寨县| 青浦区| 米易县| 彩票| 鸡泽县| 沅江市| 合水县| 民权县| 泸水县| 尼木县| 琼结县| 梁河县| 昌都县| 呈贡县| 安徽省| 古浪县| 梁山县| 西盟|