裴 瑞,白尚旺,黨偉超,潘理虎
(太原科技大學(xué) 計算機(jī)科學(xué)與技術(shù)學(xué)院,太原 030024)
在一個長期運(yùn)行的系統(tǒng)中,軟件的退化和意外中斷被稱為軟件老化現(xiàn)象,軟件老化表現(xiàn)為系統(tǒng)的狀態(tài)異常、性能退化、軟件的掛起和失效[1].已經(jīng)證明了幾種類型的系統(tǒng)遭受到軟件老化,包括:Web 服務(wù)器[2],操作系統(tǒng)[3],數(shù)據(jù)庫管理系統(tǒng)[4],云計算[5]和虛擬化環(huán)境[6]等.因此,對軟件老化的趨勢進(jìn)行早期預(yù)測,并在系統(tǒng)崩潰之前采取有效的預(yù)防措施,有助于提高軟件的可靠性和可用性,減少軟件失效的發(fā)生和一些不必要的資源浪費及財產(chǎn)損失.本文通過對TPC-W 基準(zhǔn)測試標(biāo)準(zhǔn)的在線售書網(wǎng)站注入一段內(nèi)存泄漏代碼,收集JVM 在120 s內(nèi)的平均內(nèi)存變化數(shù)據(jù)作為實驗的訓(xùn)練集和測試集.
由于BP 神經(jīng)網(wǎng)絡(luò)獨特的誤差逆向傳播算法不斷的修正權(quán)值和閾值,不僅可以縮短訓(xùn)練時間還能提高擬合精度的特點,自適應(yīng)遺傳算法有著全局搜索能力和自適應(yīng)優(yōu)化方法,當(dāng)種群規(guī)模較大時遺傳算法可以在全局搜索范圍內(nèi)找到最優(yōu)解,該過程簡單易實現(xiàn)且求解快速的特點.
在此基礎(chǔ)上提出了一種新型自適應(yīng)遺傳退火算法(NAGSA)優(yōu)化BP 神經(jīng)網(wǎng)絡(luò)模型,采用輪盤賭選擇法和精英保留策略相結(jié)合的選擇操作對種群中個體進(jìn)行篩選,之后通過新型自適應(yīng)遺傳算法優(yōu)化交叉概率和變異概率,由于遺傳算法在運(yùn)行后期個體的適應(yīng)度逐漸趨于一致,優(yōu)秀個體優(yōu)勢不足,這時需要通過模擬退火算法對適應(yīng)度進(jìn)行拉伸,之后將得到的種群中個體的解碼賦值給BP 神經(jīng)網(wǎng)絡(luò)的權(quán)值和閾值進(jìn)行預(yù)測.實驗表明本課題提出的NAGSA-BP 神經(jīng)網(wǎng)絡(luò)模型,相比傳統(tǒng)遺傳算法改進(jìn)的BP 神經(jīng)網(wǎng)絡(luò)模型的預(yù)測精度更高、收斂性更好.
BP(Back Propagation)神經(jīng)網(wǎng)絡(luò)是目前應(yīng)用較廣泛的一種多層前饋型神經(jīng)網(wǎng)絡(luò),其網(wǎng)絡(luò)訓(xùn)練采用誤差逆?zhèn)鞑ニ惴╗7],它可以擬合任意的非線性映射從而降低預(yù)測誤差.現(xiàn)有的基于BP 神經(jīng)網(wǎng)絡(luò)模型雖在一定程度上取得了進(jìn)展,但是依舊存在一些不足需加以改進(jìn).
遺傳算法的優(yōu)點是全局式搜索,并且它可以利用歷史信息來指導(dǎo)搜索進(jìn)入到搜索空間內(nèi)性能更好的區(qū)域,BP 神經(jīng)網(wǎng)絡(luò)的優(yōu)點是局部尋優(yōu),因此可結(jié)合兩者優(yōu)勢進(jìn)行改進(jìn).遺傳算法對BP 神經(jīng)網(wǎng)絡(luò)有兩方面的優(yōu)化:權(quán)值優(yōu)化和結(jié)構(gòu)優(yōu)化.權(quán)值優(yōu)化:先通過遺傳算法縮小搜索范圍,再用BP 算法使其快速收斂尋找最優(yōu)解,以此來實現(xiàn)權(quán)值的優(yōu)化.結(jié)構(gòu)優(yōu)化:通過形成不同長度的種群和不同結(jié)構(gòu)的網(wǎng)絡(luò),各個種群經(jīng)過進(jìn)化之后選擇一個最優(yōu)個體,可確定各權(quán)值的初始值.但是傳統(tǒng)的自適應(yīng)遺傳算法(AGA)隨著進(jìn)化的進(jìn)行,一般先執(zhí)行交叉操作后執(zhí)行變異操作,這時種群的多樣性不豐富并且進(jìn)化速度很慢,最終導(dǎo)致收斂過慢或者不易收斂的后果.因此,本文采用閆春等人[8]提出的新型自適應(yīng)遺傳算法,結(jié)合了模擬退火算法共同優(yōu)化BP 神經(jīng)網(wǎng)絡(luò)模型,該模型根據(jù)優(yōu)化遺傳算法的選擇算子、交叉算子、變異算子克服了傳統(tǒng)遺傳算法易陷入“早熟收斂”的缺點,平衡了種群的多樣性并且提高了收斂精度.
2.2.1 編碼
首先初始化種群,種群中的個體采用實數(shù)編碼方式將神經(jīng)網(wǎng)絡(luò)中的權(quán)值和閾值進(jìn)行優(yōu)化,編碼所得長度H為:
其中,n為輸入節(jié)點個數(shù),l為隱含層節(jié)點個數(shù),m為輸出層節(jié)點個數(shù),n×l為 輸入層與隱含層之間的權(quán)重 ωij的編碼長度,l×m為 隱含層與輸出層之間的權(quán)重 ωjk的編碼長度,n為隱含層閾值 α的編碼長度,m為輸出層閾值β的編碼長度.
2.2.2 選擇算子
基因選擇遵從“優(yōu)勝劣汰,適者生存”的原則進(jìn)行基因選擇.選擇算子在整個種群中尋找適應(yīng)度較高的個體去生成初始的交配池.本文選用輪盤賭法和精英保留策略相結(jié)合的方法計算個體的選擇概率,將父代個體中適應(yīng)度值最高的個體保留至下一代,剩下的個體按輪盤賭方法選擇個體.
2.2.3 適應(yīng)度
遺傳算法通常采用評估函數(shù)——適應(yīng)度函數(shù)來評估個體或者解的優(yōu)劣,適應(yīng)度越高的個體遺傳給下一代的概率就越大,適應(yīng)度越低的個體遺傳給下一代的概率就越小.但是遺傳算法容易在早期使個別優(yōu)良的個體后代充斥整個種群,從而造成“早熟收斂”,而后期適應(yīng)度函數(shù)基本趨于一致,使得優(yōu)良個體后代優(yōu)勢不足造成種群進(jìn)化停滯.本文引入模擬退火算法對適應(yīng)度函數(shù)進(jìn)行拉伸,在遺傳算法前期溫度較高,適應(yīng)度相似的個體產(chǎn)生后代的概率近似,到了遺傳算法后期也就是溫度逐漸下降之后,適應(yīng)度相似的個體通過拉伸作用,放大了它們的適應(yīng)度差值,使得優(yōu)秀個體的優(yōu)勢更明顯,可幫助算法跳出局部最優(yōu)解.拉伸方法如下:
其中,fi為第i個個體的適應(yīng)度函數(shù)值,M為種群個數(shù),T為退火溫度,T0為初始退火溫度,g為遺傳迭代次數(shù).
2.2.4 交叉、變異操作
傳統(tǒng)AGA 算法思想是在個體適應(yīng)度值高于平均適應(yīng)度值時自適應(yīng)的調(diào)節(jié)交叉概率、變異概率,反之則采用固定值的交叉概率、變異概率,所帶來的不足是一些較差的個體中攜帶的較為優(yōu)良的個體會遭到破壞.因此,本文采用非線性自適應(yīng)交叉概率PC和變異概率Pm:
其中fa是 種群個體平均適應(yīng)度,fm是種群個體適應(yīng)度最大值,當(dāng)fa變 化時,a rcsin(fa/fm)會隨之快速變化,因為sin(π/6)=1/2,當(dāng)a rcsin(fa/fm)≥π/6時 自變量fa/fm≥1/2.經(jīng)過反復(fù)多次實驗,通過NAGSA 算法和NGSA 算法中的PC、Pm取值對訓(xùn)練誤差精度的影響,當(dāng)滿足設(shè)置條件π /12 ≤arcsin(fa/fm)≤π/3時,NAGSA 算法優(yōu)先執(zhí)行交叉操作再執(zhí)行變異操作,則精度高于NGSA 算法25%;當(dāng)滿足設(shè)置條件 arcsin(fa/fm)≤π/12 且arcsin(fa/fm)≥π/3時,NAGSA 算法優(yōu)先執(zhí)行變異操作再執(zhí)行交叉操作,則精度高于NGSA 算法22%.得出設(shè)置條件π/12 ≤arcsin(fa/fm)≤π/3,若滿足則NAGSA 算法優(yōu)先執(zhí)行交叉操作,反之則優(yōu)先執(zhí)行變異操作.
將NAGSA 算法訓(xùn)練后的權(quán)值和閾值作為BP 神經(jīng)網(wǎng)絡(luò)的初始權(quán)值和閾值,用實驗獲得的樣本數(shù)據(jù)建立BP 神經(jīng)網(wǎng)絡(luò)模型.
造成軟件老化的一個重要因素是由于內(nèi)存的泄漏,本課題在服務(wù)器端使用符合 TPC-W 基準(zhǔn)測試標(biāo)準(zhǔn)的在線售書網(wǎng)站,為其注入一段內(nèi)存泄漏代碼以加速老化.實驗平臺模擬了一個電子商務(wù) Web 服務(wù)系統(tǒng),其中包括運(yùn)行在同一臺物理機(jī)的虛擬機(jī)中的一個Web服務(wù)器,一個數(shù)據(jù)庫服務(wù)器以及一組模擬的客戶端,如表1實驗配置所示.
表1 實驗配置
在符合TPC-W 規(guī)范的在線售書網(wǎng)站中,每一個網(wǎng)頁頁面都使用單獨的Servlet 實現(xiàn),這些類都工作在同一個Java 虛擬機(jī)(JVM)中.JVM 是Java 技術(shù)體系的核心,操作系統(tǒng)為JVM 的進(jìn)程分配內(nèi)存,并由JVM 進(jìn)行儲存和管理.其中Java 堆是運(yùn)行時的數(shù)據(jù)區(qū)域并隨著JVM 的啟動而創(chuàng)建,所有實例類型和數(shù)組的內(nèi)存均從此處分配.程序運(yùn)行時,對象的堆內(nèi)存由稱為垃圾回收器(GC)的自動內(nèi)存管理系統(tǒng)回收.由于內(nèi)存的泄漏大多發(fā)生在Java 堆,所以GC 主要針對Java 堆進(jìn)行[9].當(dāng)JVM 內(nèi)存使用量持續(xù)增加并達(dá)到最大值時,GC 將自動啟動以釋放內(nèi)存,但是如圖1JVM 中的內(nèi)存泄漏所示,GC 僅回收無用和未引用的對象,而無用且引用的對象無法從占用的內(nèi)存區(qū)域釋放,從而導(dǎo)致內(nèi)存泄漏.同時,由于系統(tǒng)資源是有限的,垃圾收集器在內(nèi)存釋放期間將占用大量的CPU 和系統(tǒng)資源.因此,連續(xù)出現(xiàn)的內(nèi)存泄漏問題的累積效應(yīng)將直接導(dǎo)致可用內(nèi)存不足和與老化相關(guān)的系統(tǒng)故障.
本文采用加速退化測試[10](Accelerated Degradation Tests,ADT)實驗研究受軟件老化影響的應(yīng)用程序故障,通過增加一個HeapLeak 類,讓服務(wù)器的生命周期都保持對該類的OOMObject 對象的引用,當(dāng)服務(wù)器創(chuàng)建的實例數(shù)達(dá)到最大堆容量時,會產(chǎn)生JVM 堆的溢出,從而OOMObject 對象不再被GC 回收.實驗收集JVM的內(nèi)存使用量,共持續(xù)14 400 s,每隔120 s 取一次平均值 .JVM 在120 s 內(nèi)平均使用內(nèi)存的變化趨勢圖如圖2.
圖1 JVM 中的內(nèi)存泄漏
圖2 JVM 在120 s 內(nèi)平均使用內(nèi)存變化趨勢圖
3.2.1 數(shù)據(jù)預(yù)處理
本次實驗共獲取到3 個輸入?yún)?shù),1 個輸出參數(shù),神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)為3-10-1,每組實驗都選擇工作負(fù)載為100 個客戶端,共收集到14 281 個數(shù)據(jù),取前7000 個作為訓(xùn)練集,后7281 個作為驗證集.原始數(shù)據(jù)由于數(shù)量級差別較大,會對BP 神經(jīng)網(wǎng)絡(luò)的收斂性產(chǎn)生影響,可能會加大訓(xùn)練難度,耗費訓(xùn)練的時間,因此為了提高網(wǎng)絡(luò)的訓(xùn)練效率,用M a t l a b 中的歸一化函數(shù)mapminmax,將輸入層和輸出層數(shù)據(jù)歸一化到[-1,1]之間,BP 神經(jīng)網(wǎng)絡(luò)訓(xùn)練后得到的數(shù)據(jù)最后進(jìn)行反歸一化處理,得到正常值.
3.2.2 建立訓(xùn)練模型
本次實驗的輸入節(jié)點數(shù)為3,隱含層節(jié)點數(shù)為10,輸出層節(jié)點數(shù)為1,種群規(guī)模為60,進(jìn)化次數(shù)為100 次,交叉和變異概率分別選擇0.6 和0.02.為了驗證本文提出的NAGSA-BP 算法有著更好的收斂效果和在驗證軟件老化預(yù)測上的有效性,分別與NGSA-BP、AGABP、GA-BP 算法進(jìn)行比較,選取MAE、MSE作為評價標(biāo)準(zhǔn),結(jié)果如表2所示.
表2 改進(jìn)后的遺傳算法優(yōu)化BP 神經(jīng)網(wǎng)絡(luò)模型誤差對比
由表2可以看出,本文提出的NAGSA-BP 神經(jīng)網(wǎng)絡(luò)模型,通過對交叉概率、變異概率的非線性優(yōu)化,相比傳統(tǒng)的自適應(yīng)遺傳退火算法(NGSA)優(yōu)化的BP 神經(jīng)網(wǎng)絡(luò)模型在預(yù)測精度上提高了35%,相比傳統(tǒng)的自適應(yīng)遺傳算法(AGA)優(yōu)化的BP 神經(jīng)網(wǎng)絡(luò)模型在預(yù)測精度上提高了81%,相比傳統(tǒng)的遺傳算法(GA)優(yōu)化的BP 神經(jīng)網(wǎng)絡(luò)模型在預(yù)測精度上提高了97%.
由圖3、圖4可以看出,NAGSA-BP 神經(jīng)網(wǎng)絡(luò)模型在加入了非線性自適應(yīng)調(diào)整的交叉概率、變異概率之后,其算法的穩(wěn)定性和收斂性都優(yōu)于未改進(jìn)的NGSA-BP神經(jīng)網(wǎng)絡(luò)模型;NAGSA-BP、NGSA-BP 神經(jīng)網(wǎng)絡(luò)模型通過后期模擬退火算法對適應(yīng)度函數(shù)的拉伸作用,相比未改進(jìn)的AGA-BP、GA-BP 神經(jīng)網(wǎng)絡(luò)模型都在預(yù)測精度和擬合效果上有了顯著的提高.由此可得出,本文提出的新型自適應(yīng)遺傳退火算法優(yōu)化BP 神經(jīng)網(wǎng)絡(luò)模型,無論是在預(yù)測精度上還是擬合效果上都存在明顯的優(yōu)勢.
圖3 預(yù)測輸出與期望輸出對比圖
圖4 誤差對比圖
本文通過建立一個軟件老化測試平臺,通過內(nèi)存泄漏代碼的注入,使得原本正常工作的在線書店網(wǎng)站出現(xiàn)老化現(xiàn)象,收集反應(yīng)網(wǎng)站老化的系統(tǒng)參數(shù),選取JVM 在120 s 內(nèi)平均使用的內(nèi)存作為預(yù)測的數(shù)據(jù)集.實驗表明,NAGSA-BP 神經(jīng)網(wǎng)絡(luò)模型相比于幾個傳統(tǒng)遺傳算法改進(jìn)的BP 神經(jīng)網(wǎng)絡(luò)模型,不僅提高了預(yù)測精度,還在預(yù)測結(jié)果的收斂性上有顯著成效,驗證了本文方法的有效性.