点击上方“IT那活儿”公众号,关注后了解更多内容,不管IT什么活儿,干就完了!!!
在我们运维工作中经常会遇到内存不足或者内存泄漏的情况,本篇文章简单介绍下遇到这类情况该如何去排查。
概述
1.1 Java堆内存不足故障症状
JVM会抛出Java.lang .OutOfMemoryError异常。 服务响应缓慢或不响应业务请求。 应用程序可以忽略错误或处理异常,例如友好退出。 如果应用程序忽略错误,线程将会退出(且将不会出现在Thread dump中)。 WebLogic Server的执行线程只是通过记录状态来处理异常。 但连续发生的错误将导致健康监控线程关闭服务器。
1.2 堆内存不足的可能原因
没有足够的堆; 对象的活动时间过长; 应用程序在内存中缓存对象过多; 内存泄漏; 因存在jvm错误未能执行完整的GC; 内存碎片。
排查步骤
ps -ef | grep 应用名
jstat -gcutil pid 1000 10(时间间隔1000ms,输出10次)
-XX:+HeapDumpOnOutOfMemoryError(开启堆快照)
-XX:HeapDumpPath=C:/m.hprof(保存文件到哪个目录)
jstack -l pid > home/test/jstack.txt
jmap -heap pid > home/test/jmapHeap.txt
jmap -dump:format=b,file=/home/test/oom.hprof pid
解决方案
异常:java.lang.OutOfMemoryError:java heap space 说明:这是最典型的内存泄漏方式,简单说就是所有堆空间都被无法回收的垃圾对象占满,虚拟机再也无法分配新空间。 解决方案:这种方式解决起来比较简单,一般就是根据垃圾回收前后的情况对比,同时根据对象引用情况(常见的集合对象引用)分析,基本都可以找到泄漏点。
异常:java.lang.OutOfMemoryError:PermGen space 说明:Perm 空间被占满,无法为新的 class 分配存储空间而引发的异常。主要原因是大量动态反射生成的类不断被加载,最终导致 Perm 区被占满。 解决方案:增加持久代内存 ,例如:-XX:MaxPermSize=512M

本文作者:程 红(上海新炬王翦团队)
本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




