java自带命令行工具jmap、jhat与jinfo的使用实例代码详解

Java自带命令行工具攻略

Java自带了多个命令行工具,可以对Java程序进行分析、调试和监控。其中,jmap、jhat和jinfo是非常重要的工具。本攻略将详细讲解它们的使用,包括实例代码和示例结果。

jmap

jmap是Java Memory Map的缩写,是一个用于打印Java进程中内存使用情况的命令行工具。下面是jmap的常用选项:

Usage:
    jmap [option] <pid>
        (to connect to running process)
    jmap [option] <executable <core>
        (to connect to a core file)
    jmap [option] [-h|-help]
        (for help on options)

其中,常用的选项有:

  • -heap:打印Java堆(Java heap)的使用情况
  • -histo:打印Java堆(Java heap)上对象的分布情况
  • -dump:导出Java堆(Java heap)的快照,以二进制格式保存

下面是一个jmap的使用示例:

# 打印Java堆的使用情况
$ jmap -heap 12345
Attaching to process ID 12345, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.92-b14
using thread-local object allocation.
Garbage-First (G1) GC with 16 thread(s)

Heap Configuration:
   MinHeapFreeRatio         = 40
   MaxHeapFreeRatio         = 70
   MaxHeapSize              = 2147483648 (2048.0MB)
   NewSize                  = 1363144 (1.2999954223632812MB)
   MaxNewSize               = 17592186044415 MB
   OldSize                  = 5452592 (5.1999969482421875MB)
   NewRatio                 = 2
   SurvivorRatio            = 8
   MetaspaceSize            = 16896000 (16.125MB)
   CompressedClassSpaceSize = 1073741824 (1024.0MB)
   MaxMetaspaceSize         = 17592186044415 MB
   G1HeapRegionSize         = 1048576 (1.0MB)

Heap Usage:
G1 Heap:
   regions  = 2048
   capacity = 2147483648 (2048.0MB)
   used     = 1350830528 (1289.0901412963867MB)
   free     = 796653120 (758.9098587036133MB)
   62.91093444824219% used
...

上面的示例中,-heap选项打印了Java堆的使用情况。12345是进程PID。

jhat

jhat是Java Heap Analysis Tool的缩写,是一个用于分析Java堆(Java heap)中对象分布情况的命令行工具。jhat使用Web界面展示堆中对象信息,并支持搜索、过滤等操作。下面是jhat的常用选项:

Usage:
    jhat [-version] [-h | -help] [-J<flag>] [<file>]
        (to read heap dump from a file)
    jhat [-version] [-h | -help] [-J<flag>] <vmid>
        (to connect to a running VM)

    where <file> is an HPROF binary heap dump file.
    <vmid> is the ID of a process to attach to.
    See jps(1) for information on determining the VMID.

其中,需要传入一个HPROF格式的堆转储文件,或者连接到一个正在运行的Java进程。如果传入一个文件,则可以不指定vmid;如果连接到一个Java进程,则必须要指定vmid。

下面是一个jhat的使用示例:

# 生成Java堆快照并以HPROF格式保存
$ jmap -dump:file=/tmp/dump.hprof 12345

# 启动jhat并加载堆快照
$ jhat /tmp/dump.hprof
Reading from /tmp/dump.hprof...
Dump file created Thu Sep 30 19:42:03 CST 2021
Snapshot read, resolving...
Resolving 78801 objects...
Chasing references, expect 3 dots.................
Eliminating duplicate references..............
Snapshot resolved.

# jhat Web界面启动成功,请在浏览器中打开 http://localhost:7000 查看

上面的示例中,-dump选项导出了Java堆的快照,并以HPROF格式保存到/tmp/dump.hprof文件中。jhat /tmp/dump.hprof启动了jhat,并加载了该堆快照。最后,浏览器中打开http://localhost:7000即可查看堆中对象信息。

jinfo

jinfo是Java Configuration Info的缩写,是一个用于打印Java进程配置信息的命令行工具。下面是jinfo的常用选项:

Usage:
    jinfo [option] <pid>
        (to connect to running process)
    jinfo [option] <executable>
        (to examine a remote executable)
    jinfo [option] [server_id@]<remote server IP or hostname>
        (to connect to an instrumented JVM on a remote host)

    where <pid> is an LWP id of a thread in the target Java process.
    <executable> is the name of the remote java launcher executable.
    <server_id> is a unique prefix for integer server-side identifications.

其中,常用的选项有:

  • -flags:打印Java虚拟机(JVM)的运行时参数
  • -sysprops:打印Java虚拟机(JVM)的系统属性

下面是一个jinfo的使用示例:

