小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

InnovateDigital-J2EE性能問(wèn)題的分析

 小莊 2009-04-16
J2EE性能問(wèn)題的分析
        www.InnovateDigital.com 整理

      摘 要:診斷復(fù)雜的J2EE應(yīng)用程序中的性能問(wèn)題是一項(xiàng)艱巨任務(wù)。IT部門(mén)人員的責(zé)任是確保應(yīng)用程序具備優(yōu)越的性能且持續(xù)可用。出現(xiàn)性能問(wèn)題時(shí)能夠準(zhǔn)確判斷應(yīng)歸咎于特定應(yīng)用程序組件,還是某個(gè)應(yīng)用程序連接的后臺(tái)或前端系統(tǒng)。本文著重討論J2EE應(yīng)用程序中常見(jiàn)的性能問(wèn)題;分析引起這些性能問(wèn)題的根本原因;提出如何準(zhǔn)確診斷并迅速排除性能問(wèn)題的可行性建議,以供參考。


前言

      如果需要您來(lái)診斷J2EE應(yīng)用程序中的性能問(wèn)題,Java系統(tǒng)的復(fù)雜性?xún)叭粚?wèn)題變?yōu)殡y以診治的疑難雜癥。為了準(zhǔn)確查明問(wèn)題所在,您需要對(duì)系統(tǒng)的故障征兆有一個(gè)全面的了解,還需要做大量的調(diào)研工作,提出適當(dāng)?shù)难a(bǔ)救措施。本文著重討論J2EE應(yīng)用程序中常見(jiàn)的性能問(wèn)題,分析引起這些性能問(wèn)題的根本原因,提出如何準(zhǔn)確診斷并迅速排除性能問(wèn)題的可行性建議,以供參考。

故障征兆

      應(yīng)用程序出現(xiàn)性能問(wèn)題的征兆是什么?您所觀察到的故障征兆誘導(dǎo)你對(duì)所有可能出現(xiàn)問(wèn)題進(jìn)行全面檢索。拿起筆記本開(kāi)始向人們收集數(shù)據(jù)。努力從假定推斷中抽身出來(lái),以確鑿的證據(jù)認(rèn)定系統(tǒng)的實(shí)際行為,查找引起性能問(wèn)題的根本原因。系統(tǒng)中常見(jiàn)的故障征兆列表如下

      ■ 持續(xù)運(yùn)行緩慢。時(shí)常發(fā)現(xiàn)應(yīng)用程序運(yùn)行緩慢。通過(guò)改變環(huán)境因子(如負(fù)載量、數(shù)據(jù)庫(kù)連接數(shù)等)也無(wú)法有效提升整體響應(yīng)時(shí)間。

      ■ 系統(tǒng)性能隨時(shí)間的增加逐漸下降。在負(fù)載穩(wěn)定的情況下,系統(tǒng)運(yùn)行時(shí)間越長(zhǎng)速度越慢??赡苁怯捎诔瞿硞€(gè)閾值范圍,系統(tǒng)運(yùn)行頻繁出錯(cuò)從而導(dǎo)致系統(tǒng)死鎖或崩潰。

      ■ 系統(tǒng)性能隨負(fù)載的增加逐漸下降。隨著用戶(hù)數(shù)目的增多,應(yīng)用程序的運(yùn)行越發(fā)緩慢。若干個(gè)用戶(hù)退出系統(tǒng)后,應(yīng)用程序便能夠恢復(fù)正常運(yùn)行狀態(tài)。

      ■ 間發(fā)性的系統(tǒng)掛起或異常錯(cuò)誤。有時(shí)候可能受負(fù)載或其它因素影響,當(dāng)面不能完全顯示,又或者是追蹤到異常和堆棧的錯(cuò)誤頁(yè),用戶(hù)此時(shí)會(huì)看到系統(tǒng)掛起的情況。系統(tǒng)掛起的次數(shù)可能會(huì)稍有不同,然而即便是經(jīng)過(guò)預(yù)燒(“burn in”)試驗(yàn)也無(wú)法完全消除。

      ■ 可預(yù)見(jiàn)的死鎖。系統(tǒng)掛起或系統(tǒng)出錯(cuò)發(fā)生的頻率隨著時(shí)間的推移明顯增多,直到系統(tǒng)完全死鎖。通常借助自動(dòng)重啟的故障管理模式解決上述問(wèn)題。

      ■ 系統(tǒng)突然出現(xiàn)混亂。系統(tǒng)正常運(yùn)行,且在或多或少的一段時(shí)間內(nèi)(譬如,可以是1小時(shí)也可以是3天)擁有一致優(yōu)越的運(yùn)行性能,卻突然毫無(wú)征兆地出錯(cuò)甚至死鎖。


