OOM排查思路

OOM,全称是"Out Of Memory",翻译成中文就是"内存用完了",来源于java.lang.OutOfMemoryError

1.OOM产生的原因

内存中加载的数据量过于庞大(一次性从数据库中取出多条数据)

资源使用之后没有及时关闭,导致对象无法被GC回收

代码中存在死循环或循环产生过多重复的对象实体

使用第三方软件中的bug

启动参数内存值设定的过小

2.OOM发生区域

2.1 Java堆溢出:heap (大多数)

        java.lang.OutofMemoryError:Java heap space

        原因:内存泄露、JVM内存小、创建太多的对象没有释放。

        相关JVM参数:-Xms、-Xmx

2.2 Java栈溢出 stack

        java.lang.StackOverflowError,常发生于递归。

        java.lang.OutofMemoryError: unable to create new native thread,常发生于创建太多线程。

        相关JVM参数:-Xss,表示每个线程的堆栈大小。

2.3 方法区溢出

         java.lang.OutofMemoryError: PermGen space。

        运行时常量保存在方法区,存放的主要是编译器生成的各种字面量和符号引用,但是运行期限也可能将新的常量放入池中

        -XX:PermSize:设置持久代(perm gen)初始值,默认值为物理内存的1/64        

        -XX:MaxPermSize:设置持久代最大值,默认为物理内存的1/4

3.OOM排查流程

需要先设置JVM参数,设定当发生OOM的时候自动生成dump出堆信息:

        开启堆快照: -XX: +HeapDumpOnOutOfMemoryError

        OOM时日志记录文件位置: -XX:HeapDumpPath=/user/local/error.hprof

通过工具进行排查 例如jvisualvm工具分析dump文件,MemoryAnalyzer等

4.CPU飙高问题排查

 服务器CPU飙高排查,先

top看是哪个进程 cpu高

  ps -mp  查看进程里面的详细  去除杂项

tid是十进制  java程序是16进制  要通过“%x/n” 来转换 

打印方法名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值