记一次JVM内存溢出的处理过程
概要
笔者所管理的测试一台业务服务器,近期经常被反馈应用卡顿并且出现过多次内存溢出,本篇为对此问题的处理过程的记录。
服务器环境采用Oracle JDK1.6,虚拟机为HosSpot,Web容器为Tomcat7。
处理过程
获取堆内存转储快照
在用户反馈系统卡顿时,登陆服务器通过命令查看内存使用情况
创新互联坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都做网站、成都网站制作、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的蔚县网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
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
从结果可以得知,堆内存已经达到容量上限,并且在不断的进行FGC,所以应用系统表现的特别卡顿。
通过jmap命令生成堆转储快照:
jmap -dump:format=b,file=heap.hprof 31795
出现以下提示则表示生成成功:
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
当前名称:记一次JVM内存溢出的处理过程
文章起源:http://azwzsj.com/article/jddicd.html