筆者所管理的測試一臺業(yè)務服務器,近期經(jīng)常被反饋應用卡頓并且出現(xiàn)過多次內存溢出,本篇為對此問題的處理過程的記錄。
服務器環(huán)境采用Oracle JDK1.6,虛擬機為HosSpot,Web容器為Tomcat7。
在用戶反饋系統(tǒng)卡頓時,登陸服務器通過命令查看內存使用情況
創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務領域包括:成都做網(wǎng)站、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務,滿足客戶于互聯(lián)網(wǎng)時代的蔚縣網(wǎng)站設計、移動媒體設計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡建設合作伙伴!
jps #獲取java的進程ID
jstat -gc 31795 #31795為jps查詢到的進程ID
得到內存使用情況如下:
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
從結果可以得知,堆內存已經(jīng)達到容量上限,并且在不斷的進行FGC,所以應用系統(tǒng)表現(xiàn)的特別卡頓。
通過jmap命令生成堆轉儲快照:
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打開堆轉儲快照,但提示heap space的堆內存溢出的異常:
An internal error occurred during: "Parsing heap dump from 'java_pid4259.hprof'".
Java heap space
修改配置MemoryAnalyzer.ini,調整堆內存大小
-Xms1024m
-Xmx8192m