14、JVM监控及诊断工具-命令行篇

第1章、概述

  • 性能诊断是软件工程师在日常工作中需要经常面对和解决的问题,在用户体验至上的今天,解决好应用的性能问题能带来非常大的收益
  • Java 作为最流行的编程语言之一,其应用性能诊断一直受到业界广泛关注。可能造成 Java 应用出现性能问题的因素非常多,例如线程控制、磁盘读写、数据库访问、网络I/O、垃圾收集等。想要定位这些问题,一款优秀的性能诊断工具必不可少
  • 体会1:使用数据说明问题,使用知识分析问题,使用工具处理问题
  • 体会2:无监控、不调优!

1、简单命令行工具

  • 进入到安装jdk的bin目录,发现还有一系列辅助工具

  • 这些辅助工具用来获取目标 JVM 不同方面、不同层次的信息,帮助开发人员很好地解决Java应用程序的一些疑难杂症

  • 官方源码地址:http://hg.openjdk.java.net/jdk/jdk11/file/1ddf9a99e4ad/src/jdk.jcmd/share/classes/sun/tools

第2章、jps:查看正在运行的Java进程

1、基本情况

  • jps(Java Process Status):显示指定系统内所有的HotSpot虚拟机进程(查看虚拟机进程信息),可用于查询正在运行的虚拟机进程
  • 说明:对于本地虚拟机进程来说,进程的本地虚拟机ID与操作系统的进程ID是一致的,是唯一的

2、基本语法

  • 基本使用语法为:jps [options] [hostid]
  • 还可以通过追加参数,来打印额外的信息
  • 可以通过 jps -help 来查看对应的参数信息

【1】options参数

  • -q:仅仅显示LVMID(local virtual machine id),即本地虚拟机唯一id。不显示主类的名称等

  • -l:输出应用程序主类的全类名 或 如果进程执行的是jar包,则输出jar完整路径

  • -m:输出虚拟机进程启动时传递给主类main()的参数

  • -v:列出虚拟机进程启动时的JVM参数。比如:-Xms20m -Xmx50m是启动程序指定的jvm参数

  • 注:

    • 以上参数可以综合使用
    • 如果某 Java 进程关闭了默认开启的UsePerfData参数(即使用参数-XX:-UsePerfData),那么jps命令(以及下面介绍的jstat)将无法探知该 Java 进程
  • 如何将信息输出到同级文件中:【语法:命令 > 文件名称】

【2】hostid参数

  • RMI注册表中注册的主机名。如果想要远程监控主机上的 java 程序,需要安装 jstatd
  • 对于具有更严格的安全实践的网络场所而言,可能使用一个自定义的策略文件来显示对特定的可信主机或网络的访问,尽管这种技术容易受到IP地址欺诈攻击
  • 如果安全问题无法使用一个定制的策略文件来处理,那么最安全的操作是不运行jstatd服务器,而是在本地使用jstatjps工具

第3章、jstat:查看JVM统计信息

1、简介

  • jstat(JVM Statistics Monitoring Tool):用于监视虚拟机各种运行状态信息的命令行工具。它可以显示本地或者远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据
  • 在没有GUI图形界面,只提供了纯文本控制台环境的服务器上,它将是运行期定位虚拟机性能问题的首选工具。常用于检测垃圾回收问题以及内存泄漏问题
  • 官方文档:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstat.html

2、基本语法

  • 基本使用语法为:jstat - [-t] [-h] [ []]
  • 查看命令相关参数:jstat-h 或 jstat-help
  • 其中vmid是进程id号,也就是jps之后看到的前面的号码

在这里插入图片描述

【1】option参数

  • 选项option可以由以下值构成

  • 类装载相关的:

    • -class:显示ClassLoader的相关信息:类的装载、卸载数量、总空间、类装载所消耗的时间等

      • -class举例:jstat -class -t -h3 13152 1000 10,其中h3中的3代表每隔3个分隔一次,13152代表类的进程id,1000代表每隔1000毫秒打印一次,10代表一共打印10次,如下所示:

        • Timestamp代表程序至今的运行时间,单位为秒
        • Loaded代表加载的类的数目
        • Bytes代表加载的类的总字节数
        • Unloaded代表卸载的类的数目
        • Bytes代表卸载的类的总字节数
        • Time代表类装载所消耗的时间

        在这里插入图片描述

  • 垃圾回收相关的:

    • 【1】-gc:显示与GC相关的堆信息。包括Eden区、两个Survivor区、老年代、永久代等的容量、已用空间、GC时间合计等信息

      • -gc举例:jstat -gc 13152,其中13152代表类的进程id,执行结果如下所示:

        • 其中S0C代表幸存者0区的总容量,S1C代表幸存者1区的总容量,S0U代表幸存者0区使用的容量,S1U代表幸存者1区使用的容量,EC代表伊甸园区的总容量,EU代表伊甸园区使用的总容量
        • OC代表老年代的总容量,OU代表老年代已经使用的容量,MC代表方法区的总容量,MU代表方法区的总容量,CCSC代表压缩类的总容量,CCSU代表压缩类使用的容量
        • YGC代表年轻代垃圾回收的次数,YGCT年轻代进行垃圾回收需要的时间,FGC代表代表Full GC的次数,FGCT代表Full GC的时间,GCT代表垃圾回收的总时间

        在这里插入图片描述

    • 【2】-gccapacity:显示内容与-gc基本相同,但输出主要关注Java堆各个区域使用到的最大、最小空间

      • -gccapacity举例:jstat -gccapacity 13152,其中13152代表类的进程id,执行结果如下:

        • S0C代表幸存者0区的容量,S1C代表幸存者1区的容量,EC代表伊甸园区的容量,CCSC代表压缩类的容量,YGC代表年轻代垃圾回收的时间,FGC代表Full GC垃圾回收的时间

        在这里插入图片描述

    • 【3】-gcutil:显示内容与-gc基本相同,但输出主要关注已使用空间占总空间的百分比

      • -gcutil举例:jstat -gcutil 13

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值