JVM 内存问题分析方法记录

1、GC日志分析

除了CMS的日志和其他GC的日志差别较大外,它们都可以抽象成如下格式

[GC [<collector>:<starting occupancy1>-><ending occupancy1>(total size1), <pause time1> secs] <starting occupancy2>-><ending occupancy2>(total size2), <pause time2> secs]

<collector>GC 表示收集器的名称

<starting occupancy1> 表示 Young 区在 GC 前占用的内存

<ending occupancy1> 表示 Young 区在 GC 后占用的内存

<pause time1> 表示 Young 区局部收集时 JVM 暂停处理的时间

<starting occupancy2> 表示 JVM Heap 在 GC 前占用的内存

<ending occupancy2> 表示 JVM Heap 区在 GC 后占用的内存

<pause time2> 表示 GC 过程中 JVM 暂停处理的时间

可以根据:

  <ending occupancy1> - <starting occupancy1> 和 <ending occupancy2> - <starting occupancy2>

判断是否存在内存泄漏

还可以使用 jstat -gcutil [pid] [interval] [count] 进行分析

各参数分别代表:

 S0 — Heap上的 Survivor space 0 区已使用空间的百分比

S1 — Heap上的 Survivor space 1 区已使用空间的百分比

E   — Heap上的 Eden space 区已使用空间的百分比

O   — Heap上的 Old space 区已使用空间的百分比

P   — Perm space 区已使用空间的百分比

YGC — 从应用程序启动到采样时发生 Young GC 的次数

YGCT– 从应用程序启动到采样时 Young GC 所用的时间(单位秒)     FGC — 从应用程序启动到采样时发生 Full GC 的次数

FGCT– 从应用程序启动到采样时 Full GC 所用的时间(单位秒)     GCT — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒)

2、堆快照文件分析

  jmap -dump:format=b file=[filename] [pid]

记录堆的内存快照,然后利用工具 mat 分析整个 Heap 的对象关联情况

如果内存耗尽那么可能导致JVM直接垮掉,通过参数:-XX:+HeapDumpOnOutOfMemoryError 可记录内存快照,-XX:HeapDumpPath 指定文件路径

3、JVM Crash 日志分析

JVM 退出时一般会在工作目录产生日志文件,也可 -XX:ErrorFile=/path/of/file 指定

时间: 2024-10-29 13:17:47

JVM 内存问题分析方法记录的相关文章

Linux与jvm内存关系分析

原文出处: 美团技术团队 引言 在一些物理内存为8g的服务器上,主要运行一个Java服务,系统内存分配如下:Java服务的JVM堆大小设置为6g,一个监控进程占用大约600m,Linux自身使用大约800m.从表面上,物理内存应该是足够使用的:但实际运行的情况是,会发生大量使用SWAP(说明物理内存不够使用了),如下图所示.同时,由于SWAP和GC同时发生会致使JVM严重卡顿,所以我们要追问:内存究竟去哪儿了? 要分析这个问题,理解JVM和操作系统之间的内存关系非常重要.接下来主要就Linux与

jvm内存对象分析

1.jmap -histo <pid> 可以查看指定pid的jvm内存状况 2.jmap -dump:file=dump.txt <pid> 以将指定pid的jvm中堆信息输出到文件中 在服务器上,这个文件比较大,我在公司的服务器上生成的文件2.3G 所以,最好不要在服务器上分析这个文件 可以将文件拷贝到本地,CRT可以用sz命令将文件下载到本地 3.jhat -J-Xmx4096m dump.txt 分析dump文件,由于我生成的文件比较大(2.3G),所以给了4096m内存去分

JVM内存状况查看方法和分析工具

jinfo:可以输出并修改运行时的java 进程的opts. jps:与unix上的ps类似,用来显示本地的java进程,可以查看本地运行着几个java程序,并显示他们的进程号. jstat:一个极强的监视VM内存工具.可以用来监视VM内存内的各种堆和非堆的大小及其内存使用量. jmap:打印出某个java进程(使用pid)内存内的所有'对象'的情况(如:产生那些对象,及其数量). jconsole:一个java GUI监视工具,可以以图表化的形式显示各种数据.并可通过远程连接监视远程的服务器V

JVM内存溢出分析-实战JVM(二)

JVM规范规定,除了程序计数器,虚拟机其他内存区域均会发生内存溢出的可能,OutOfMemoryError(OOM) 原文地址:http://www.begincode.net/blog/62  我的网站,欢迎大家多提意见 本文目的: 1.通过代码人为造成OOM,让大家跟了解JVM运行时各区存储的内容. 2.通过demo让大家实际开发过程中,能够根据异常判断是那个内存区域发生的溢出, 3.让大家了解到什么样的代码会产生OOM,开发中能够尽量规避. 前提: 先和大家介绍一下eclipse如何设置J

java虚拟机学习-JVM内存管理:深入Java内存区域与OOM(3)

概述 Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来. 对于从事C.C++程序开发的开发人员来说,在内存管理领域,他们即是拥有最高权力的皇帝又是执行最基础工作的劳动人民——拥有每一个对象的“所有权”,又担负着每一个对象生命开始到终结的维护责任. 对于Java程序员来说,不需要在为每一个new操作去写配对的delete/free,不容易出现内容泄漏和内存溢出错误,看起来由JVM管理内存一切都很美好.不过,也正是因为Java程序员把内存控制的

jvm运行时分析

官方手册: http://docs.oracle.com/javase/7/docs/     ----> http://docs.oracle.com/javase/7/docs/technotes/tools/solaris/java.html   java命令的各种选项的说明 参考书籍: <深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)> 首先说下JVM的内存堆结构,看下图: 主要由 方法区Permanent Generation + 新生代Eden + 新生代幸存区S

JVM内存模型理解

Java虚拟机(Java VirtualMachine 简称JVM)是运行所有Java程序的抽象计算机,是Java语言的运行环境,它是Java 最具吸引力的特性之一. JVM内存模型 1.方法区和堆是所有线程共享的数据区 1)堆:存放对象的实例 2)方法区:存放已被虚拟机加载的类信息.常量.静态变量.即时编译器编译后的代码 3)运行时常量池:是方法区的一部分,存放Class的版本.字段.方法.接口等描述信息,字符串池就是这个!!! 2.程序计数器.虚拟机栈.本地方法栈是线程隔离的数据区 4)程序

Jvm内存工具

1,JConsole  位于 [JDK] bin 下, 2,代码查看当前进程堆内存 long maxMemory = Runtime.getRuntime().maxMemory();long totalMemory = Runtime.getRuntime().totalMemory();long freeMemory = Runtime.getRuntime().freeMemory(); System.out.println(maxMemory);System.out.println(to

查看JVM内存

你知道如何进行JVM内存查看,这里和大家分享几个JVM内存查看方法,希望对你的学习有所帮助,通常情况下可以用代码查看,也可以在eclipse中增添相关信息后直接查看. JVM内存查看方法 可以用代码查看,也可以在eclipse中增添相关信息后直接查看. 1.用下面的代码进行JVM内存查看 1 memory.java 2 3 importjava.lang.Runtime; 4 5 publicclassmemory{ 6 publicstaticvoidmain(Stringargs[]){ 7