首页 > 其他分享 >JVM-常用工具(jps、jstat、jinfo、jmap、jhat、jstack、jconsole、jvisualvm)使用

JVM-常用工具(jps、jstat、jinfo、jmap、jhat、jstack、jconsole、jvisualvm)使用

时间:2023-06-01 10:45:10浏览次数:50  
标签:java 虚拟机 jstack 线程 jconsole JVM Java 常用工具

场景

记录JVM中常用工具。

jps:虚拟机进程状态工具

jps(JVM Process Status Tool):虚拟机进程状态工具,可以列出正在运行的虚拟机进程,

并显示虚拟机执行主类(Main Class,main()函数所在的类)的名称,以及这些进程的本地虚拟机的唯一ID。

命令格式:

jps [options] [hostid]

示例:

jps -l

 

选项:

-q 只输出LVMID,省略主类的名称
-m 输出虚拟机进程启动时传递给main()函数的参数
-l 输出主类的全名,如果进程执行的是jar包,输出jar路径
-v 输出虚拟机进程启动时JVM参数

jstat:虚拟机统计信息监控工具

用于监控虚拟机各种运行状态信息的命令行工具。

它可以显示本地或远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据,

它是运行期定位虚拟机性能问题的首选工具。

语法:

jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]

示例:

jstat -gcutil 27024 5000 10

以上代表5000毫秒执行一次,一共执行10次,查看id为27024的gcutil对应选项的信息。

 

选项:

-class 监视类装载、卸载数量、中空间及类装载所耗费的时间
-gc 监视Java堆状况,包括Eden区、2个Survivor区、老年代、永久代等容量、已用空间、GC合计时间等信息
-gccapacity 监视内容与-gc基本相同,但输出主要关注java堆各区域使用到的最大和最小空间
-gcutil 监控内容与-gc基本相同,但输出主要关注已使用空间占总空间的百分比
-gccause 与-gcutil功能一样,但是会额外输出导致上一次GC产生的原因
-gcnew 监视新生代GC的状况
-gcnewcapacity 监视内容与-gcnew基本相同,输出主要关注使用到的最大和最小空间
-gcold 监视老年代GC的状况
-gcoldcapacity 监视内容与-gcold基本相同,输出主要关注使用到的最大和最小空间
-gcpermcapacity 输出永久代使用到的最大和最小空间
-compiler 输出JIT编译器编译过的方法、耗时等信息
-printcompilation 输出已被JIT编译的方法

jinfo:jvm配置信息工具

jinfo(Configuration Info for Java)的作用是实时地查看和调整虚拟机的各项参数。

使用jps -v 可以查看虚拟机启动时显示指定的参数列表,但是如果想知道未被显示指定的参数的系统默认值,

除了去找资料外,就只能使用jinfo的-flag选项进行查询了。

命令格式:

jinfo [options] pid

选项:

-flags:查看JVM运行时环境参数;
-sysprops:查看JVM系统属性;
-classloader:查看JVM中已加载的类加载器信息;
-jvmflags:查看JVM启动时的参数;
-heap:查看JVM堆内存信息;
啥也不加:查看以上所有

示例:

 

jmap:java内存映射工具

jdk安装后会自带一些小工具,jmap命令(Memory Map for Java)是其中之一。

主要用于打印指定Java进程(或核心文件、远程调试服务器)的共享对象内存映射或堆内存细节。

jmap命令可以获得运行中的jvm的堆的快照,从而可以离线分析堆,以检查内存泄漏,

检查一些严重影响性能的大对象的创建,检查系统中什么对象最多,各种对象所占内存的大小等等。

格式:

jmap [option] pid

选项:

-dump 生成java堆转储快照,格式为:-dump:[live,]format=b,file=<filename>,其中live子参数说明是否只dump出存活对象
-finalizerinfo 显示在F-Queue中等待Finalizer线程执行finalize方法的对象,只在linux/solaris平台下有效
-heap 显示堆详细信息,如使用哪种回收期、参数配置、分带状况等,只在linux/solaris平台下有效
-histo 显示堆中对象统计信息,包括类、实例数量和合计容量
-permstat 以ClassLoader为统计口径显示永久代内存状况,只在linux/solaris平台下有效
-F 当虚拟机进程对-dump选项没有响应时,可以使用这个选项强制生成dump快照,只在linux/solaris平台下有效

示例:

 

jhat:虚拟机堆转储快照分析工具

jhat也是jdk内置的工具之一。主要是用来分析java堆的命令,可以将堆中的对象以html的形式显示出来,

包括对象的数量,大小等等,并支持对象查询语言。

使用jmap等方法生成java的堆文件后,使用其进行分析。

使用jmap生成java的堆文件

jmap-dump:format=b,file=D:/1.hprof 27024

然后分析堆文件

jhat D:/1.hprof

 

成功后访问7000端口

 

jstack:java堆栈跟踪工具

jstack是java虚拟机自带的一种堆栈跟踪工具。jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,
如果是在64位机器上,需要指定选项”-J-d64”,Windows的jstack使用方式只支持以下的这种方式:

jstack [-l] pid

主要分为两个功能:
针对活着的进程做本地的或远程的线程dump
针对core文件做线程dump

jstack用于生成java虚拟机当前时刻的线程快照。
线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,
如线程间死锁、死循环、请求外部资源导致的长时间等待等。
线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做什么事情,或者等待什么资源。
如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,
从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。
另外,jstack工具还可以附属到正在运行的java程序中,看到当时运行的java程序的java stack和native stack的信息,
 如果现在运行的java程序呈现hung的状态,jstack是非常有用的。

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

基本参数:

