筆者所管理的測試一臺業(yè)務(wù)服務(wù)器,近期經(jīng)常被反饋應(yīng)用卡頓并且出現(xiàn)過多次內(nèi)存溢出,本篇為對此問題的處理過程的記錄。
服務(wù)器環(huán)境采用Oracle JDK1.6,虛擬機(jī)為HosSpot,Web容器為Tomcat7。
在用戶反饋系統(tǒng)卡頓時,登陸服務(wù)器通過命令查看內(nèi)存使用情況
創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括武昌網(wǎng)站建設(shè)、武昌網(wǎng)站制作、武昌網(wǎng)頁制作以及武昌網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,武昌網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到武昌省份的部分城市,未來相信會繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
jps #獲取java的進(jìn)程ID
jstat -gc 31795 #31795為jps查詢到的進(jìn)程ID
得到內(nèi)存使用情況如下:
S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT
932032.0 932032.0 0.0 0.0 932096.0 932096.0 5592448.0 5592448.0 131072.0 60017.9 20 13.991 69 892.270 906.260
從結(jié)果可以得知,堆內(nèi)存已經(jīng)達(dá)到容量上限,并且在不斷的進(jìn)行FGC,所以應(yīng)用系統(tǒng)表現(xiàn)的特別卡頓。
通過jmap命令生成堆轉(zhuǎn)儲快照:
jmap -dump:format=b,file=heap.hprof 31795
出現(xiàn)以下提示則表示生成成功:
Attaching to process ID 31795, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 20.45-b01
Dumping heap to heap.hprof ...
Heap dump file created
使用MemoryAnalyzer打開堆轉(zhuǎn)儲快照,但提示heap space的堆內(nèi)存溢出的異常:
An internal error occurred during: "Parsing heap dump from 'java_pid4259.hprof'".
Java heap space
修改配置MemoryAnalyzer.ini,調(diào)整堆內(nèi)存大小
-Xms1024m
-Xmx8192m
在MAT的Leak Suspects中,可以看到很詳細(xì)的信息,有兩個對象占用了大量的內(nèi)存。
通過查看線程信息發(fā)現(xiàn)為一個報(bào)表功能,該報(bào)表查詢的數(shù)據(jù)量太大,而且sql效率比較低。