JVM系列 实用命令(jmap、jstat、jstack)

概论
命令监控最方便,但是最优的方式是通过工具打开监控:比如jconsole、jvisualvm,几乎全部的信息都有了,另外jvisualvm支持远程监控,但是需要做一些配置
使用命令的目的

获取垃圾回收器的类型和系统参数 // jmap -heap pid
查看应用启动的参数// jinfo -flags pid
查看当前各个代区的容量和使用量情况 // jstat
FGC、YGC的总次数和总耗时 // jstat
立即生成Dump文件 //jmap -dump:live,file=dump_001.bin PID
强制FullGC // jmap -dump:live
查看线程的运行信息(包括死锁的线程) // jstack -l pid

jmap命令

heap pid:查看 JDK的概况的最好的一个参数

JVM主要参数:垃圾回收器的类型、各种ratio、当前实际Size、MaxSize是多少

当前各个代区的使用情况:Eden、From、To、Old区、Perm区



参数解读

垃圾回收器: parallel + Concurrent Mark-Sweep
堆区MaxSize是4G,也就是默认是操作系统的1/4,16G*1/4=4G
堆区低于40%,或者大于70% 会自动调整老年代的大小(但是不能低于xms的配置 2G,也不能高于 MaxSize 4G)
Perm区 最大1G ,如我们配置
老年代(concurrent mark-sweep generation)容量:1715.25MB
年轻代:New Generation + 1 Survivor Space= 299.5MB+33.25MB
堆区的当前容量:1715.25+299.5+33.25=2048M

dump:生成快照文件,然后可以利用工具(比如jvisualvm)来分析dump包
dump堆到文件,format指定输出格式,live指明是活着的对象,file指定文件名

./jmap -dump:live,format=b,file=/usr/developer/huangForBackUp/test20190129.dump 25508

jmap还有一个额外的功能,通过命令触发FullGC,比如可以执行定时任务,在业务低峰期执行,会自动触发FullGC
因为在*:live前会进行full gc,如果带上live则只统计活对象,因此不加live的堆大小要大于加live堆的大小

jmap -histo:live <pid>
jmap -dump:live,file=dump_001.bin PID

jstat命令
gc: 主要查看FGC、YGC的总次数和累计耗时
查看堆内各个代区的当前容量和当前使用量(当前容量不等于MaxCapactiy,当前容量是根据条件动态调整的),因为当前容量不等于Max容量所以在定位问题的时候,没有太多的使用价值

- S0C : survivor0区的总容量
- S1C : survivor1区的总容量
- S0U : survivor0区已使用的容量
- S1C : survivor1区已使用的容量
- EC : Eden区的总容量
- EU : Eden区已使用的容量
- OC : Old区的总容量
- OU : Old区已使用的容量
- PC 当前perm的容量 (KB)
- PU perm的使用 (KB)
- YGC : 新生代垃圾回收次数
- YGCT : 新生代垃圾回收时间
- FGC : 老年代垃圾回收次数
- FGCT : 老年代垃圾回收时间
- GCT : 垃圾回收总消耗时间

gcutil:功能和gc 一样,但是是百分比的形式,读取更友好

gccapacity:读取各个代区的当前容量、最大容量、当前使用量等信息

NGCMN : 新生代占用的最小空间
NGCMX : 新生代占用的最大空间
OGCMN : 老年代占用的最小空间
OGCMX : 老年代占用的最大空间
OGC:当前年老代的容量 (KB)
OC:当前年老代的空间 (KB)
PGCMN : perm占用的最小空间
PGCMX : perm占用的最大空间

命令的使用:

./jstat -gc 91328
./jstat -gcutil 91328
./jstat -gccapacity 91328

jstack -l pid >> stackLog.log //-l 表示包括线程死锁的信息
输出当前应用的线程使用信息,其中包括线程死锁的相关信息

原文地址:https://blog.51cto.com/13981400/2389698

时间: 2024-10-23 04:20:36

JVM系列 实用命令(jmap、jstat、jstack)的相关文章

JVM调优命令-jmap

jmap JVM Memory Map命令用于生成heap dump文件,如果不使用这个命令,还可以使用-XX:+HeapDumpOnOutOfMemoryError参数来让虚拟机出现OOM的时候自动生成dump文件. jmap不仅能生成dump文件,还可以查询finalize执行队列.Java堆和永久代的详细信息,如当前使用率.当前使用的是哪种收集器等.[内存分析] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 2

JVM常用分析工具JPS/JINFO/JSTACK/JSTAT/JMAP详解

