内存溢出分类

Java 里面内存溢出主要分以下几种:

堆溢出

1、内存溢出(无法申请到内存) jstat 查看内存使用情况,检查堆参数,一般是申请的内存太大,比如一个特别大的 byte 数组

2、内存泄漏(对象无法回收) 可以使用 MAT 工具里面的 Path to GC Roots 定位,一般是一个特大不能回收的对象

栈溢出

  1. StackOverflowError 方法调用层次太深,内存不够新建栈帧,比如一个没有结束条件的递归
  2. 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 内存溢出的排查方法相关推荐

  1. Java内存溢出问题排查分析

    目录 前言 一.MAT(Memory Analyzer Tool) 二.软件初识 三.捕获dump文件 1.主动方式 2.被动方式 四.分析dump文件 总结 前言 项目运行过程中,我们可能会遇到Ja ...

  2. jvm 内存溢出问题排查方法

    如果你做TCP通讯或者map集合操作,并发处理等功能时,很容易出现 Java 内存溢出的问题.本篇文章,带领大家深入jvm,分析并找出jvm内存溢出的代码. jvm中除了程序计数器,其他的区域都有可能 ...

  3. java内存溢出怎么排查_【转】Java学习---内存溢出的排查经历

    前言 OutOfMemoryError 问题相信很多朋友都遇到过,相对于常见的业务异常(数组越界.空指针等)来说这类问题是很难定位和解决的. 本文以最近碰到的一次线上内存溢出的定位.解决问题的方式展开 ...

  4. 基于Java内存溢出的解决方法详解

    一.内存溢出类型 1.java.lang.OutOfMemoryError: PermGen space JVM管理两种类型的内存,堆和非堆.堆是给开发人员用的上面说的就是,是在JVM启动时创建:非堆 ...

  5. java内存溢出怎么排查_java线上内存溢出问题排查步骤

    一般线上遇到比较头疼的就是OOM内存溢出问题,我们都会先看错误日志,如果错误日志能够定位出哪个类对象导致内存溢出,那么我们只需要针对问题修改bug就好.但是很多时候我们单凭日志无法定位出内存溢出问题, ...

  6. Java 内存溢出(java.lang.OutOfMemoryError)的常见情况和处理方式总结

    导致OutOfMemoryError异常的常见原因有以下几种: 1.内存中加载的数据量过于庞大,如一次从数据库取出过多数据: 2.集合类中有对对象的引用,使用完后未清空,使得JVM不能回收: 3.代码 ...

  7. Java内存泄漏的排查

    1.内存溢出 一种通俗的说法. 1.内存溢出:你申请了10个字节的空间,但是你在这个空间写入11或以上字节的数据,出现溢出. 2.内存泄漏:你用new申请了一块内存,后来很长时间都不再使用了(按理应该 ...

  8. java代码耗尽内存_有关Java内存溢出及内存消耗的小知识

    内存溢出原理: 我们知道,Java程序本身是不能直接在计算机上运行的,它需要依赖于硬件基础之上的操作系统和JVM(Java虚拟机). Java程序启动时JVM都会分配一个初始内存和最大内存给这个应用程 ...

  9. C程序员必须知道的内存知识【英】

    C程序员必须知道的内存知识[英] 时间 2015-03-08 14:16:11 极客头条原文  http://marek.vavrusa.com/c/memory/2015/02/20/memory/ ...

最新文章

  1. 让人头痛的大事务问题到底要如何解决?
  2. 算法------------搜索二维矩阵
  3. Android --- This custom view should extend android.support.v7.widget.AppCompatTextView instead
  4. Chrome DevTools进阶教程
  5. 前端学习(584):在dom中调试节点
  6. 根据分类id找出父类id
  7. allan方差 imu_MEMS-IMU随机误差的Allan方差分析
  8. java 读excel
  9. python数值运算代码_Python数值
  10. 算法导论随笔(十四):NP完全性之P问题、NP问题、NPC问题和NP难问题
  11. laravel seeder 数据填充
  12. Web安全学习day01
  13. 网易七鱼“大闹”客服行业,真能一举定乾坤?
  14. 2018沈阳k(经典的约瑟夫环)
  15. 人只需要成功一次就够了
  16. 顶会竟然攀比起了拒稿率?教授发文怒斥「挑刺式审稿」
  17. ElasticSearch商城商品搜索实战
  18. vscode的搜索技巧
  19. win10计算机恢复出厂设置,Win10电脑如何恢復出厂设置
  20. 解决“No input file specified”的问题

热门文章

  1. 裁员、紧缩 云计算行业正面临的危与机
  2. 如何转行游戏行业及我眼中的理想游戏开发团队
  3. Unity 如何制作星空粒子效果?
  4. photoSwipe 结合jquery使用
  5. CSS 学习笔记 - 网格布局(栅格系统)
  6. 4种方法教你如何用动态影像提升网页魅力
  7. mamp mysql 密码,设置/修改 phpmyadmin 密码 (MAMP)
  8. [Unity3D]Unity3D游戏开发之怪物AI
  9. 2016你配得上更好地自己
  10. 计量地理学(Quantitative Geography)的学习笔记