軟件老化現(xiàn)象是影響軟件可靠性的重要因素,長期運行的軟件系統(tǒng)存在軟件老化現(xiàn)象,這將影響整個業(yè)務系統(tǒng)的正常運行,給企事業(yè)單位帶來無可估量的經(jīng)濟損失。軟件老化出現(xiàn)的主要原因是操作系統(tǒng)資源消耗殆盡,導致應用系統(tǒng)的性能下降甚至崩潰或宕機。文中監(jiān)測J2EE 應用服務器系統(tǒng)資源的使用情況,考慮外界的負載變化,檢測系統(tǒng)中軟件老化現(xiàn)象,分析系統(tǒng)資源消耗何時達到臨界值,從而幫助軟件工程人員及時采取預維護手段,預防運行時系中重大故障的發(fā)生。
目錄
1? 引 言
2? J2EE 應用服務器老化測試和分析
2.1? 實驗環(huán)境
2.2? J2EE 應用服務器的老化測試
3? 結(jié)束語
1? 引 言
大型軟件系統(tǒng)在持續(xù)平穩(wěn)運行一段時間之后,系統(tǒng)資源大量消耗,服務性能和質(zhì)量下降甚至掛起或宕機,稱為軟件老化現(xiàn)象。軟件老化可能造成安全關(guān)鍵系統(tǒng)的重大損失,甚至人員傷亡。引起軟件老化的原因有內(nèi)存泄漏、各種類型的邏輯錯誤、致命的安全缺陷、死鎖、狀態(tài)沖突等。
目前,很多計算系統(tǒng)中已經(jīng)檢測到軟件老化現(xiàn)象。文件系統(tǒng)中存在軟件老化現(xiàn)象,發(fā)現(xiàn)存儲空間碎片較多的文件系統(tǒng)存取吞吐量較正常情況下降低 40%。文獻中,第一次提出了基于測量方法估測軟件老化情況,首先監(jiān)測導致系統(tǒng)低效或宕機的資源,如內(nèi)存使用、交換區(qū)使用、CPU 占用率、空閑通信通道等,然后用統(tǒng)計學模型估算和驗證軟件老化,根據(jù)不同的策略決定是否及何時進行軟件維護。文獻中,采用統(tǒng)計模式識別方法,檢測在線事務處理服務器系統(tǒng)中的軟件老化現(xiàn)象。文中,以響應時間和響應率為系統(tǒng)性能的衡量依據(jù),考慮負載變化因素,提出 Web 服務器系統(tǒng)中軟件老化的檢測方法。文獻中,通過收集 Apache Web 服務器中對換區(qū)數(shù)據(jù)、內(nèi)存使用量以及響應時間等信息,利用非參數(shù)統(tǒng)計學方法進行老化預測。通過收集 Web 服務器中的資源使用參數(shù),發(fā)現(xiàn)系統(tǒng)性能逐步下降,然后計算系統(tǒng)平均負載時間序列的最大李亞普諾夫指數(shù),證明系統(tǒng)的老化現(xiàn)象具有混沌性。針對 SunHotSpot Java 虛擬機系統(tǒng),考察系統(tǒng)負載對老化的影響以及系統(tǒng)內(nèi)存資源和吞吐量的變化,采用統(tǒng)計分析的方法評估系統(tǒng)的老化趨勢。一種基于AOP(Aspect - Oriented Programming)技術(shù)的系統(tǒng)性能監(jiān)測機制,通過監(jiān)測服務器系統(tǒng)中每個組件的資源使用情況,從而分析判定引起軟件老化的組件。文獻分析并研究云計算系統(tǒng)中存在軟件老化現(xiàn)象的影響因素,通過監(jiān)測系統(tǒng)虛擬內(nèi)存和物理內(nèi)存的使用情況,發(fā)現(xiàn)系統(tǒng)內(nèi)存資源逐漸消耗、CPU 占有量逐步增加,并且系統(tǒng)響應時間隨之增長。此外,常用軟件如Netscape 和 XRN 中也存在軟件老化現(xiàn)象。
2 J2EE 架構(gòu)的應用服務器系統(tǒng)
應用服務器是中間件最大的一個分支,其基于組件的中間層集成框架,為組件的運行提供運行時環(huán)境、基礎服務和管理等功能。應用服務器位于企業(yè)應用與操作系統(tǒng)之間,屏蔽底層操作系統(tǒng)、網(wǎng)絡以及數(shù)據(jù)庫的異構(gòu)性和復雜性,通過組件容器方式提供應用部署、運行平臺。圖 1 是一個基于 J2EE 平臺的應用服務器結(jié)構(gòu)示意圖??蛻舳讼驊梅掌鞫颂峤环照埱?,負載分配器根據(jù)服務請求的類型分配到合適的 HTTP 服務器上,然后將服務請求轉(zhuǎn)交給應用服務器上,該應用服務器查詢數(shù)據(jù)庫,分析處理服務請求后將結(jié)果返回給客戶端。J2EE 架構(gòu)的應用服務器建立在 JVM(Java虛擬機)之上,JVM 的內(nèi)存泄露是導致應用服務器老化的一個重要原因,因此需要對 JVM 的內(nèi)存管理與內(nèi)存泄漏進行分析。
JVM 內(nèi)存區(qū)域,也叫運行時數(shù)據(jù)區(qū),分為方法區(qū)、堆、棧、寄存器、本地碼棧,在 JVM 運行程序時,存儲字節(jié)碼、對象、參數(shù)、返回值局部變量以及中間結(jié)果等數(shù)據(jù)。內(nèi)存堆用來存放 Java 程序運行時創(chuàng)建的類實例或數(shù)組。每個虛擬機實例中只存在一個堆空間。JVM可以為新對象分配內(nèi)存,但釋放內(nèi)存的任務由垃圾回收機制完成。垃圾回收機制回收不再被引用的無用對象,即當一個對象不再被引用的時候,內(nèi)存回收它占用的空間,以便騰出空間被后來的新對象使用。但是有些可達的無用對象也可能成為不能回收的垃圾對象,如圖 2 所示,垃圾回收機制這種潛在的缺陷造成內(nèi)存泄漏的出現(xiàn)。
內(nèi)存泄漏問題如果不加解決,隨著時間的積累,造成 JVM 的內(nèi)存使用量的持續(xù)增加,當 JVM 內(nèi)存使用達到其最大堆棧大小時,JVM 自動的垃圾回收機制會進行垃圾收集。但每次執(zhí)行垃圾收集后,無用對象所占的內(nèi)存釋放的百分比相對較小,最終會導致 JVM 連續(xù)地進行垃圾回收,占用大量的 CPU 時間,即 CPU 使用率持續(xù)增加。而系統(tǒng)資源是有限的,JVM 內(nèi)存和 CPU使用率持續(xù)增加,最終將導致系統(tǒng)低效或宕機等老化現(xiàn)象。因此,需要專門的工具來實現(xiàn) JVM 內(nèi)存監(jiān)測,提取內(nèi)存相關(guān)信息,程序開發(fā)者能比較容易地判斷程序是否有內(nèi)存泄漏及其產(chǎn)生的原由,從而更好地進行軟件老化現(xiàn)象的分析。
2? J2EE 應用服務器老化測試和分析
2.1? 實驗環(huán)境
測試的實驗環(huán)境包括 J2EE 應用服務器和數(shù)據(jù)庫服務器,運行在同一個局域網(wǎng)內(nèi),通過 100 Mbps 局域網(wǎng)連接,每個機器的配置為 P4 2. 4 G Intel CPU,運行環(huán)境采用 Sun JDK Hotspot 1. 4. 1_02 - b06。測試時首先在 IBM 的應用服務器 Websphere Application Server5. 1 上部署測試用例 Petstore 1. 3. 1 - 02,同時模擬多用戶請求的應用客戶端遠程調(diào)用 EJB 模塊中業(yè)務邏輯方法,業(yè)務邏輯方法包括了對數(shù)據(jù)庫服務器中的數(shù)據(jù)的增加、刪除、更新等操作,數(shù)據(jù)庫系統(tǒng)是 IBM 的CloudScape4. 0??蛻舳素撦d發(fā)生器開始發(fā)送 SOAP/HTTP 服務請求時,在客戶端實時地記錄響應時間等系統(tǒng)性能參數(shù)信息,同時激活服務器端 Tivoli 性能查看器,記錄應用服務器動態(tài)參數(shù),基本的調(diào)用過程如圖3 所示。負載發(fā)生器盡量模擬用戶真實情況,采用一個星期為一個周期的形式,區(qū)分實際情況工作日和休息日的各個時段負載密度不同,模擬客戶在某個小時間段內(nèi)服從泊松分布,產(chǎn)生泊松序列的種子可自己設定。
數(shù)據(jù)采集工具使用 WAS 自帶的 Tivoli 性能查看器(Tivoli Performance Viewer),它可以監(jiān)控系統(tǒng)資源的使用情況,也可以從 WAS 內(nèi)部獲取 J2EE 架構(gòu)的服務器中相關(guān)參數(shù)。采集的數(shù)據(jù)來自四個模塊:JVM 運行時模塊,提取 JVM 內(nèi)存的總大小和使用內(nèi)存的大小;系統(tǒng)數(shù)據(jù)模塊,提取 CPU 使用率和系統(tǒng)可用內(nèi)存;Web 線程模塊,提取創(chuàng)建的線程總數(shù)、破壞的線程總數(shù)、并發(fā)活動的線程數(shù)及線程池的大小;事務管理器,提取開始的全局事務、活動的全局事務、全局事務持續(xù)時間及全局事務回滾等。其中,JVM 運行時模塊和系統(tǒng)數(shù)據(jù)模塊是最為重要的兩個模塊。Tivoli 性能查看器和 WAS 同時運行在應用服務器上,占用系統(tǒng)部分資源,采用這種方法得到的老化預測模型實際上是數(shù)據(jù)采集軟件和 J2EE 應用服務器的老化現(xiàn)象疊加。由于Tivoli 性能查看器占用的系統(tǒng)資源很少,影響程度可以忽略,可把結(jié)果看作是 J2EE 應用服務器老化的結(jié)果。
2.2? J2EE 應用服務器的老化測試
為了測試 J2EE 應用服務器中是否存在軟件老化現(xiàn)象,分析導致應用服務器老化的原因,設計了不同強度的負載情況,監(jiān)測應用服務器的運行時參數(shù)情況,并進行老化分析。這里,單位時間發(fā)送請求的數(shù)量和平均服務持續(xù)時間是影響負載強度的兩個重要因素。應用服務器的負載峰值是指應用服務器在單位時間內(nèi)能夠響應的最大用戶數(shù)量。首先在較短周期內(nèi)向服務器發(fā)送等值強度的請求任務,同時在客戶端記錄響應時間等參數(shù)信息,若客戶端的請求全部得到響應,則增加負載強度,直到出現(xiàn)應用服務器無法響應所有請求時停止,此時的負載強度即為負載峰值。在老化測試時,根據(jù)服務器負載峰值設計發(fā)送請求的負載強度。
1)重負載測試。
重負載測試中,平均負載強度設定為負載峰值的30%,其中負載任務高峰期時的負載強度設定為負載峰值的 50%。JVM 內(nèi)存使用量的初始大小為 128 M,最大值為 256 M。如圖 4 所示,隨著系統(tǒng)運行時間的推移,應用服務器系統(tǒng)內(nèi)存使用量逐步增加,最終系統(tǒng)在運行 43 小時后,JVM 內(nèi)存使用量臨近 256 MB,導致JVM 內(nèi)存資源不足而出現(xiàn)宕機,此時系統(tǒng)無法響應客戶端請求。圖 4 中內(nèi)存使用量變化呈鋸齒狀,是 JVM垃圾回收機制作用的結(jié)果,當可用內(nèi)存出現(xiàn)暫時不足,不能滿足程序的內(nèi)存需求時,系統(tǒng)將自動調(diào)用垃圾回收機制,釋放更多的可用內(nèi)存空間。然而,隨著應用服務器的長期運行,其性能不斷下降,JVM 自動內(nèi)存管理機制所起的作用越來越小,最終導致系統(tǒng)宕機。
為驗證應用服務器是否存在老化現(xiàn)象,即系統(tǒng)性能是否隨時間的推移而緩慢下降,采用一元線性回歸方法,分析 JVM 內(nèi)存使用量 Y(單位:kB)和應用服務器運行時間 X(單位:min)的關(guān)系,得到式(1)描述的擬合直線方程。
Y = 25.852 7*X + 137 920 (1)
式(1)中回歸直線的斜率為正,表示 JVM 內(nèi)存使用量隨著應用服務器運行時間的推移而增加,應用服務器存在老化現(xiàn)象。
2)輕負載測試。
輕負載測試中,平均負載強度和負載任務高峰期時的負載強度都設定為重負載測試中的 20%。應用服務器 JVM 內(nèi)存使用情況如圖 5 所示。
圖 5 輕負載情況下應用服務器 JVM 內(nèi)存使用量從圖中可以看出,與重負載老化測試時情況相似,JVM 內(nèi)存使用占250 M 左右時,應用服務器宕機,無法響應客戶端請求,此時系統(tǒng)運行 140 小時。可得到內(nèi)存使用量與服務器運行時間的一元線性關(guān)系式:
Y =11.736 5 * X +139 380 (2)
式(2)中回歸直線的斜率為正,意味著內(nèi)存耗盡引起服務器系統(tǒng)出現(xiàn)軟件老化。此外,輕負載老化測試中負載強度減少,應用服務器運行時間增加三倍,可見負載強度是影響軟件老化的主要因素。
3)延長平均服務持續(xù)時間的老化測試。此次老化測試中,平均服務持續(xù)時間為原來的六倍,且單位時間內(nèi)發(fā)送請求的數(shù)量與輕負載測試中相同。應用服務器 JVM 內(nèi)存使用情況如圖 6 所示。
與前兩種老化測試情況相同,JVM 內(nèi)存使用量在250 M 左右時,應用服務器系統(tǒng)運行 8 小時后宕機,此時系統(tǒng)無法響應客戶端請求。JVM 內(nèi)存使用量與應用服務器運行時間的一元線性關(guān)系如式(3)。
Y =174.847 2 * X + 160 260 (3)
式(3)中回歸直線的斜率為正,且斜率較上述兩種情況增幅較大。這是因為延長服務持續(xù)時間,意味著應用服務器中 EJB 容器需為用戶較長時間保留系統(tǒng)資源,這將加速耗盡應用服務器的系統(tǒng)資源,從而加快軟件老化速度。
3? 結(jié)束語
文中監(jiān)測 J2EE 應用服務器系統(tǒng)中的資源使用情況,考慮外界負載變化,收集系統(tǒng)資源消耗的數(shù)據(jù),檢測系統(tǒng)的老化現(xiàn)象,分析系統(tǒng)資源消耗何時達到臨界值,以幫助軟件工程人員及時采取預維護手段,預防運行時系統(tǒng)中未來重大故障的發(fā)生。文章來源:http://www.zghlxwxcb.cn/news/detail-676691.html
下一步工作包括對系統(tǒng)老化機理和軟件再生隨機模型的研究。文章來源地址http://www.zghlxwxcb.cn/news/detail-676691.html
到了這里,關(guān)于小研究 - J2EE 應用服務器的軟件老化測試研究的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!