-F 当’jstack [-l] pid’没有响应的时候,强制打印线程堆栈信息,一般情况不需要使用
-l 长列表. 打印关于锁的附加信息,例如属于java.util.concurrent的ownable synchronizers列表,会使得JVM停顿得长久得多(可能会差很多倍,比如普通的jstack可能几毫秒和一次GC没区别,加了-l 就是近一秒的时间),-l 建议不要用,一般情况不需要使用
-m 打印java和native c/c++框架的所有栈信息.可以打印JVM的堆栈,显示上Native的栈帧,一般应用排查不需要使用
-h | -help打印帮助信息
pid 需要被打印配置信息的java进程id,可以用jps查询

示例:

jstack -l 27024

 

jconsole:Java监视与管理控制台

JConsole(java monitoring and management console)是一款基于JMX的可视化监视和管理工具。

使用:

点击JDK/bin 目录下面的“jconsole.exe”即可启动
然后会自动自动搜索本机运行的所有虚拟机进程
选择其中一个进程可开始进行监控

具体流程可参考下文

Java中数据同步-synchronized关键字与Mointor的使用:

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/126743812

jvisualvm:Java多合一故障处理工具

VisualVM 是一款免费的,集成了多个 JDK 命令行工具的可视化工具,它能为您提供强大的分析能力,

对 Java 应用程序做性能分析和调优。这些功能包括生成和分析海量数据、跟踪内存泄漏、监控垃圾回收器、

执行内存和 CPU 分析,同时它还支持在 MBeans 上进行浏览和操作。本文主要介绍如何使用 VisualVM 进行性能分析及调优。

VisualVM位于{JAVA_HOME}/bin目录中。

点击jvisualvm.exe启动

 

标签:java,虚拟机,jstack,线程,jconsole,JVM,Java,常用工具
From: https://www.cnblogs.com/badaoliumangqizhi/p/17448257.html

相关文章

  • table常用工具函数 - 表用法
     table_ext.lua---如果table不为空则新建functiontable.getEmptyTable(tb)ifnil==tbornil~=next(tb)thenreturn{}endreturntbendfunctiontable.isEmpty(tb)returnnil==tbornil==next(tb)endfunctiontable.swap(tb,k1......
  • Java-Day-22( 线程一:相关概念 + 继承 Thread 类 + 实现 Runnable 接口 + JConsole 监控
    Java-Day-22线程相关概念程序:是为完成特定任务、用某种语言编写的一组指令的集合(就是平常所写代码)进程:运行中的程序,例如,打开一个软件就启动一个进程,操作系统就会给每个启动的软件分配一新的内存(活动进程占用的物理内存)空间进程是程序的一次执行过程,或是正在运......
  • 浅谈接口测试及常用工具介绍
    前言目前软件测试行业做功能测试和接口测试的人相对比较多。API测试是一种作为集成测试的一部分、通过直接控制被测应用的接口(API)来确定是否在功能、可靠性、性能和安全方面达到预期的软件测试活动。由于API都没有GUI界面,API测试都是在通讯层进行的。现在API测试在自动化......
  • java:常用工具类库
    最近一直在减少造轮子的做法,简单总结了一下各个工具类库:排名不分先后,链接的地址为自己找了几个比较合适的例子,供参考。 1、ApacheCommonApacheCommons是对JDK的拓展,包含了很多开源的工具,用于解决经常会遇到的问题,减少重复工作。 2、GoogleGuava Guava工程包含了若干......
  • 【内存分析】用于内存分析定位的指令 jmap, jstat, jinfo, jstack
    用于内存分析定位的指令/工具有:jmap,jstat,jinfo,jstackjmap(1)分析进程中的内存使用情况,是多少个什么样的对象占用了多大的内存,这类型的分析(2)也可以导出堆转储文件,导出后,再来分析jstack这个是看cpu的,看各个线程的执行状态,如果cpu比较高,就是用jstack来定位分析......
  • 常用工具函数
    日常开发中,面对各种不同的需求,我们经常会用到以前开发过的一些工具函数,把这些工具函数收集起来,将大大提高我们的开发效率。1、校验数据类型exportconsttypeOf=function(obj){returnObject.prototype.toString.call(obj).slice(8,-1).toLowerCase()}示例:typeOf('......
  • SSH客户端常用工具SecureCRT操作
    1.1SecureCRT工具介绍SecureCRT是一款支持SSH(SSH1和SSH2)协议的终端仿真软件,常被用来运行于Windows下远程登录UNIX或Linux服务器。SecureCRT软件功能强大,不仅仅支持SSH协议,同时还支持Telnet、RLogin、Serial和TAPI等协议,它有非常多的功能,这里就不一一介绍了,常用功能可见下文介绍......
  • JVM系列---【使用jconsole开启JVM监控】
    使用jconsole开启JVM监控设置远程监控相关选项对于远程Java进程的连接,会要麻烦些,首先需要在需监控的远程Java程序启动脚本中加入与JVM远程监控相关的选项:1.开启JVM远程监控-Dcom.sun.management.jmxremote=true2.监控的IP地址-Djava.rmi.server.hostname=192.168.91.166,远......
  • Android常用工具类
    Android常用工具类很好很强大 http://www.trinea.cn/android/android-common-utils/ https://github.com/wyouflf/xUtils Android11个常用工具类:(见附件)......
  • 本地java监控远程Linux服务器-jconsole
    一、配置远程服务器需要监控的服务项目(本文以ps为例)需要监控的ps项目,此项目启动文件为ps.sh,编辑sh文件,找到JAVA_OPTS项,在后面添加JAVA_OPTS="-XX:+UseParallelGC-XX:+UseParallelOldGC$JVM_FLAGS$GC_LOG-Dfile.encoding=UTF-8-DLog4jContextSelector=org.apache.logging.......