JMAP

JVM性能调优工具之jmap

江枫思渺然 提交于 2020-01-07 21:06:56
参考文章: JVM性能调优工具之jmap jmap pid 使用jps找到需要处理的进程ID,使用jmap pid即可查看内存的映像信息。 jmap -heap pid 打印堆的摘要信息,包括GC算法、堆配置信息以及各内存区域内存使用信息。 jmap -histo:live pid | head -20 打印堆中对象的统计信息。(加上head参数可以只筛选出前面20行) jmap -clstats pid 打印类加载器信息。 jmap -finalizerinfo pid 打印等待终结的对象信息。 jmap -dump:format=b,file=heapdump.hprof pid 以hprof二进制格式转储Java堆到指定filename的文件中。 来源: https://www.cnblogs.com/mrnx2004/p/12163533.html

[第三篇]JVM 信息查看

眉间皱痕 提交于 2020-01-07 15:46:12
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1. jps 打印所有java 进程 JACDONG-M-D1FJ:~ jacdong$ jps 28454 Jps 68554 OracleIdeLauncher 19436 2.jinfo -flags java 进程号 -- 查看jvm 参数 3.jinfo -sysprops java 进程号 -- 查看java 系统参数 4.jstat -class 进程号 -- 查看jvm 内存使用情况 JACDONG-M-D1FJ:~ jacdong$ jstat -class 29778 Loaded Bytes Unloaded Bytes Time 23128 46569.0 8 7.2 20.99 5.jstat -gc 进程号 -- 查看jvm gc 情况 JACDONG-M-D1FJ:~ jacdong$ jstat -gc 29778 S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT 96768.0 72704.0 0.0 72495.1 228352.0 82966.2 173568.0 110433.3 158616.0 141782.2 21504.0 17087.3 35 0.606 7 0.854 1.460

浅谈JVM

