-heap 查看当前jvm堆栈信息_必知必会的JVM工具系列二,读懂会用jhat,jstack,jstatd,JConsole...
1.5 jhat命令
使用 jhat 工具可以用于分析Java应用程序的堆快照内容。以前文中jmap的输出对文件 heap.hprof 为例:
jhat 在分析完成后,使用HTTP服务器展示其分析结果。在浏览器中访问http://localhost:7000/,结果如图所示。
在默认页中,jhat 服务器显示了所有的非平台类信息。单击链接进入,可以查看选中类的超类、ClassLoader 以及该类的实例等信息。此外,在页面底部,jhat还为开发人员提供了其他查询方式(Other Queries)。
通过这些链接,开发者可以进一步查看所有类信息(包括Java平台的类)。所有类的实例数量以及实例的具体信息。最后,还有一个链接指向OQL查询界面。
图中显示了在jhat中,查看Java应用程序里java.lang.String类的实例数量:
单击 instances 链接可以进一步查看 String 对象的实例,如图所示:
通常,导出的堆快照信息可以非常大,由于信息太多,可能很难通过页面上简单的链接索引找到想要的信息。为此,jhat还支持使用OQL语句对堆快照进行查询。执行 OQL 语言的界面非常简洁,如图所示。使用OQL查询出当前Java程序中所有java.io.File对象的路径。OQL如下:
select file.path.value.toString() from java.io.File file
1.6 jstack命令
jstack 可用于导出Java应用程序的线程堆栈。语法为:
jstack [-l]
-l选项用于打印锁的附加信息。
jstack 工具会在控制台输出程序中所有的锁信息,可以使用重定向将输出保存到文件,如:
jstack -l 16196 >edeadlock.txt
通过 jstack 工具不仅可以得到线程堆栈,它还能自动进行死锁检查,输出找到的死锁信息。
1.7 jstatd命令
之前所述的工具中,只涉及到监控本机的Java应用程序。而在这些工具中,一些监控工具也支持对远程计算机的监控(如:jps、jstat)。为了启用远程监控,则需要配合使用jstatd工具。
命令jstatd是一个RMI服务端程序,它的作用相当于代理服务器,建立本地计算机与远程监控工具的通信。jstatd服务器将本机的Java应用程序信息传递到远程计算机。
直接打开jstatd服务器可能会抛出访问拒绝异常:
这是由于jstatd程序没有足够的权限所致,可以使用Java的安全策略,为其分配相应的权限,下面代码为jststd分配了最大的权限,将其保存在jstatd.all.policy文件中:
grant codebase "file:${java.home}/../lib/tools.jar" {permission java.security.AllPermission;};
然后,使用以下命令再次开启jstatd服务器:
jstatd -J-Djava.security.policy=c:jstatd.all.policy
服务器即可开启成功。
-J参数是一个公共的参数,如jps、jstat等命令都可以接受这个参数。由于jsp、jstat命令本身也是Java应用程序,-J参数可以为jps等命令本身设置其JVM参数。
默认情况下,jstatd 将在1099端口开启RMI服务器:
使用jps命令显示远程计算机的Java进程:
jps localhost:1099
使用jstat命令显示远程进程460的GC情况:
jstat -gcutil 460@localhost:1099
1.8 hprof工具
hprof不是独立的监控工具,它只是一个Java agent工具,它可以用于监控Java应用程序在运行时的CPU信息和堆信息。使用 java -agentlib:hprof=help 命令可以查看hprof 的帮助文档。下面是 hropf 工具帮助信息的输出:
使用hprof工具可以查看程序中各个函数的CPU占用时间。以下代码包含3个方法,分别占用不同的CPU时间:
public class HProfTest { public void slowMethod(){ try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } public void slowerMethod(){ try { Thread.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); } } public void fastMethod(){ try { Thread.yield(); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { HProfTest hProfTest = new HProfTest(); hProfTest.fastMethod(); hProfTest.slowMethod(); hProfTest.slowerMethod(); }}
使用参数-agentlib:hprof=cpu=times,interval=10运行以上代码。times选项将会在Java函数的调用前后记录函数的执行时间,进而计算函数的执行时间。hprof=cpu是针对cpu统计时间。interval=10 采样10次。程序运行后会发现多了一个文本文件java.hprof.txt,打开后查看部分输出如下,可以很容易看到运行时间最长的函数:
使用参数-agentlib:hprof=heap=dump,format=b,file=e:core.hprof 运行程序,可以将应用程序的堆快照保存在指定文件 e:core.hprof 中。使用MAT或者Visual VM等工具可以拆这个堆文件。
使用参数 -agentlib:hprof=heap=sites 运行程序,可以输出Java应用程序中各个类所占的内存百分比,部分输出如下:
2.JConsole工具
JConsole(Java Monitoring and ManagementConsole)工具时JDK自带的图形化性能监控工具。通过JConsole工具,可以查看Java应用程序的运行概况,监控堆信息、永久区使用情况、类加载情况等。本节主要介绍JConsole工具的基本使用方法。
2.1 JConsole连接Java程序
JConsole 程序在%JAVA_HOME%/bin目录下,双击启动后,程序便要求指定连接Java应用程序,如图所示。
在罗列的本地Java应用程序选择PID为15908的程序,连接。
如果需要使用JConsole连接远程进程,则需要在远程Java应用程序启动时,加上如下参数:
-Djava.rmi.server.hostname=127.0.0.1 #远程服务器的ip地址-Dcom.sun.management.jmxremote-Dcom.sun.management.jmxremote.port=8888 #指定jmx监听的端口-Dcom.sun.management.jmxremote.authenticate=false #是否开启认证-Dcom.sun.management.jmxremote.ssl=false #是否开启ssl
基于以上配置启动的Java应用程序,通过JConsole在远程连接时,只需要填写如下远程进程即可:
127.0.0.1:8888
2.2 Java程序概况
在连接上Java应用程序后,便可以查看应用程序概况。
2.3 内存监控
切换到内存监控页面,JConsole 可以显示当前内存的详细信息。这不仅是包括堆内存的整体信息,更细化到eden区、survivior 区、老年代的使用情况。同时,也包括非堆区,即永久代的使用情况,如图所示,单机界面右上角的“执行GC”按钮,可以强制应用程序进行一次Full GC。
2.4 线程监控
JConsole 中的线程选项卡允许开发人员监控程序内的线程,如图所示。JConsole 显示了系统内的线程数量,并在屏幕下方,显示了程序中所有的线程。单击线程名称,便可以查看线程的栈信息。
使用最下方的“监测死锁”按钮。还可以自动监测多线程应用程序的死锁情况。
2.5 类加载情况
JConsole的类页面如图所示,显示了系统以及装载的类数量。在详细信息栏中,还显示了已卸载的类数量。
2.6 虚拟机信息
在VM摘要页面,JConsole 显示了当前应用程序的运行环境。包括虚拟机类型、版本、堆信息以及虚拟机参数等。
2.7 MBean管理
MBean页面允许通过JConsole进行MBean的管理,包括查看或者设置MBean的属性、运行MBean的方法等。下图是MBean的管理界面,这里选中了Memory的Verbose属性。通过修改Verbose的属性值,可以在程序运行时动态打开或者关闭GC的输出信息。
MBean种类繁多。主要的操作如下:
2.8 使用插件
除了基本功能之外,JConsole还支持插件扩展。在JDK的安装目录下,就有一个自带的JConsole插件。使用以下命令可以让JConsole加载插件并启动:
jconsole -pluginpath C:Javajdk1.6.0_22demomanagementJTopJTop.jar
JConsole启动后,连接到任意Java应用程序,便可以进入JTop页面。
作者:像风一样原文:https://www.cnblogs.com/yueshutong/p/9812464.html
-heap 查看当前jvm堆栈信息_必知必会的JVM工具系列二,读懂会用jhat,jstack,jstatd,JConsole...相关推荐
- jstack 工具 查看JVM堆栈信息
1|0介绍 jstack是java虚拟机自带的一种堆栈跟踪工具.jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项&q ...
- adb查看activity的堆栈信息
adb查看activity的堆栈信息 adb shell dumpsys activity 该命令可以看到当前运行的是哪个activity,运行的一些进程等 看到运行的进程信息: ACTIVITY M ...
- SpringBoot入门到精通_第6篇 _必知必会
接上一篇:SpringBoot入门到精通_第5篇 _SpringBoot Actuator监控 https://blog.csdn.net/weixin_40816738/article/detail ...
- mysql日期维表sql文件_《MySQL必知必会》笔记(SQL练习+建表语句)
站在巨人的肩上 Standing On Shoulders Of Giants 部分转自:https://www.jianshu.com/p/294502893128 https://blog.csd ...
- c2064 项不会计算为接受0个参数的函数_【JS必知必会】高阶函数详解与实战
本文涵盖 前言 高级函数概念 函数作为参数的高阶函数 map filter reduce sort详解与实战 函数作为返回值的高阶函数 isType函数与add求和函数 如何自己创建高阶函数 前言 一 ...
- java的标量和聚合量_第5节:Java基础 - 必知必会(下)
第5节:Java基础 - 必知必会(下) 本小节是Java基础篇章的第三小节,主要讲述Java中的Exception与Error,JIT编译器以及值传递与引用传递的知识点. 一.Java中的Excep ...
- gns3中两个路由器分别连接主机然后分析ip数据转发报文arp协议_关于TCP/IP,必知必会的十个问题!...
本文整理了一些TCP/IP协议簇中需要必知必会的十大问题,既是面试高频问题,又是程序员必备基础素养. TCP/IP十个问题 TCP/IP十个问题 一.TCP/IP模型 TCP/IP协议模型(Trans ...
- SpringBoot入门到精通_第7篇 _必知必会总结
接上一篇:SpringBoot入门到精通_第6篇 _必知必会
- shell sort 最后一列排序_十个必知的排序算法|Python实例系列[1]
实例内容: 十个必知的排序算法具体代码,并简略的得知每种算法对于不同长度数列的排序时间 十大排序: 1.冒泡排序2.选择排序3.插入排序4.希尔排序5.归并排序6.快速排序7.堆排序8.计数排序9.桶 ...
最新文章
- window.open()函数参数说明
- mysql9索引实战_课程介绍目录索引
- Solr(搜索引擎服务)和MongoDB通过mongodb-connector进行数据同步的解决方案,以及遇到的各种坑的总结(针对solr-5.3.x版本),mongodb和solr实现实时增量索引
- JAVA学习--面向对象的特征二:继承性
- BAPI_GOODSMVT_CREATE 移动类型311 CODE = '04' 代码
- iphone 原型工具
- 深入理解JAVA虚拟机——个人阅读笔记
- ubuntu14.04中安装open jdk1.8以及报错解决分析
- android 随音乐跳动,随心音乐,让心跟着跳动起来
- flash player 10 beta已经放出
- 【技术分享】select下拉框option默认选中(php模板渲染)
- 【PS技能+】简单几步教会你使用PS制作GIF动图
- java面试,经常遇到面试官的问题
- java版微信三级分销完整源码
- 10000小时定律:成为大牛的秘密是什么?
- EV3文件打不开,闪退怎么办(完美解决,无弹窗,无警告)
- C语言将UTC时间转为时区时间的方法参考
- 配置Web DashBoard
- 非本小伙花了两年从小公司到蚂蚁金服,面试经验分享
- lisp画垫圈_基于DCL和AutoLISP语言开发的垫圈标准件库
热门文章
- Spring Boot 2.x基础教程:使用Redis的发布订阅功能
- 皮一皮:这就是我的开发水平...
- 你知道线程池创建多少线程比较合理吗?
- 每日一皮:叫你们别上泰坦尼克,嗓子都喊哑了!没一个听我的,最后还把我......
- 赠书:算法与数据中台“网约车业务实践”
- 提升系统 10 倍性能的 10 个建议!
- 使用Quarkus在Openshift上构建微服务的快速指南
- 中国式微服务技术栈2.0
- 外国人看我国量子计算机祖冲之号,1.2小时完成超算8年!我国“祖冲之号”量子计算机刷新记录...
- c++ 动态分配内存