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日

相关文章

  • uniApp常见面试题及答案(推荐!)

    一、uniApp常见面试题及答案(推荐!) 在这篇文章中,我们将回答一些与uniApp相关的常见面试问题,包括uniApp的优点、uniApp的适用范围、uniApp的限制以及uniApp与其他框架的比较等。 以下是一些常见的uniApp面试问题及其答案: 什么是uniApp? uniApp是一款基于Vue.js的跨平台开发框架,可以用于开发iOS、Andr…

    Java 2023年5月23日
    00
  • Spring Boot中使用Spring Retry重试框架的操作方法

    Spring Boot中使用Spring Retry重试框架的操作方法 Spring Retry是一个轻量级的重试框架,可以帮助我们处理应用程序中的重试逻辑。在本文中,我们将详细讲解如何在Spring Boot应用程序中使用Spring Retry。 步骤一:添加依赖 我们需要在pom.xml文件中添加以下依赖项: <dependency> &l…

    Java 2023年5月15日
    00
  • 在Ubuntu系统下安装JDK和Tomcat的教程

    下面是在Ubuntu系统下安装JDK和Tomcat的教程。 1. 安装JDK 1.1 下载JDK 首先,我们需要到Oracle官网下载JDK的安装包。下载地址:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html 选择适合自己操作系统的对应版本下载。 1.2 安装…

    Java 2023年5月19日
    00
  • Java中数组的创建与传参方法(学习小结)

    下面我将详细讲解“Java中数组的创建与传参方法(学习小结)”的完整攻略。 一、Java中数组的创建 Java中数组是一组同类型数据元素的集合。数组中的每个元素可以通过索引来访问,索引从0开始,到数组长度减1为止。 1.1 声明数组 声明数组需要指定数组的类型和数组名。语法格式如下: type[] arrayName; 例如,声明一个整型数组 variabl…

    Java 2023年5月26日
    00
  • java实现文件上传和下载

    下面我将为你详细讲解Java实现文件上传和下载的完整攻略,过程中将分别提供两条示例。 文件上传 1. 通过servlet实现文件上传 使用servlet实现文件上传是比较常见和简便的实现方式之一。具体实现步骤如下: 创建一个html页面,用于上传文件 html<html><body> <form action=”uploadSe…

    Java 2023年5月20日
    00
  • 自定义spring mvc的json视图实现思路解析

    我来详细讲解一下“自定义spring mvc的json视图实现思路解析”的完整攻略,包括以下内容: 一、实现思路概述 在使用Spring MVC进行web开发时,返回json视图是非常常见的操作。默认的情况下,Spring MVC使用Jackson库将对象转换为json格式的数据,并返回给前端。但是,在一些特殊的应用场景中,我们需要使用自定义的json视图。…

    Java 2023年5月26日
    00
  • 利用js获取下拉框中所选的值

    获取下拉框中所选的值是很常见的前端开发需求。可以使用Javascript来轻松实现这一功能。下面提供几种获取下拉框值的方法供大家参考。 通过select元素的selectedIndex属性获取值 select元素有一个selectedIndex属性,可以返回当前选中项在集合中的索引位置。 示例1: <select id="mySelect&q…

    Java 2023年6月15日
    00
  • jsp源码实例4(搜索引擎)

    让我详细讲解一下“jsp源码实例4(搜索引擎)”的完整攻略。 源码说明 该示例实现了一个简单的搜索引擎,用户可以在搜索框中输入关键词,点击搜索按钮后,将展示包含该关键词的网页列表。源码分为以下几个文件: index.jsp:搜索页面,包括搜索框和搜索结果; search.jsp:搜索结果页面,展示包含关键词的网页列表; WebContent/WEB-INF/…

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