jvm工具-jps、jstat、jmap、jstack

2024-06-16 22:52
文章标签 java 工具 jvm jmap jstack jstat jps

本文主要是介绍jvm工具-jps、jstat、jmap、jstack,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、jps

jps -v 【输出进程启动参数

[root@VM-8-2-centos ~]# jps -v
12401 Jps -Dapplication.home=/usr/local/jdk1.8.0_241 -Xms8m
16964 jar

其他参考

Java八股文必看,入门到深入理解jvm虚拟机之基础故障指令【jps,jstate...】-CSDN博客 

二、jstat

jstat -gc 【vmid】 【查看Java堆的状态】

[root@VM-8-2-centos dian-xhf]# jstat -gc 16964S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT   
12288.0 8192.0  0.0    0.0   147968.0 26136.3   55808.0    25116.2   59136.0 56068.7 7680.0 7058.2     15    0.223   3      0.341    0.564

jstat -gcutil 【vmid】 【查看Java堆占用百分比】

[root@VM-8-2-centos dian-xhf]# jstat -gcutil 16964S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT   0.00   0.00  17.66  45.00  94.81  91.90     15    0.223     3    0.341    0.564

S0 幸存0区域
S1 幸存1区域
E 伊甸园区
O 老年区
M 元空间 【有可能是P,表示永久代。具体的和jdk版本有关,笔者jdk版本是8】
YGC 年轻代的GC,也就是Minor GC ,轻量GC ,次数15
YGCT 轻量GC所耗时间 0.223秒
FGC 重量级GC次数 3
FGCT 重量级GC所耗时间 0.341秒
GCT 所有GC所耗费时间 0.564秒

三、jmap 

jmap -heap pid

打印 Java 堆概要信息,包括使用的 GC 算法、堆配置参数和各代中堆内存使用情况;

> jmap -heap 10352jmap -heap 10352
Attaching to process ID 10352, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.201-b09using thread-local object allocation.
Parallel GC with 4 thread(s)Heap Configuration://对应jvm启动参数-XX:MinHeapFreeRatio设置JVM堆最小空闲比率(defalut 40)MinHeapFreeRatio         = 0 //对应jvm启动参数 -XX:MaxHeapFreeRatio设置JVM堆最大空闲比率(default 70)MaxHeapFreeRatio         = 100//对应jvm启动参数-XX:MaxHeapSize=设置JVM堆的最大大小MaxHeapSize              = 4280287232 (4082.0MB)//对应jvm启动参数-XX:NewSize=设置JVM堆的‘新生代’的默认大小NewSize                  = 89128960 (85.0MB)//对应jvm启动参数-XX:MaxNewSize=设置JVM堆的‘新生代’的最大大小MaxNewSize               = 1426587648 (1360.5MB)//对应jvm启动参数-XX:OldSize=<value>:设置JVM堆的‘老年代’的大小OldSize                  = 179306496 (171.0MB)//对应jvm启动参数-XX:NewRatio=:‘新生代’和‘老生代’的大小比率NewRatio                 = 2//对应jvm启动参数-XX:SurvivorRatio=设置年轻代中Eden区与Survivor区的大小比值SurvivorRatio            = 8//对应jvm启动参数-XX:MetaspaceSize=<value>:设置JVM堆的‘元空间’的初始大小// jdk1.8 永久代已经被元空间所取代MetaspaceSize            = 21807104 (20.796875MB)CompressedClassSpaceSize = 1073741824 (1024.0MB)//对应jvm启动参数-XX:MaxMetaspaceSize= :设置JVM堆的‘元空间’的最大大小MaxMetaspaceSize         = 17592186044415 MBG1HeapRegionSize         = 0 (0.0MB)
//堆内存分布
Heap Usage:
//新生代的内存分布
PS Young Generation
//Eden区内存分布
Eden Space://Eden区总容量capacity = 1425539072 (1359.5MB)//Eden区已使用used     = 28510792 (27.19001007080078MB)//Eden区剩余容量free     = 1397028280 (1332.3099899291992MB)//Eden区使用比率2.0000007407724003% used
From Space:capacity = 524288 (0.5MB)used     = 65536 (0.0625MB)free     = 458752 (0.4375MB)12.5% used
To Space:capacity = 524288 (0.5MB)used     = 0 (0.0MB)free     = 524288 (0.5MB)0.0% used
PS Old Generationcapacity = 128974848 (123.0MB)used     = 24006808 (22.894676208496094MB)free     = 104968040 (100.1053237915039MB)18.613557893086256% used13410 interned Strings occupying 1194568 bytes.

jmap -histo pid

打印 Java 堆中对象直方图,通过该图可以获取每个 class 的对象数目,占用内存大小和类全名信息,带上 :live,则只统计活着的对象;

