JVM分析工具

2023-11-14

JVM在运行过程中,我们可以利用各种工具对JVM进行分析,这是性能调优的利器。可以通过各种工具了解在系统运行过程中,在JVM底层到底发生了什么。JVM分析工具一般分为两种,一种是命令行工具,一种是图形界面工具。

JVM分析工具

JDK自带的命令行工具都在jdk的bin目录下(C:\Program Files\Java\jdk1.8.0_291\bin)。内置的命令行工具可以帮助我们系统运行过程中JVM内部的运行过程。主要的工具有如下

  • java:java应用的启动程序,如java -jar xx.jar
  • javac:jdk内置的编译工具,将java源文件编译为.class文件。如javac xx.java
  • javap:反编译class文件工具,如javap -verbose xx.class
  • javadoc:根据java代码和标准注释,自动生成相关的API说明文档
  • javah:JNI开发时,根据java代码生成需要的.h文件
  • extcheck:检查某个jar文件和运行时扩展jar有没有版本冲突,一般使用比较少
  • jdb:Java Debugger,可以调试本地和远端程序,属于JPDA中的一个demo实现,供其他调试器参考。开始很少使用
  • jar:打包工具,可以将文件和目录打包成.jar文件,jar文件从本质上来讲就是zip文件,只是后缀不同。
  • keytool:安全证书和密钥的管理工具
  • jarsigner:JAR文件签名和验证工具
  • policytool:是一款图形界面工具,管理本机的Java安全策略
  • jps/jino:查看运行中的java进程
  • jstat:查看JVM内部gc相关信息
  • jmap:查看线程信息
  • jcmd:执行JVM相关分析命令(整合命令)
  • jrunscript/jjs:执行js命令

命令行指令具体用法在csdn上有大量文章可以参考,以下会列出几个比较常用的指令作为参考。

1 jps/jino命令

  • jps指令可以列出操作系统上正在运行的java进程
    jps命令
  • jps -l 指令可以列出操作系统上正在运行的java进程,可以输出主类或jar路径
    jpl -l指令
  • jps -mlvV指令可以输出更详细信息,包括系统参数等
    jps -mlvV指令

2 jstat指令

可以通过jstat -options查看jstat可以支持的参数类型
jista指令
如采样100次,每次间隔100ms
jstat -gcutil pid 100 100
采样100次每次间隔100ms

3 jmap指令

jmap指令可以查看堆内存占用的一些情况
如jmap -histo 33824,查看33824进程的堆占用情况
jmap指令

4 jstack指令

jstack属于线程堆栈分析工具
如jstack -l 33824,查看进程33824的堆栈信息
jstack指令

5 jcmd指令

jcmd可以理解成前面所有命令的集合。这个指令用的比较多,如果不记得jcmd可以支持哪些参数,可以输入jcmd pid help指令
jcmd help指令
jcmd VM.flags指令

6 jrunscript/jjs指令

jjs指令是java命令行脚本执行工具,可以解释字形javascript脚本
jrunscript指令

2 JVM图形化分析工具

命令行分析工具虽然能给JVM分析提供方便,但没有图形界面交互风格友好。目前,JVM提供以下几种图形化界面工具可以给开发者分析JVM运行分析。

1 jconsole工具