# 打印Java虚拟机(JVM)的运行时参数
$ jinfo -flags 12345
Attaching to process ID 12345, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.92-b14
Non-default VM flags: -XX:G1HeapRegionSize=1048576 -XX:HeapDumpPath=/tmp -XX:InitialHeapSize=2147483648 -XX:MaxHeapSize=2147483648 -XX:+PrintCommandLineFlags -XX:ReservedCodeCacheSize=262144000 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseG1GC

# 打印Java虚拟机(JVM)的系统属性
$ jinfo -sysprops 12345
Attaching to process ID 12345, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.92-b14
java.runtime.name = Java(TM) SE Runtime Environment
sun.boot.library.path = ...
...

上面的示例中,-flags选项打印了JVM的运行时参数,-sysprops选项打印了JVM的系统属性。12345是进程PID。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java自带命令行工具jmap、jhat与jinfo的使用实例代码详解 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • 详解NGINX如何统计网站的PV、UV、独立IP

    要实现对网站PV、UV、独立IP的统计,可以通过在NGINX的配置文件中添加一些指令来实现。以下是一些常用的指令: 通过log_format指令自定义日志格式,包含访问IP、请求时间、请求方法、URL、HTTP协议等信息。 log_format mylog ‘$remote_addr – $remote_user [$time_local] "$r…

    Java 2023年6月15日
    00
  • Java Servlet生成JSON格式数据并用jQuery显示的方法

    下面是 Java Servlet 生成 JSON 格式数据并用 jQuery 显示的方法的完整攻略。 什么是 JSON? JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于阅读和编写。 Servlet 生成 JSON 1. 添加依赖 首先需要添加一个 JSON 库,常用的有 Gson 和 FastJSON。这里…

    Java 2023年5月26日
    00
  • java实现时钟表盘

    下面我将详细讲解Java实现时钟表盘的完整攻略。 环境准备 首先需要确保你的电脑上已经安装了JDK环境,并且配置了相应的环境变量。然后你需要找到适合的Java集成开发环境,例如Eclipse、IntelliJ IDEA等,这里我们以Eclipse为例。 构建项目 打开Eclipse,选择”New” -> “Java Project”。 输入项目名称,点…

    Java 2023年6月1日
    00
  • 扩展类加载器的作用是什么?

    扩展类加载器是Java虚拟机提供的一种类加载器,它的作用是加载Java虚拟机扩展目录(%JAVA_HOME%/jre/lib/ext)下的jar包和类文件。使用扩展类加载器可以将第三方库或扩展功能的类加载到Java虚拟机中,提供给应用程序使用。下面是使用扩展类加载器的攻略和示例。 使用攻略 使用扩展类加载器可以遵循如下步骤: 找到Java虚拟机扩展目录,一般…

    Java 2023年5月10日
    00
  • 详解使用IntelliJ IDEA 配置Maven(入门)

    下面我将用Markdown格式撰写如何使用IntelliJ IDEA配置Maven的攻略: 详解使用IntelliJ IDEA 配置Maven(入门) Maven是一个强大的Java项目管理工具,可以帮助我们快速构建、发布、管理Java项目。在使用Maven时,我们可以选择使用集成开发环境(IDE)来管理Maven,其中最常用的IDE是IntelliJ ID…

    Java 2023年5月20日
    00
  • MySQL主从复制的原理图解及Java语言示例使用

    MySQL主从复制是MySQL提供的高可用性和可伸缩性解决方案之一。本文将详细讲解MySQL主从复制的原理,以及如何使用Java语言示例实现MySQL主从复制。 什么是MySQL主从复制 MySQL主从复制是指将一个MySQL数据库实例(称为“主”或“主数据库”)复制到一个或多个MySQL数据库实例(称为“从”或“从数据库”)的过程。主数据库上进行的更改可以…

    Java 2023年6月16日
    00
  • Spring Boot启动过程全面解析(三)

    针对“SpringBoot启动过程全面解析(三)”这篇文章,我将进行以下详细讲解: 1. 文章简介 这篇文章主要讲解Spring Boot应用程序的启动过程。通过分析Spring Boot框架的源代码,介绍了Spring Boot启动时各个关键步骤的实现过程,帮助读者更好地理解Spring Boot框架的运作机制。 2. Spring Boot的静态资源加载…

    Java 2023年5月15日
    00
  • 详解JVM基础之字节码的增强技术

    详解JVM基础之字节码的增强技术 JVM(Java Virtual Machine)是一台虚拟机,它将字节码解释成可执行代码。在Java技术中,字节码是Java类文件中的中间表示形式,并且它是可移植性的关键构成部分。在字节码增强技术中,我们可以使用字节码操作库修改字节码,以实现在程序运行时的动态织入。 一、字节码增强技术的概念 字节码增强技术是在字节码级别上…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部