>jmap -histo 10352num     #instances         #bytes  class name
----------------------------------------------1:      27073797      433180752  java.lang.Integer2:          5442       16503144  [I3:          5005        6143944  [B4:         33835        3446608  [C5:          9721         855448  java.lang.reflect.Method6:         33751         810024  java.lang.String7:          6494         717416  java.lang.Class8:         14303         457696  java.util.concurrent.ConcurrentHashMap$Node...

jmap -histo:live pid

打印 Java 堆中对象直方图,通过该图可以获取每个 class 的对象数目,占用内存大小和类全名信息,带上 :live,则只统计活着的对象;统计 heap 中所有生存的对象的情况, 这个命令会先触发 gc 再统计:

> jmap -histo:live 10352num     #instances         #bytes  class name
----------------------------------------------1:         27483        2670608  [C2:          6453         713152  java.lang.Class3:         27300         655200  java.lang.String4:         12861         411552  java.util.concurrent.ConcurrentHashMap$Node5:          6364         327688  [Ljava.lang.Object;6:          2496         219648  java.lang.reflect.Method7:           874         178440  [B...

jmap -dump:live,format=b,file=a.log pid

以 hprof 二进制格式将 Java 堆信息输出到文件内,该文件可以用 JProfiler、VisualVM 或 jhat 等工具查看;

  • 使用 MAT 分析工具,如 jhat 命令分析 hprof 文件

JDK 常用工具 —— jmap 详解-CSDN博客

四、jstack

jstack(Stack Trace for Java)命令用于生成虚拟机当前时刻的线程快照。

Java八股文必看,入门到深入理解jvm虚拟机之基础故障指令【jps,jstate...】-CSDN博客

分析工具jprofiler 

这篇关于jvm工具-jps、jstat、jmap、jstack的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1067779

相关文章

Python办公自动化实战之打造智能邮件发送工具

《Python办公自动化实战之打造智能邮件发送工具》在数字化办公场景中,邮件自动化是提升工作效率的关键技能,本文将演示如何使用Python的smtplib和email库构建一个支持图文混排,多附件,多... 目录前言一、基础配置:搭建邮件发送框架1.1 邮箱服务准备1.2 核心库导入1.3 基础发送函数二、

java使用protobuf-maven-plugin的插件编译proto文件详解

《java使用protobuf-maven-plugin的插件编译proto文件详解》:本文主要介绍java使用protobuf-maven-plugin的插件编译proto文件,具有很好的参考价... 目录protobuf文件作为数据传输和存储的协议主要介绍在Java使用maven编译proto文件的插件

Java中的数组与集合基本用法详解

《Java中的数组与集合基本用法详解》本文介绍了Java数组和集合框架的基础知识,数组部分涵盖了一维、二维及多维数组的声明、初始化、访问与遍历方法,以及Arrays类的常用操作,对Java数组与集合相... 目录一、Java数组基础1.1 数组结构概述1.2 一维数组1.2.1 声明与初始化1.2.2 访问

Javaee多线程之进程和线程之间的区别和联系(最新整理)

《Javaee多线程之进程和线程之间的区别和联系(最新整理)》进程是资源分配单位,线程是调度执行单位,共享资源更高效,创建线程五种方式:继承Thread、Runnable接口、匿名类、lambda,r... 目录进程和线程进程线程进程和线程的区别创建线程的五种写法继承Thread,重写run实现Runnab

Java 方法重载Overload常见误区及注意事项

《Java方法重载Overload常见误区及注意事项》Java方法重载允许同一类中同名方法通过参数类型、数量、顺序差异实现功能扩展,提升代码灵活性,核心条件为参数列表不同,不涉及返回类型、访问修饰符... 目录Java 方法重载(Overload)详解一、方法重载的核心条件二、构成方法重载的具体情况三、不构

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

SpringBoot线程池配置使用示例详解

《SpringBoot线程池配置使用示例详解》SpringBoot集成@Async注解,支持线程池参数配置(核心数、队列容量、拒绝策略等)及生命周期管理,结合监控与任务装饰器,提升异步处理效率与系统... 目录一、核心特性二、添加依赖三、参数详解四、配置线程池五、应用实践代码说明拒绝策略(Rejected

基于Python实现一个图片拆分工具

《基于Python实现一个图片拆分工具》这篇文章主要为大家详细介绍了如何基于Python实现一个图片拆分工具,可以根据需要的行数和列数进行拆分,感兴趣的小伙伴可以跟随小编一起学习一下... 简单介绍先自己选择输入的图片,默认是输出到项目文件夹中,可以自己选择其他的文件夹,选择需要拆分的行数和列数,可以通过

一文详解SpringBoot中控制器的动态注册与卸载

《一文详解SpringBoot中控制器的动态注册与卸载》在项目开发中,通过动态注册和卸载控制器功能,可以根据业务场景和项目需要实现功能的动态增加、删除,提高系统的灵活性和可扩展性,下面我们就来看看Sp... 目录项目结构1. 创建 Spring Boot 启动类2. 创建一个测试控制器3. 创建动态控制器注

Java操作Word文档的全面指南

《Java操作Word文档的全面指南》在Java开发中,操作Word文档是常见的业务需求,广泛应用于合同生成、报表输出、通知发布、法律文书生成、病历模板填写等场景,本文将全面介绍Java操作Word文... 目录简介段落页头与页脚页码表格图片批注文本框目录图表简介Word编程最重要的类是org.apach