博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JDK自带的JVM工具
阅读量:2420 次
发布时间:2019-05-10

本文共 1933 字,大约阅读时间需要 6 分钟。

目录

 

虚拟机工具可以分析jvm运行时数据、定位jvm存在的问题。这些工具在jdk的bin目录下,前面的均只作为了解,实际只使用最后2个。

 

jdk自带的jvm工具

jps 查看jvm进程、jvm参数

#查看正在执行的虚拟机进程,和ps -ef|grep java相似,也可以使用ps -ef | grep xxx代替#会输出pid,主类显示全限定类名,如果执行的是jar则显示jar的路径jps -l #查看jvm参数jps -v

 

jstat 查看jvm的运行状态

#pid、间隔多少ms输出1次、输出次数。缺省输出次数时,默认一直输出jstat -gc 16340 1000 10

在这里插入图片描述

  • S0C、S1C:第一个、第二个Survivor区的容量(from、to),S是Survivor、C是Capacity
  • S0U、S1U:第一个、第二个Survivor区已使用的容量,U是used
  • EC、 EU:Eden区的容量、已用容量
  • OC、OU:老年代的容量、已用容量,O是old
  • MC、MU:方法区的
  • CCSC、CCSU:压缩的类空间的
  • YGC、YGCT:新生代垃圾回收次数、消耗时间,Y是young,GC就是gc,T是time
  • FGC、FGCT:老年代的,FGC是Full GC 老年代GC
  • GCT:垃圾回收消耗总时间

 

jinfo 查看jvm参数

#查看指定进程(pid)的信息,包括操作系统的信息、环境变量、jvm参数等jinfo 16340#查看指定进程的全部jvm参数jinfo -flags 16340#查看指定进程的指定jvm参数,也可以通过grep过滤得到jinfo -flag MaxHeapSize 16340

 

jstack 查看线程快照

线程快照可以定位线程出现长时间停顿的原因,比如线程间死锁、死循环、等待获取锁等

#查看线程快照,包括线程名、线程状态、执行到那个类的哪一行代码、持有的锁jstack -l 28584  #pid#检查线程死锁jstack -m 28584  #pid

eg. 线程死锁时的线程快照:

在这里插入图片描述
会列出发生死锁的线程,死锁原因、代码位置

 

jmap 查看堆的使用情况、生成堆快照

#查看堆的使用情况,包括最大|小堆内存、各年代的使用情况jmap -heap 28180 # 查看所有的类的实例,包括类名、实例个数、每个实例的大小# 部分类名会简写,比如B=>byte,C=>char,I=>intjmap -histo 28180# 信息很多,可以使用管道命令分页查看jmap -histo 28180 | more# 生成堆快照文件。windows路径用\,linux用/jmap -dump:format=b,file=D:\heap_dump.hprof  28180  #pidjmap -dump:format=b,file=/usr/local/heap_dump.hprof 28180
#jvm参数,发生OOM异常时自动生成dump文件,可用于复盘、定位问题-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:\mall\

 

jhat 分析堆快照

#默认使用端口7000,访问localhost:7000即可查看堆快照的分析信息jhat xxx.hprof#可以-p指定使用的端口jhat -p 9000 xxx.hprof

 

jconsole jvm状态可视化查看工具

可以查看本地、远程的jvm运行状态,信息多样

jconsole#如果检测不到本地jvm进程时,可以手动指定jvm进程的pidjconsole 17412

 

jvisualvm 更加强大的jvm状态可视化查看工具

#指定jvm进程的pidjvisualvm --openpid 17412#如果提示不能打开指定进程,删除hsperfdata_xxx文件夹后重试,xxx换为自己的用户名#C:\Users\xxx\AppData\Local\Temp\hsperfdata_xxx

IDEA可安装插件 VisualVM Launcher,设置VisualVM execuatble的路径为jdk bin目录下的jvisualvm.exe,这样就可以直接在IDEA中使用jvisualvm。

 

内存泄漏

  • 堆内存泄漏,常见现象:heap使用量明显上升、经常达到最大堆内存,出现OOM或频繁Full GC。解决方案:dump分析堆快照
  • 堆外内存泄漏:heap使用量很低、无明显变化,但出现OOM会频繁Full GC。解决方案:VisualVM -> 工具 -> 插件 -> 可用插件 -> 安装Btrace 进行分析

转载地址:http://kkhlb.baihongyu.com/

你可能感兴趣的文章
微信手机 WeOS 的可行性到底有多大?
查看>>
阿里面试,我挂在了第四轮……
查看>>
C++ 程序员到高级架构师,必须经历的三个阶段
查看>>
和 Java、C# 等语言对比后,Python 简直酷上天了!
查看>>
程序媛到最后,拼的到底是什么?
查看>>
笑死!996 程序员竟然做了这个梦!| 每日趣闻
查看>>
“再见,微软!”
查看>>
ARM 发布新一代 CPU 和 GPU,实现 20% 性能提升!
查看>>
技术引路:机器学习仍大有可为,但方向在哪里?
查看>>
漫画:如何给女朋友解释什么是编译与反编译
查看>>
刷屏了!这篇 Python 学习贴,90% 的程序员都用的上!
查看>>
漫画:如何给女朋友解释什么是适配器模式?
查看>>
程序员又迎来一个好消息! | 每日趣闻
查看>>
Mac 被曝存在恶意漏洞:黑客可随意调动摄像头,波及四百万用户!
查看>>
拒绝与其他码农一致!CSDN定制T让你成为最靓的仔
查看>>
程序员情商低?看完这 4 类程序员我懂了!
查看>>
《长安十二时辰》里你不能不知道的 IT 技术 | 每日趣闻
查看>>
程序员爬取 3 万条评论,《长安十二时辰》槽点大揭秘!
查看>>
一年参加一次就够,全新升级的 AI 开发者大会议程出炉!
查看>>
基于 XDanmuku 的 Android 性能优化实战
查看>>