℡╲_俬逩灬. 提交于 2020-01-06 16:37:25
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 5.1 定义 Heap 堆 通过new关键字,创建对象都会使用堆内存 线程共享的,堆中对象都需要考虑线程安全的问题 有垃圾回收机制 Java 堆(Java Heap)是 Java 虚拟机所管理的内存中最大的一块 ,也被称为 “GC堆”,是被所有 线程共享 的一块内存区域, 在虚拟机启动时被创建 。 唯一目的就是 储存对象实例和数组 (JDK7 已把 字符串常量池和类静态变量 移动到 Java 堆),几乎所有的对象实例都会存储在堆中分配。随着 JIT 编译器发展, 逃逸分析、栈上分配、标量替换等 优化技术导致并不是所有对象都会在堆上分配。 Java 堆是垃圾收集器管理的主要区域 。堆内存分为新生代 (Young) 和老年代 (Old) ,新生代 (Young) 又被划分为三个区域:Eden、From Survivor、To Survivor。 5.2 堆内存溢出 如果 Java 堆尝试扩展内存的时候无法申请到足够的内存,那 Java 虚拟机将抛出一个 OutOfMemoryError 异常。 问题: 既然有垃圾回收机制,为何还会出现堆内存溢出的情况呢? 解答: 垃圾回收机制是回收不被使用的对象,当对象被引用或间接引用时,就不会被垃圾回收,导致内存占用越来越大,从而出现内存溢出。 示例代码 /** * -Xmx8m

Can jmap -histo trigger full garbage collection?

自作多情 提交于 2020-01-01 06:38:11
问题 We know that jmap -histo:live triggers a full gc in order to determine live objects: Does jmap force garbage collection when the live option is used? Since jmap -histo considers all objects in the heap (those in the young and old generation), my point is, jmap -histo can also trigger a full gc, too. However, I could not encounter a solid documentation about whether jmap -histo may trigger a full gc or not. Can jmap -histo trigger full garbage collection? 回答1: Someone with more JDK experience

Exception when taking a heapdump using JMAP

蓝咒 提交于 2019-12-30 16:25:38
问题 I get the following exception when i take a heapdump using jmap -F -dump:format=b,file=/tmp/heapdump/before.hprof 10737 Attaching to process ID 10737, please wait... Exception in thread "main" java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method

内存溢出和泄露

元气小坏坏 提交于 2019-12-28 13:20:31
一、内存溢出和内存泄露 一种通俗的说法。 1、内存溢出:你申请了10个字节的空间,但是你在这个空间写入11或以上字节的数据,出现溢出。 2、内存泄漏:你用new申请了一块内存,后来很长时间都不再使用了(按理应该释放),但是因为一直被某个或某些实例所持有导致 GC 不能回收,也就是该被释放的对象没有释放。 下面具体介绍。 1.1 内存溢出 java.lang.OutOfMemoryError,是指程序在申请内存时,没有足够的内存空间供其使用,出现OutOfMemoryError。 产生原因 产生该错误的原因主要包括: JVM内存过小。 程序不严密,产生了过多的垃圾。 程序体现 一般情况下,在程序上的体现为: 内存中加载的数据量过于庞大,如一次从数据库取出过多数据。 集合类中有对对象的引用,使用完后未清空,使得JVM不能回收。 代码中存在死循环或循环产生过多重复的对象实体。 使用的第三方软件中的BUG。 启动参数内存值设定的过小。 错误提示 此错误常见的错误提示: tomcat:java.lang.OutOfMemoryError: PermGen space tomcat:java.lang.OutOfMemoryError: Java heap space weblogic:Root cause of ServletException java.lang

【JVM命令系列】jmap

夙愿已清 提交于 2019-12-25 05:41:56
命令基本概述 Jmap是一个可以输出所有内存中对象的工具,甚至可以将VM 中的heap,以二进制输出成文本。打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其数量)。 使用方法 jmap -histo pid。如果使用SHELL ,可采用jmap -histo pid>a.log日志将其保存到文件中,在一段时间后,使用文本对比工具,可以对比出GC回收了哪些对象。jmap -dump:format=b,file=outfile 3024可以将3024进程的内存heap输出出来到outfile文件里,再配合MAT(内存分析工具)。 64位机上使用需要使用如下方式: jmap -J-d64 -heap pid 命令格式 l jmap [ option ] pid l jmap [ option ] executable core l jmap [ option ] [server-id@]remote-hostname-or-IP 参数说明 1)、options: l executable :产生core dump的java可执行程序; l core 将被打印信息的core dump文件; l remote-hostname-or-IP 远程debug服务的主机名或ip; l server-id 唯一id,假如一台主机上多个远程debug服务; 2)

Java学习笔记21-性能调优实战

空扰寡人 提交于 2019-12-24 22:58:13
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> Java学习笔记21-性能调优实战 我们这次从几个一般常见的问题分析,主要有接口请求过慢或超时,程序突然崩(挂)了,CPU、内存居高不下或忽高忽低,硬盘容量不足等,这些可能是各种情况造成,我们从内存、CPU、线程、网络等(一般都是业务代码有问题)角度分析。 内存相关问题 一、JVM启动参数配置 -Xms4g -Xmx4g: JVM堆内存的最小值、最大值设置为相等 启动时会有预热过程(堆内存小于最小值),逐渐达到最小值 启动时可直接向操作系统申请足够的内存(跳过预热):-XX:+AlwaysPreTouch 二、GC分析与调优 GC分析,主要查看GC导致的stop-the-world,这将导致我们的程序延时增大。 jcmd 查找运行中jar程序的进程号 jmap 打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情况 -Xloggc 收集GC日志(日志离线分析,主要用于检查故障看出是不是因为GC导致的程序卡顿) 通过GCViewer工具,辅助分析GC日志文件 jstat 动态监控GC统计信息,间隔1000毫秒统计一次,每10行数据后输出列标题 GC调优,切换回收器逐步调试, GC调优的过程就是对每个参数的含义了解后,再根据官方手册,一个个调试,找到符合应用的最佳配置点。是一个细致活

JVM内存区域与垃圾回收

萝らか妹 提交于 2019-12-24 22:23:57
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1、JAVA内存区域与内存溢出 1.1、概述 Java中JVM提供了内存管理机制,Java虚拟机在执行Java程序的过程中会把内分分为不同的数据区,如图: 1.2、程序计数器 程序计数器是当前线程所执行的字节码的行号指示器,作用就是根据计数器的值获取下一条要执行的字节码指令。当执行的是java方法,则记录的是正在执行的虚拟机字节码指令的地址,如果是Native方法,则这个计数器的值为空。不存在任务OutOfMemoryError。 1.3、虚拟机栈 每个普通Java方法(除去Native方法)在执行的时候都会同时创建栈帧,用于存储局部变量表、操作栈、动态链接、方法出口等信息,每个方法被调用直到完成的过程对应着栈帧在JVM栈中的入栈与出栈。其中局部变量表所需要的内存空间在编译器间完成分配。 跟虚拟机栈相关联的异常有两种: StackOverflowError 线程请求的栈深度大于虚拟机允许的最大深度。 OutOfMemoryError 虚拟机栈扩展时无法申请到足够的内存。 1.4、本地方法栈 用于虚拟机执行Native方法,其他和本地方法栈相同。也会有StackOverflowError和OutOfMemoryError。 1.5、堆 虚拟机启动后创建堆,用于存放对象实例。堆时垃圾回收器的主要工作区域

what the classname like [C [B [[C is,when i exec “jmap -histo:live 4984”?

时光总嘲笑我的痴心妄想 提交于 2019-12-24 19:55:45
问题 And is always has most instances, just like this enter codnum #instances #bytes class name ---------------------------------------------- 1: 82828 10033408 [C 2: 39920 6012864 [B 3: 18752 1950208 org.springframework.boot.loader.jar.JarEntry 4: 81007 1944168 java.lang.String 5: 16542 1455696 java.lang.reflect.Method 6: 37512 1200384 org.springframework.boot.loader.util.AsciiBytes 7: 18752 1050112 org.springframework.boot.loader.jar.JarEntryData 回答1: already has answer in comments These are JVM