性能問(wèn)題的診斷為何如此困難

      特定使用模式下應(yīng)用程序的性能優(yōu)劣并無(wú)現(xiàn)成規(guī)則可循。(就嚴(yán)格意義上的實(shí)時(shí)工程而言,借助速率單調(diào)分析等方法的確可以完成這項(xiàng)工作,但已超出本文研究的范疇,在此不做討論)。網(wǎng)絡(luò)中是否存在另一個(gè)系統(tǒng)正在密集使用共享的后臺(tái)服務(wù),必將極大地影響系統(tǒng)的實(shí)際性能。系統(tǒng)性能或許還取決于JDBC驅(qū)動(dòng)程序與數(shù)據(jù)庫(kù)版本是否嚴(yán)格匹配。也可能出現(xiàn)這樣的情況:開(kāi)發(fā)人員三年前編寫(xiě)的代碼,恰巧在這個(gè)時(shí)候出現(xiàn)特定類(lèi)型的異常,而您急需的用以解決問(wèn)題的回饋信息偏偏包含在那些異常當(dāng)中。

      典型業(yè)務(wù)系統(tǒng)的性能呈現(xiàn)整體涌現(xiàn)性(emergent property)特征,是成千上萬(wàn)個(gè)變量(交互式)和決策共同作用的結(jié)果。就如同人的身體,是一個(gè)由眾多聯(lián)鎖的組成部分和過(guò)程構(gòu)成的整體。在文中我們采用統(tǒng)攝性模式以簡(jiǎn)化問(wèn)題。


故障現(xiàn)象

      您所觀察到的“疾病”征兆的根本原因是什么?是普通流感還是肺炎初期?是應(yīng)用程序內(nèi)部潛在的性能問(wèn)題還是JVM外部進(jìn)程出現(xiàn)了問(wèn)題?下表是應(yīng)用程序性能下降的常見(jiàn)原因列表,具體如下

 

      

