JVM 05 OOM 内存泄漏专题

2016/07/15 JVM 共 1689 字,约 5 分钟
MiniPa

1.OOM 原因

  • java.lang.OutOfMemoryError: Java heap space 堆空间不够,请申请更多内存
  • java.lang.OutOfMemoryError: PermGen space及其解决方法, 永久带不够,存放类的字节码和常量池
  • java.lang.OutOfMemoryError: unable to create new native thread, 能创建的线程数量是有限的
  • java.lang.OutOfMemoryError:GC overhead limit exceeded,并行或并发的GC回收时间过长

OOM

2.OOM 可能的原因

  • java.lang.StackOverflowError … 递归或者方法调用层次太多,线程栈满了

  • java.net.SocketException: Too many open files 系统对使用的文件句柄是有限制的,超过了这个限制

OOM错误分析

OOM Killer https://mp.weixin.qq.com/s/34GVlaYDOdY1OQ9eZs-iXg

3.一个监控 OOM 现场版脚本

#!/bin/bash
ps -Leo pid,lwp,user,pcpu,pmem,cmd >> /tmp/pthreads.logecho "ps -Leo pid,lwp,user,pcpu,pmem,cmd >> /tmp/pthreads.log" >> /tmp/pthreads.logecho `date` >> /tmp/pthreads.logecho 1pid=`ps aux|grep tomcat|grep cwh|awk -F ' ' '{print $2}'`echo 2echo "pstack $pid >> /tmp/pstack.log" >> /tmp/pstack.log
pstack $pid >> /tmp/pstack.logecho `date` >> /tmp/pstack.logecho 3echo "lsof >> /tmp/sys-o-files.log" >> /tmp/sys-o-files.log
lsof >> /tmp/sys-o-files.logecho `date` >> /tmp/sys-o-files.logecho 4echo "lsof -p $pid >> /tmp/service-o-files.log" >> /tmp/service-o-files.log
lsof -p $pid >> /tmp/service-o-files.logecho `date` >> /tmp/service-o-files.logecho 5echo "jstack -l $pid  >> /tmp/js.log" >> /tmp/js.log
jstack -l -F $pid  >> /tmp/js.logecho `date` >> /tmp/js.logecho 6 echo "free -m >> /tmp/free.log" >> /tmp/free.log
free -m >> /tmp/free.logecho `date` >> /tmp/free.logecho 7echo "vmstat 2 1 >> /tmp/vm.log" >> /tmp/vm.log
vmstat 2 1 >> /tmp/vm.logecho `date` >> /tmp/vm.logecho 8echo "jmap -dump:format=b,file=/tmp/heap.hprof 2743" >> /tmp/jmap.log

参考:

JAVA系统堆外内存泄露

1.JVM类加载机制

2.JVM内存结构

3.GC算法

4.JVM调优–命令

5.Java GC分析

6.Java GC调优案例

7.JVM调优–工具

8.JVM知识点总览

9.如何优化JavaGC

10.OOM Killer

文档信息

Search

    Table of Contents