程序员知识图谱-Java 内存溢出的排查方法
内存溢出分类
Java 里面内存溢出主要分以下几种:
堆溢出
1、内存溢出(无法申请到内存) jstat 查看内存使用情况,检查堆参数,一般是申请的内存太大,比如一个特别大的 byte 数组
2、内存泄漏(对象无法回收) 可以使用 MAT 工具里面的 Path to GC Roots 定位,一般是一个特大不能回收的对象
栈溢出
- StackOverflowError 方法调用层次太深,内存不够新建栈帧,比如一个没有结束条件的递归
- OutOfMemoryError 线程太多,内存不够新建线程
MetaSpace 数据区溢出
动态生成大量 Class
本地直接内存溢出
申请一个大的直接内存
数据超限内存溢出
分配的数据结构在此平台不可寻址
排查方法
JDK 自带命令
jstat -gcutil 33816 250 20 # 监控 jvm 的内存使用情况
jps -ml # 输出虚拟机启动时传递给主类 main() 的参数,输出主类的全名
jmap -F -dump:live,format=b,file=dump.bin 85962 # dump 堆内存
# 分析方法
# 可以使用 VisualVM,主要查看是否存在大对象,然后分析为什么没有被回收
jstack -F -l -m 85962 # 显示虚拟机快照
jstack -l PID >> test.txt
jmap -histo pid # 实时查看JVM对象大小的排序结果,但无法看到对象的具体内容
Arthas
# 找到最耗CPU的方法
thread -n 5
# 观察方法的返回
watch com.test.MyClass query returnObj
# 反编译类
jad com.test.MyClass
# 监控调用情况
monitor -c 5 com.test.MyClass query
# 查看分段的调用时间
trace com.test.MyClass query
# 查看方法完整的调用链
stack com.test.MyClass query
# 记录调用现场
tt -t com.test.MyClass query
参数检查
-Xms 初始堆大小
-Xmx 最大堆大小
-Xmn 新生代大小
XX:MaxMetaSpaceSize 元数据区大小
Survivor Eden与Survivor区的大小比值
本文亦通过 NoOne 的个人博客 发表。
程序员知识图谱-Java 内存溢出的排查方法相关推荐
- Java内存溢出问题排查分析
目录 前言 一.MAT(Memory Analyzer Tool) 二.软件初识 三.捕获dump文件 1.主动方式 2.被动方式 四.分析dump文件 总结 前言 项目运行过程中,我们可能会遇到Ja ...
- jvm 内存溢出问题排查方法
如果你做TCP通讯或者map集合操作,并发处理等功能时,很容易出现 Java 内存溢出的问题.本篇文章,带领大家深入jvm,分析并找出jvm内存溢出的代码. jvm中除了程序计数器,其他的区域都有可能 ...
- java内存溢出怎么排查_【转】Java学习---内存溢出的排查经历
前言 OutOfMemoryError 问题相信很多朋友都遇到过,相对于常见的业务异常(数组越界.空指针等)来说这类问题是很难定位和解决的. 本文以最近碰到的一次线上内存溢出的定位.解决问题的方式展开 ...
- 基于Java内存溢出的解决方法详解
一.内存溢出类型 1.java.lang.OutOfMemoryError: PermGen space JVM管理两种类型的内存,堆和非堆.堆是给开发人员用的上面说的就是,是在JVM启动时创建:非堆 ...
- java内存溢出怎么排查_java线上内存溢出问题排查步骤
一般线上遇到比较头疼的就是OOM内存溢出问题,我们都会先看错误日志,如果错误日志能够定位出哪个类对象导致内存溢出,那么我们只需要针对问题修改bug就好.但是很多时候我们单凭日志无法定位出内存溢出问题, ...
- Java 内存溢出(java.lang.OutOfMemoryError)的常见情况和处理方式总结
导致OutOfMemoryError异常的常见原因有以下几种: 1.内存中加载的数据量过于庞大,如一次从数据库取出过多数据: 2.集合类中有对对象的引用,使用完后未清空,使得JVM不能回收: 3.代码 ...
- Java内存泄漏的排查
1.内存溢出 一种通俗的说法. 1.内存溢出:你申请了10个字节的空间,但是你在这个空间写入11或以上字节的数据,出现溢出. 2.内存泄漏:你用new申请了一块内存,后来很长时间都不再使用了(按理应该 ...
- java代码耗尽内存_有关Java内存溢出及内存消耗的小知识
内存溢出原理: 我们知道,Java程序本身是不能直接在计算机上运行的,它需要依赖于硬件基础之上的操作系统和JVM(Java虚拟机). Java程序启动时JVM都会分配一个初始内存和最大内存给这个应用程 ...
- C程序员必须知道的内存知识【英】
C程序员必须知道的内存知识[英] 时间 2015-03-08 14:16:11 极客头条原文 http://marek.vavrusa.com/c/memory/2015/02/20/memory/ ...
最新文章
- 让人头痛的大事务问题到底要如何解决?
- 算法------------搜索二维矩阵
- Android --- This custom view should extend android.support.v7.widget.AppCompatTextView instead
- Chrome DevTools进阶教程
- 前端学习(584):在dom中调试节点
- 根据分类id找出父类id
- allan方差 imu_MEMS-IMU随机误差的Allan方差分析
- java 读excel
- python数值运算代码_Python数值
- 算法导论随笔(十四):NP完全性之P问题、NP问题、NPC问题和NP难问题
- laravel seeder 数据填充
- Web安全学习day01
- 网易七鱼“大闹”客服行业,真能一举定乾坤?
- 2018沈阳k(经典的约瑟夫环)
- 人只需要成功一次就够了
- 顶会竟然攀比起了拒稿率?教授发文怒斥「挑刺式审稿」
- ElasticSearch商城商品搜索实战
- vscode的搜索技巧
- win10计算机恢复出厂设置,Win10电脑如何恢復出厂设置
- 解决“No input file specified”的问题