“疾病” 描述 征兆 原因或解決方法
內(nèi)存泄漏呈線性增長(zhǎng) 各單元(如每個(gè)事務(wù)或每個(gè)用戶(hù)等)的內(nèi)存泄漏,導(dǎo)致內(nèi)存使用率隨時(shí)間或負(fù)載的增加呈線性增長(zhǎng)。系統(tǒng)性能隨時(shí)間或負(fù)載的增加大幅下降,重啟后系統(tǒng)可恢復(fù)正常 系統(tǒng)性能隨時(shí)間的增加逐漸下降, 系統(tǒng)性能隨負(fù)載的增加逐漸下降 雖然有許多外在因素存在(如各單元數(shù)據(jù)的鏈表存儲(chǔ)、尚未回收的緩沖中的回收或增長(zhǎng)操作等),但最為常見(jiàn)的原因還是資源泄漏
內(nèi)存泄漏呈指數(shù)級(jí)增長(zhǎng) 內(nèi)存泄漏呈雙倍增長(zhǎng),導(dǎo)致系統(tǒng)內(nèi)存消耗隨時(shí)間呈指數(shù)曲線變化 系統(tǒng)性能隨時(shí)間的增加逐漸下降,系統(tǒng)性能隨負(fù)載的增加逐漸下降 雖然有許多外在因素存在(如各單元數(shù)據(jù)的鏈表存儲(chǔ)、尚未回收的緩沖中的回收或增長(zhǎng)操作等),但最為常見(jiàn)的原因還是資源泄漏
導(dǎo)致無(wú)限循環(huán)的編碼缺陷 線程在while語(yǔ)句返回值為真的情況下發(fā)生阻塞, 將最終演變成為CPU密集型和等待密集型或螺旋等待變量 可預(yù)見(jiàn)的死鎖 需要進(jìn)行侵入式循環(huán)切除
資源泄漏 JDBC語(yǔ)句、CICS事務(wù)網(wǎng)關(guān)連接等出現(xiàn)資源泄漏,引發(fā)Java橋接層和后臺(tái)系統(tǒng)出現(xiàn)嚴(yán)重性能問(wèn)題 系統(tǒng)性能隨時(shí)間的增加逐漸下降, 可預(yù)見(jiàn)的死鎖, 系統(tǒng)突然出現(xiàn)混亂 通常是由于遺漏了Finally模塊,或者只是沒(méi)有用close函數(shù)關(guān)閉代表外部資源的對(duì)象
外部瓶頸 后臺(tái)或其它外部系統(tǒng)(如用戶(hù)驗(yàn)證)運(yùn)行緩慢,大大影響J2EE應(yīng)用服務(wù)器及應(yīng)用程序的運(yùn)行速度 系統(tǒng)持續(xù)緩慢運(yùn)行, 系統(tǒng)性能隨負(fù)載的增加逐漸下降 向?qū)<遥ò煽康牡谌交蛳到y(tǒng)管理員等)咨詢(xún)特定外部瓶頸問(wèn)題的有效解決方法
外部系統(tǒng)的過(guò)度使用 J2EE應(yīng)用程序發(fā)送的請(qǐng)求過(guò)大過(guò)多,濫用后臺(tái)系統(tǒng)資源 系統(tǒng)持續(xù)緩慢運(yùn)行, 系統(tǒng)性能隨負(fù)載的增加逐漸下降 消除冗余的工作請(qǐng)求,分批處理同類(lèi)工作請(qǐng)求,把大請(qǐng)求細(xì)分為若干個(gè)小請(qǐng)求,調(diào)整工作請(qǐng)求或后臺(tái)系統(tǒng)(例如為公共查詢(xún)的關(guān)鍵字建立索引)等
頻繁調(diào)用CPU密集型組件的編碼缺陷 J2EE領(lǐng)域的通病是:些許編碼缺陷或少量編碼的交互失敗,都會(huì)令CPU掛起,從而將數(shù)據(jù)流量速度降至蝸行 系統(tǒng)持續(xù)緩慢運(yùn)行, 系統(tǒng)性能隨負(fù)載的增加逐漸下降 最好的解決方法是將數(shù)據(jù)存儲(chǔ)在本地緩存中,或者為執(zhí)行算法配備高速緩沖存儲(chǔ)器
橋接層本身存在的問(wèn)題 橋接層(如JDBC驅(qū)動(dòng)、CORBA到遺留系統(tǒng)的連接等)存在執(zhí)行缺陷。需要不斷對(duì)數(shù)據(jù)和請(qǐng)求作編組和取消編組操作,導(dǎo)致該層的數(shù)據(jù)流量速度降至蝸行。這種故障現(xiàn)象在早期階段與外部瓶頸極為相似 系統(tǒng)持續(xù)緩慢運(yùn)行, 系統(tǒng)性能隨負(fù)載的增加逐漸下降 檢查橋接層與外部系統(tǒng)的版本是否兼容。如果可能的話,對(duì)不同橋接供應(yīng)商進(jìn)行評(píng)估。通過(guò)重新規(guī)劃設(shè)計(jì)系統(tǒng)架構(gòu),則可完全旁路橋接層
內(nèi)部資源瓶頸:資源的過(guò)度使用或分配不足 內(nèi)部資源(如線程、放入存儲(chǔ)池的對(duì)象等)匱乏,卻無(wú)法判斷是正常情況下隨負(fù)載增加而引起的資源過(guò)度使用,還是由于資源泄漏引起 系統(tǒng)性能隨負(fù)載的增加逐漸下降, 間發(fā)性的系統(tǒng)掛起或異常錯(cuò)誤 若因資源分配不足引起,則可依照最大預(yù)期負(fù)載值上調(diào)存儲(chǔ)池的最大容量;若因資源過(guò)度使用引起,請(qǐng)參看本表“外部系統(tǒng)的過(guò)度使用”一欄
不斷重試 失敗請(qǐng)求的頻繁重試(某些極端情況下將無(wú)休止重試) 可預(yù)見(jiàn)的死鎖系統(tǒng)突然出現(xiàn)混亂 后臺(tái)系統(tǒng)可能已經(jīng)完全宕機(jī)。監(jiān)控系統(tǒng)可用性對(duì)這樣的狀況有所幫助,也可以只是將多次重復(fù)嘗試的請(qǐng)求從成功的請(qǐng)求中篩選出來(lái)
線程阻塞點(diǎn) 線程退回到無(wú)法完成的同步點(diǎn),造成通信阻塞 系統(tǒng)性能隨負(fù)載的增加逐漸下降, 間發(fā)性的系統(tǒng)掛起或異常錯(cuò)誤, 可預(yù)見(jiàn)的死鎖, 系統(tǒng)突然出現(xiàn)混亂 或許根本沒(méi)有必要進(jìn)行同步(只需對(duì)系統(tǒng)重新設(shè)計(jì)稍加改良),當(dāng)然也可以定制一些外在的鎖定策略(如讀取器或?qū)懭肫鞯淖x/寫(xiě)鎖)
線程的死鎖或活鎖 通常只是“獲取順序”問(wèn)題 系統(tǒng)突然出現(xiàn)混亂 解決方法選項(xiàng)包括主鎖、即定的獲取順序以及銀行家算法
網(wǎng)絡(luò)飽和 等待時(shí)間長(zhǎng)或基本無(wú)法將任何請(qǐng)求打包,導(dǎo)致系統(tǒng)異常停運(yùn)、系統(tǒng)掛起或活鎖等情況的出現(xiàn) 系統(tǒng)持續(xù)緩慢運(yùn)行, 系統(tǒng)性能隨負(fù)載的增加逐漸下降, 間發(fā)性的系統(tǒng)掛起或異常錯(cuò)誤 如此棘手的問(wèn)題正在侵蝕著網(wǎng)絡(luò)系統(tǒng),如果不及時(shí)升級(jí)系統(tǒng)的基礎(chǔ)架構(gòu),提升網(wǎng)絡(luò)及路由器的運(yùn)行速度,將無(wú)法扼制日后類(lèi)似問(wèn)題的出現(xiàn)


      來(lái)自http://wldj./read/43024.htm


(北京鑄銳數(shù)碼科技有限公司 www.InnovateDigital.com)

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多