参考文档:
一次JVM爆内存分析
一次JVM爆内存分析 - 持续疯长,往天那边去 - ITeye博客
部分内容提要:
1.应用没有死,但是响应非常慢,通过jstat查看到s0/s1 eden old区都100%了;确认JVM是内存爆了;系统GC时间非常高;
2.通过jmap和java options查看JVM内存分配和参数配置,看是否不合理;
3.通过thread dump结合top -H -p pid查看CPU最高的线程是什么,看是否存在deadlock,如果是用户线程,基本可以定位到问题;而我的threaddump最吃CPU的都是GC线程,且无死锁,可以确认是程序问题;
4.通过jmap -histo:live pid这一步查看对象实例数和占用内存数;
就在这一步发现了一个业务对象实例占用非常高,达30多W;
然后就顺瓜摸藤找到原因了。
一次程序宕机的辛酸追寻之路
一次程序宕机的辛酸追寻之路 | IMXYLZ
内容提要:
系统服务宕机,没找到原因,服务器是主备架构的,主服务机器重启了,备机还不能正常提供服务。 通常遇到这种情况,Java程序的标准做法是:
- jstat 查询内存使用率 -> 正常
- jstack 查询线程栈状况 -> 大约正常,只有一个看起来像是错误的问题
- jmap 查看内存状况 -> 正常
- log4j日志文件 -> 基本正常(事实上不正常,只是未发现)
- gc日志文件 -> 备机看到一堆内存分配失败
- sql记录文件 -> 正常
- jetty的日志文件 -> 大致正常
排查过程提要:
java日志提示的是OOM ,检查OOM出现时,查询当时的各种日志信息:GC日志、java日志(用户操作、定时器等)、Nginx日志(有谁在做什么操作)、SQL日志(慢查询的日志,及其原因)
内存溢出OOM故障定位实践 内存溢出OOM故障定位实践_加权不下平权的博客-CSDN博客
部分内容提要:
配置后台程序,启动参数,在内存溢出时,自动输出dump文件
VM options:
-Xmx10m(分配最大内存)
-XX:+HeapDumpOnOutOfMemoryError(程序内存溢出自动转存dump)
-XX:+HeapDumpOnCtrlBreak(手动退出时,转存dump,java1.6已经取消)
-XX:HeapDumpPath=D:\sso\dump(转成dump文件路径)
OOM问题定位
https://www.cnblogs.com/ygj0930/p/6522987.html
内容提要:
一:堆内存溢出
Java创建的对象一般都是分配在堆中,如果是由于过期对象没能回收(内存泄漏)或者对象过多导致放不下(内存溢出),一般报错:Exception in thread \"main\" java.lang.OutOfMemoryError: Java heap space
解决这部分的异常,重点是通过内存映像分析工具分析堆的转储快照,确定异常是由于内存泄漏还是内存溢出导致的。
如果是内存泄漏导致的,则进一步查看泄漏对象到GCRoots的引用链,观察泄漏对象是通过怎样的路径与GCRoots相关联并导致垃圾回收器无法回收的;
如果是内存溢出导致的,则检测堆的大小参数(Xmx、Xms)看看能否再调大,检测是否有某些对象生命周期过长。
二:方法区溢出
方法区主要存放类的信息、静态变量、常量池等,当常量池溢出或者不停地有类动态创建并加载时,方法区也能产生OOM。
报错信息:Exception in thread \"main\" java.lang.OutOfMemoryError: PermGen space
拓展:String.intern():如果字符串常量池已经包含一个等于此string对象的字符串,则返回该字符串;否则,将次string对象的内容加入到常量池中,并返回该对象的引用。
三:栈溢出(虚拟机栈、本地方法栈)
栈的异常有两种:
一种是:JVM在执行方法时就会创建方法栈,方法的递归、调用等使得其他方法不停地入栈,其他方法执行完毕就会弹出栈帧。当一个方法栈的深度大于JVM所允许的深度时就会报StackOverFlow;一般,出现StackOverFlow时就要检查代码是否有无穷递归的情况出现了。 stack length:1007Exception in thread \"main\" java.lang.StackOverflowError
还有一种就是 : 栈空间扩展时没有足够的内存则报OutOfMemory。
四:本地直接内存溢出
直接内存可以通过 -XX:MaxDirectMemorySize指定。如果本地直接内存溢出,我们可以发现堆转储快照中无明显异常指示,并且快照文件很小,而程序中又使用了NIO等技术,则可以检查是否直接内存溢出了。
Java中9种常见的CMS GC问题分析与解决
https://blog.csdn.net/weixin_42073629/article/details/114375808
cpu使用率低负载高,原因分析
https://blog.csdn.net/weixin_33918357/article/details/92038835