首页 > 其他 > 详细

JDK内置工具使用(性能分析)

时间:2019-03-27 17:37:36      阅读:156      评论:0      收藏:0      [点我收藏+]

# 1、JPS

**1、jps -lvm**:用于查看当前机器上已装载的jvm


# 2、jstack
jstack命令主要用来查看Java线程的调用堆栈的,可以用来分析线程问题(如死锁)

**1、jstack -l pid:** 查看某个进程的堆栈信息
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190214130559650.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NpbmF0XzQxOTE3MzA2,size_16,color_FFFFFF,t_70)
dump 文件里,值得关注的线程状态有:

> 1. 死锁:Deadlock(重点关注)
>2. 执行中:Runnable
>3. 等待资源:Waiting on condition(重点关注)
>4. 等待获取监视器:Waiting on monitor entry(重点关注)
>5. 暂停:Suspended
>6. 对象等待中:Object.wait() 或 TIMED_WAITING
>7. 阻塞:Blocked(重点关注)
>8. 停止:Parked


**2、 jstack -l pid >文件名** :生成线程快照


# 3、jmap
jmap命令可以获得运行中的jvm的堆的快照,从而可以离线分析堆,以检查内存泄漏,检查一些严重影响性能的大对象的创建,检查系统中什么对象最多,各种对象所占内存的大小等等

**1、jmap -heap PID**:打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情况
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190305153440190.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NpbmF0XzQxOTE3MzA2,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190305153502827.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NpbmF0XzQxOTE3MzA2,size_16,color_FFFFFF,t_70)
**2、jmap -histo pid**:展示class的内存情况

**3、jmap -histo:live pid>a.log**
可以观察heap中所有对象的情况(heap中所有生存的对象的情况)。包括对象数量和所占空间大小。 可以将其保存到文本中去,在一段时间后,使用文本对比工具,可以对比出GC回收了哪些对象。

**3、jmap -dump:format=b,file=文件名.dump PID**:生成内存dump文件
该命令通常用来分析内存泄漏OOM,通常做法是:
参考:https://mp.csdn.net/mdeditor/87294188#


# 4、jstat
Jstat用于查看gc垃圾回收使用情况:
- 类的加载及卸载情况
- 查看新生代、老生代及持久代的垃圾收集情况,包括垃圾回收的次数及垃圾回收所占用的时间

![jstat \[-option\] pid \[<interval> \[<count>\]\]](https://img-blog.csdnimg.cn/20190218174753585.png)
option:我们经常使用的选项有gc、gcutil
vmid:java进程id
interval:间隔时间,单位为毫秒
count:打印次数

**1、jstat -gcutil 15774 1000 10**
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190305150557230.png)
s0:年轻代中第一个survivor已使用的占当前容量百分比

s1:年轻代中第二个survivor已使用的占当前容量百分比

E:年轻代中Eden已使用的占当前容量百分比

O:老年代中已使用的占当前容量百分比

P:永久代中已使用的占当前容量百分比

**2、jstat -gc 15774 1000 10**
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190305150923129.png)
S0C:年轻代第一个survivor的容量(字节)

S1C:年轻代第二个survivor的容量(字节)

S0U:年轻代第一个survivor已使用的容量(字节)

S1U:年轻代第二个survivor已使用的容量(字节)

EC:年轻代中Eden的空间(字节)

EU:年代代中Eden已使用的空间(字节)

OC:老年代的容量(字节)

OU:老年代中已使用的空间(字节)

PC:永久代的容量

PU:永久代已使用的容量

YGC:从应用程序启动到采样时年轻代中GC的次数

YGCT:从应用程序启动到采样时年轻代中GC所使用的时间(单位:S)

FGC:从应用程序启动到采样时老年代中GC(FULL GC)的次数

FGCT:从应用程序启动到采样时老年代中GC所使用的时间(单位:S)


转:https://www.cnblogs.com/kongzhongqijing/articles/3621163.html

JDK内置工具使用(性能分析)

原文:https://www.cnblogs.com/heishuichenzhou/p/10609085.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!