热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

heapdump分析工具_面试官:你用过哪些JDK自带的命令行工具

本文基于HotSpot虚拟机,JDK版本1.8.0_171,windows系统目录一、jps:虚拟机进程状况工具二、jstat࿱

本文基于HotSpot虚拟机,JDK版本1.8.0_171,windows系统

目录

一、jps:虚拟机进程状况工具 

二、jstat:虚拟机统计信息监视工具

三、jmap:Java内存映像工具 

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

五、jstack:Java堆栈跟踪工具 

六、jinfo:Java配置信息工具

java和javac这两个命令行工具我们应该都很熟悉,但是除了这两个工具jdk/bin里面还提供了很多工具给我们使用,今天就简单介绍有关虚拟机监控且助于故障排查的工具。

26712742c846bee44d37af52c9f6ef3c.png

实际上这些工具大多数就是jdk/lib/tool.jar的封装,内部就是调用tool里面的内容,所以工具体积都不大,而且在linux版本的jdk中有些工具就是用shell写的。

1.jps(JVM Process Status Tool)

用于显示指定系统内所有HotSpot虚拟机进程,并且能显示虚拟机执行主类以及本地虚拟机唯一ID(LVMID,Local Virtual Machine Identifier)功能单一,但是其他因为其他工具都需要指明LVMID(来确定要监控的虚拟机进程,所以都需要用到它。对于本地的虚拟机进程来说LVMID和操作系统的进程ID一致。

使用格式:jps [options] [hostid]

3a1c75d55f9efc7c90a4aa3ab652e5e8.png

样例:

09e0ee0cb00598ebf1a844b190f42707.png

jps可以通过RMI协议查询远程开启RMI服务的虚拟机进程,hostid为RMI注册表中注册的主机名。

2.jstat(JVM Statistics Monitoring Tool)

用于监视虚拟机各种运行状态信息的工具,可以显示本地或者远程的虚拟机进程类装载、内存、GC、JIT等运行数据,在没有GUI图像界面的服务器上,主要就是用它在运行期定位性能问题。

使用格式 :jstat [option vmid [interval [s|ms] [count]] ]

14355e674764f160e4177013d439cb18.png

interval表示查询的间隔, s|ms是秒和毫秒(默认是毫秒,即不写单位是毫秒),count表示查询的次数。

样例:表示每5秒钟查看一次LVMID为34216的虚拟机进程的GC情况,一共查询10次

9eabd1306df9bb3f550e8f0ef5ba0ef9.png

3.jmap (Memory Map for Java)

用于生成堆转储快照(heapdump或dump文件),说白了就是把java堆使用情况快照一份导出来供我们查看,用来排查问题。

使用格式 :jmap [option] vmid

8295590256c059ec82a670365bb327d3.png

样例

a433a38462ef55174818f1fa87ae3629.png

4.jhat (JVM Heap Analysis Tool)

这个就是和jmap搭配使用的,jmap导出来的堆快照文件用jhat 打开分析

使用格式: jhat [-stack ] [-refs ] [-port ] [-baseline ] [-debug ] [-version] [-h|-help]

6b9af9d82b910301b9597be4f88024c1.png

样例:

8a026810ad2c2409b00ee90059e3695e.png

查看分析结果

de40f0e4c72f9be1707b88e36320f348.png

5.jstack (Stack Trace for Java)

用于生成虚拟机当前时刻线程快照(threaddump或javacore)。主要用来定位线程出现长时间停顿的原因,判断死锁啊,死循环的等。通过jstack就可知各线程的调用堆栈情况。

使用格式:jstack [option] vmid

6202f26fb7023ef5348a5ae1669eaa0f.png

样例:

087e80b16d9fc91cfd47b432852d22d1.png

6.jinfo (Configuration Info for Java)

用来查看和调整虚拟机各项参数

使用格式:jinfo [option] pid

可以通过-flag[+|-] name 添加和删除一些参数,或者-flag name =value修改一些参数,但是很多参数是不允许修改的

1ba724a66851e8b59daae29f5e6224fb.png

样例:

a90021a6eef7aa07b0076b1b87097bfa.png

结语

本文主要是简单介绍常见的几个JDK命令行工具,建议使用的时候自己通过命令 -option 查看每个选项实际的意思再使用,毕竟这么选项一般也记不住。

而且这些工具有一些算比较简陋了例如jhat ,这玩意分析的简陋,界面也简陋不够强大和专业。所以这些个命令行工具以了解和大概明白其作用为主。

像平日里一般用于分析都用JConsole、VisualVM(All-in-One Java Troubleshooting Tool)这种可视化工具来分析故障监控性能等,有些在IDE里面的也有用MAT等工具分析。

本文参考《深入理解JAVA虚拟机》第四章


微信搜索程序员面试

5303fd92afdd4939016fff178de2c413.png

扫码回复 程序员 有彩蛋




推荐阅读
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
  • 本文介绍了在wepy中运用小顺序页面受权的计划,包含了用户点击作废后的从新受权计划。 ... [详细]
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
  • 十大经典排序算法动图演示+Python实现
    本文介绍了十大经典排序算法的原理、演示和Python实现。排序算法分为内部排序和外部排序,常见的内部排序算法有插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。文章还解释了时间复杂度和稳定性的概念,并提供了相关的名词解释。 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • 纠正网上的错误:自定义一个类叫java.lang.System/String的方法
    本文纠正了网上关于自定义一个类叫java.lang.System/String的错误答案,并详细解释了为什么这种方法是错误的。作者指出,虽然双亲委托机制确实可以阻止自定义的System类被加载,但通过自定义一个特殊的类加载器,可以绕过双亲委托机制,达到自定义System类的目的。作者呼吁读者对网上的内容持怀疑态度,并带着问题来阅读文章。 ... [详细]
  • Java 11相对于Java 8,OptaPlanner性能提升有多大?
    本文通过基准测试比较了Java 11和Java 8对OptaPlanner的性能提升。测试结果表明,在相同的硬件环境下,Java 11相对于Java 8在垃圾回收方面表现更好,从而提升了OptaPlanner的性能。 ... [详细]
author-avatar
书友85467040
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有