直接在命令界面,输入jconsole命令即可启动jconsole工具(windows系统是在”运行“框输入”cmd",弹出小黑框再输入“jconsole”即可)。jconsole聚焦于监控JVM内存、线程、CPU等使用情况及发展趋势。
jconsole工具

2 jvisualvm

jdk8大概从26开始,jvisualvm都没有被直接打包进jdk,所以直接通过jvisualvm命令,不会打开jvisualvm。可以去官网直接下载jvisualvm工具,下载之后再使用。下载地址为:visualvm.github.io。jvisualvm比较核心的是CPU抽样器。也可以直接点击如下链接进行资源下载
jvisualvm包下载路径:jvisualvm资源包
jvisualvm

3 jmc

jmc功能非常强大,不仅包括jconsole及jvisualvm功能,还有一个飞行记录的能力,把一段时间段内,JVM的变化记录下来,从而对jvm内部各种状态进行分析(包括内存、cpu)。
从2020年7月以后,jmc就已经不再打包到jdk,jdk默认不带jmc,所以需要手工下载。
jmc包下载和使用教程可以参考jmc包和部署教程
jmc

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JVM分析工具 的相关文章

  • 菜单未显示在应用程序中

    由于某种原因 我的操作菜单在我的 Android Studio 应用程序中消失了 我正在按照教程学习如何创建 Android 应用程序 但最终遇到了这个问题 我正在使用 atm 的教程 http www raywenderlich com
  • 热重载在docker中运行的java程序

    我开发了一个java程序 应该在docker中运行 然而 我在调试docker中运行的java程序时遇到了很多痛苦 我在网上搜索 一些教程提出了像 spring dev tools 这样的工具 因为我的java程序是基于spring boo
  • 如何将 Java 赋值表达式转换为 Kotlin

    java中的一些东西就像 int a 1 b 2 c 1 if a b c System out print true 现在它应该转换为 kotlin 就像 var a Int 1 var b Int 2 var c Int 1 if a
  • 如何在一行中将字符串数组转换为双精度数组

    我有一个字符串数组 String guaranteedOutput Arrays copyOf values values length String class 所有字符串值都是数字 数据应转换为Double QuestionJava 中
  • AES 加密 Java/plsql

    我需要在Java和plsql DBMS CRYPTO for Oracle 10g 上实现相同的加密 解密应用程序 两种实现都工作正常 但这里的问题是我对相同纯文本的加密得到了不同的输出 下面是用于加密 解密过程的代码 Java 和 PLS
  • Java程序中的数组奇怪的行为[重复]

    这个问题在这里已经有答案了 我遇到了这个 Java 程序及其以意想不到的方式运行 以下程序计算 int 数组中元素对之间的差异 import java util public class SetTest public static void
  • 在Windows上安装Java 11 OpenJDK(系统路径问题)

    Java 11 最近发布了 众所周知 这个版本没有安装文件 当然 要在没有安装程序的情况下安装 Java 我将系统设置 PATH 和 JAVA HOME 设置为解压缩 Java 11 的文件夹的地址 根据对类似问题的已接受回复建议 唯一的事
  • Java8无符号算术

    据广泛报道 Java 8 具有对无符号整数的库支持 然而 似乎没有文章解释如何使用它以及有多少可能 有些函数 例如 Integer CompareUnsigned 很容易找到 并且似乎可以实现人们所期望的功能 但是 我什至无法编写一个简单的
  • 使用 ANTLR 为 java 源代码生成抽象语法树

    如何使用 ANTLR 从 java src 代码生成 AST 有什么帮助吗 好的 步骤如下 前往ANTLR站点 http www antlr org 并下载最新版本 下载Java g和JavaTreeParser g文件来自here htt
  • 当分配给变量时,我可以以某种方式重用 Gremlin GraphTraversals 代码吗?

    我有看起来像这样的 GraphTraversals attrGroup GraphTraversal
  • Microsoft Graph 身份验证 - 委派权限

    我可以使用 Microsoft Graph 访问资源无需用户即可访问 https developer microsoft com en us graph docs concepts auth v2 service 但是 此方法不允许我访问需
  • 请求位置更新参数

    这就是 requestLocationUpdates 的样子 我使用它的方式 requestLocationUpdates String provider long minTime float minDistance LocationLis
  • 归并排序中的递归:两次递归调用

    private void mergesort int low int high line 1 if low lt high line 2 int middle low high 2 line 3 mergesort low middle l
  • 使用 AWS Java SDK 为现有 S3 对象设置 Expires 标头

    我正在更新 Amazon S3 存储桶中的现有对象以设置一些元数据 我想设置 HTTPExpires每个对象的标头以更好地处理 HTTP 1 0 客户端 我们正在使用AWS Java SDK http aws amazon com sdkf
  • org.jdesktop.application 包不存在

    几天以来我一直在构建一个 Java 桌面应用程序 一切都很顺利 但是今天 当我打开Netbeans并编译文件时 出现以下编译错误 Compiling 9 source files to C Documents and Settings Ad
  • 将多模块 Maven 项目导入 Eclipse 时出现问题 (STS 2.5.2)

    我刚刚花了最后一个小时查看 Stackoverflow com 上的线程 尝试将 Maven 项目导入到 Spring ToolSuite 2 5 2 中 Maven 项目有多个模块 当我使用 STS 中的 Import 向导导入项目时 所
  • Tomcat 6找不到mysql驱动

    这里有一个类似的问题 但关于类路径 ClassNotFoundException com mysql jdbc Driver https stackoverflow com questions 1585811 classnotfoundex
  • android Accessibility-service 突然停止触发事件

    我有一个 AccessibilityService 工作正常 但由于开发过程中的某些原因它停止工作 我似乎找不到这个原因 请看一下我的代码并告诉我为什么它不起作用 public class MyServicee extends Access
  • java8 Collectors.toMap() 限制?

    我正在尝试使用java8Collectors toMap on a Stream of ZipEntry 这可能不是最好的想法 因为在处理过程中可能会发生异常 但我想这应该是可能的 我现在收到一个我不明白的编译错误 我猜是类型推理引擎 这是
  • Swagger/Openapi-Annotations:如何使用 $ref 生成 allOf?

    我正在生成 Rest 端点 包括添加OpenAPI Swagger对生成的代码进行注释 虽然它对于基本类型运行得很好 但我在自定义类方面遇到了一些问题 现在我有很多自定义类的重复架构条目 使用 Schema 实现 MyClass class

随机推荐

  • 33.121. 买卖股票的最时机

    思路 第一个确定是buyVal 第二个三种情况 大于等于buyVal 就把这个设置为saleVal 小于buyVal buyVal 改变为这个 继续遍历 错误思路 我的想法是 先把买的时机确定了 再确定卖的时机 分类讨论 实际操作过程中 有
  • LayUi做登录注册

    LayUi登录注册页面附代码 登录页面 注册页面 附加CSS JS代码 JS代码 CSS代码 登录页面 下面展示登录页面 代码如下
  • STM32外设系列—BH1750

    文章目录 一 BH1750简介 二 BH1750原理图 三 BH1750数据手册 3 1 指令集 3 2 IIC通信读 写 四 BH1750程序设计 4 1 IIC程序 4 2 BH1750初始化程序 4 3 读取BH1750测量结果 4
  • 免费代码开发辅助AI工具CodeWhisperer、CodeGeeX、Codeium

    vscode应用市场可以直接搜索安装 vscode安装后左侧状态栏图标 注意 三款使用都需要翻墙注册 使用基本也是翻墙网络下使用 CodeGeeX国产 支持代码解释 聊天框 Codeium也支持代码解释 聊天框 按Tab是接受ai代码工具推
  • C# winForm 图片预览

    ImageZoomMainForm cs using System using System Collections Generic using System ComponentModel using System Data using S
  • BUUCTF MISC刷题笔记(二)

    BUUOJ Misc WUSTCTF2020 spaceclub 派大星的烦恼 SCTF2019 电单车 hashcat UTCTF2020 zero CTF2019 otaku 湖南省赛2019 Findme 1 png 2 png 3
  • Win11+VS2019配置YOLOX

    基本环境 操作系统 Windows 编译软件 Visual Studio 2019 Python版本 3 8 编译流程 1 使用如下指令下载YOLOX源码 git clone recursive https github com Megvi
  • Sentinel数据处理-基于snap软件

    目录 1 sentinel卫星数据介绍 1 1 sentinel1 1 2 sentinel2 1 3 sentinel3 2 sentinel卫星数据预处理 2 1 snap软件下载 2 2 sentinel2 数据下载 3 sentin
  • Android快捷键之代码自动对齐

    一 背景 你是否有在为代码格式比较乱而烦心呢 二 解决办法 Android studio使用 Ctrl Alt L 注 快捷键可以格式化代码 也可以理解为让代码自动对齐 也可以使用一些插件处理代码格式问题 注意 这快捷键在没有其他应用的快捷
  • Vue3中ref,toRef,toRefs的区别与用法

    ref vs toRef 如果利用ref函数将某个对象中的属性变成响应式数据 对其进行修改是不会影响原始数据的 利用toRef进行上方操作 对数据的修改是响应式的 toRef vs toRefs toRef 创建一个ref对象 其value
  • sbit在c语言中的作用,sbit是什么意思

    sbit 词语概况 定义特殊功能寄存器的位变量 bit和sbit都是C51扩展的变量类型 典型应用是 sbit P0 0 P0 0 即定义P0 0为P0口的第1位 以便进行位操作 用法 在C语言里 如果直接写P1 0 C编译器并不能识别 而
  • layui中监听单击和双击事件的使用

    作者 张铭标 撰写时间 2019年 6月27日 平时在做数据回填的时候 我们需要用到layui中的监听单击和双击事件来进行数据的获取和回填 具体的使用如图所示 从图中看出这是监听单击事件 一开始需要先引入layui插件就不用多说了 先写一个
  • python中argsort函数用法

    最近在学NMS算法 刚好看到了argsort 函数 特记录下 供自己以后查询 如有不足 欢迎评论区指正 一维数组的argsort 函数用法 import numpy as np a np array 5 3 4 7 2 9 b a args
  • Linux下matlab打开出现启动桌面时错误

    Ubuntu下matlab程序无法直接打开 出现一个 启动桌面时错误 的弹窗 以及提示一堆java似的错误 如下 其实还是权限的问题 如果sudo matlab可以运行 但是可不可以普通权限正常终端命令matlab运行程序呢 其实一条命令即
  • ARM(IMX6U)裸机模仿STM32驱动开发实验(定义外设结构体)

    参考 Linux之ARM IMX6U 裸机模仿STM32驱动开发格式 作者 一只青木呀 发布时间 2020 08 15 12 11 56 网址 https blog csdn net weixin 45309916 article deta
  • 信息安全技术之9软件保护技术测试卷1

    信息安全技术之9软件保护技术测试卷2 一 多选题 二 判断题 叮嘟 这里是小啊呜的学习课程资料整理 好记性不如烂笔头 今天也是努力进步的一天 一起加油进阶吧 一 多选题 1 此题归属第9讲 下列工具哪些不属于静态分析工具 A OllyDbg
  • 搭建高可用mongodb集群(二)—— 副本集

    在上一篇文章 搭建高可用MongoDB集群 一 配置MongoDB 提到了几个问题还没有解决 主节点挂了能否自动切换连接 目前需要手工切换 主节点的读写压力过大如何解决 从节点每个上面的数据都是对数据库全量拷贝 从节点压力会不会过大 数据压
  • spring boot 打包所有文件到classes,maven配置

  • [585]爬虫

    文章目录 1 目标网站 2 反爬虫机制 3 解决 4 上代码 字体解密相关资源 总结 目前已知的几个字体反爬的网站是猫眼 汽车之家 天眼查 起点中文网等等 本文用到的第三方库 fontTools 安装 pip install fontToo
  • JVM分析工具

    JVM在运行过程中 我们可以利用各种工具对JVM进行分析 这是性能调优的利器 可以通过各种工具了解在系统运行过程中 在JVM底层到底发生了什么 JVM分析工具一般分为两种 一种是命令行工具 一种是图形界面工具 JVM分析工具 JDK自带的命