最近一直在上项目,导致博主天天加班幸福感爆棚,有木有. 平时一直没有关注过JVM,最近上了一个新的项目,它对内存的需求量比较大,导致目前项目在用的JVM参数不能满足他的需求.起初还没发现是这方面问题,后来在启动的时候报错了,一报错不要紧,要紧就要紧在博主我要调整JVM的参数了.调整参数也不要紧,更要紧的是调不对很让我着急. 因此,我就百谷了下,对JVM的相关内容突击了一下,受益匪浅啊. 废话不扯了,下面就是我的学习笔记啦.本篇博文就和大家分享下平时去分析JVM以及排故障时需要用到的几款工具. 目

JVM调优工具的使用(jps,jstat,jstack,jmap,jhat)

JDK本身提供了很丰富的性能监控工具,除了集成式的visualVM和jConsole外,还有jstat,jstack,jps,jmap,jhat小工具,这些都是性能调优的常用工具 我们在Java的开发中,常常会遇到下面这些问题: 1内存不足,2内存泄漏,3锁争用,4线程锁死,5java进程消耗CPU过高等 这些问题出现的时候 大家常常通过重启服务器或者调大内存来临时解决 一,jps命令 jps主要用来输出JVM中运行的进程状态信息 命令行参数选项: -q 不输出类名.Jar名和传入main方法的

jvm监控工具jps,jstat,jstack,jmap的使用方法

在平常运维分析jvm的时候通常用到的工具的jps,jstat,jstack,jmap用于分析tomcat遇到的各种问题 tomcat常见的问题有: OOM,线程死锁(lock dead),锁争用(lock contention),Java消耗过多的CPU 可以通过以上工具进行分析 生产常用分析方法快速入口: #jps        --> 查看运行的java进程 #jstat -gc 进程pid --> 查看进程新生代老年代的内存使用情况,年轻代老年代垃圾收集次数及时间 #jstat -gcc

JDK的命令行工具系列 (一) jps、jstat

概述 在我们进行故障定位和性能分析时, 可以使用Java Dump(也叫Dump文件)来帮助排查问题, 它记录了JVM运行期间的内存占用和线程执行等情况.其中Heap Dump文件是二进制格式, 它保存了某一时刻的系统信息.虚拟机属性.完整的线程Dump.所有类和对象的状态等, 是指定时刻的java堆栈的快照; Thread Dump文件是纯文本格式, 它保存了java应用程序各线程在某一时刻的运行位置. 在%JAVA_HOME%\lib目录下, 有一些诸如jps.exe.jstack.exe.

Java命令学习系列(四)——jstat

jstat(JVM Statistics Monitoring Tool)是用于监控虚拟机各种运行状态信息的命令行工具.他可以显示本地或远程虚拟机进程中的类装载.内存.垃圾收集.JIT编译等运行数据,在没有GUI图形的服务器上,它是运行期定位虚拟机性能问题的首选工具. jstat位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控.可见,Jstat是轻量级的.专门针对JVM的工具,非常适用. js

jvm系列(八):jvm知识点总览-高级Java工程师面试必备

在江湖中要练就绝世武功必须内外兼备,精妙的招式和深厚的内功,武功的基础是内功.对于武功低(就像江南七怪)的人,招式更重要,因为他们不能靠内功直接去伤人,只能靠招式,利刃上优势来取胜了,但是练到高手之后,内功就更主要了.一个内功低的人招式在奇妙也打不过一个内功高的人.比如,你剑法再厉害,一剑刺过来,别人一掌打断你的剑,你还怎么使剑法,你一掌打到一个武功高的人身上,那人没什么事,却把你震伤了,你还怎么打.同样两者也是相辅相成的,内功深厚之后,原来普通的一招一式威力也会倍增. 对于搞开发的我们其实也是

深入JVM系列(二)之GC机制、收集器与GC调优(转)

一.回顾JVM内存分配 需要了解更多内存模式与内存分配的,请看 深入JVM系列(一)之内存模型与内存分配 1.1.内存分配: 1.对象优先在EDEN分配2.大对象直接进入老年代 3.长期存活的对象将进入老年代 4.适龄对象也可能进入老年代:动态对象年龄判断 动态对象年龄判断: 虚拟机并不总是要求对象的年龄必须达到MaxTenuringThreshold才能晋升到老年代,当Survivor空间的相同年龄的所有对象大小总和大于Survivor空间的一半,年龄大于或等于该年龄的对象就可以直接进入老年代

深入JVM系列(二)之GC机制、收集器与GC调优

一.回想JVM内存分配 须要了解很多其它内存模式与内存分配的,请看 深入JVM系列(一)之内存模型与内存分配 1.1.内存分配: 1.对象优先在EDEN分配 2.大对象直接进入老年代 3.长期存活的对象将进入老年代 4.适龄对象也可能进入老年代:动态对象年龄推断 动态对象年龄推断: 虚拟机并不总是要求对象的年龄必须达到MaxTenuringThreshold才干晋升到老年代,当Survivor空间的同样年龄的全部对象大小总和大于Survivor空间的一半,年龄大于或等于该年龄的对象就能够直接进入