JVM调优常用的工具JPS、JMAP、JSTAT、JSTACK和JCMD的使用详解

news2024/9/27 5:47:51

查看PID信息

首先启动一个服务

 使用jps 和 jps -l 的区别,使用jps -l 能够显示出服务的名称

 熟悉JVM调优中常用的工具JMAP、JSTAT和JSTACK

JMAP、JSTAT和JSTACK是Java开发中常用的工具,用于分析和调试Java应用程序。它们的使用场景如下:

  • JMAP:JMAP用于生成Java堆转储快照,以便分析Java应用程序的内存使用情况。它可以提供关于对象数量、类型、大小等信息,帮助识别内存泄漏或者内存溢出问题。
  • JSTAT:JSTAT用于监视和收集Java虚拟机(JVM)的各种统计数据,例如垃圾回收情况、类加载情况、线程数量等。它可以实时显示这些统计数据,帮助开发人员了解应用程序的性能状况。
  • JSTACK:JSTACK用于生成Java线程转储快照,以便分析Java应用程序的线程状态和调用栈信息。它可以帮助开发人员定位死锁、死循环、线程阻塞等问题,并提供线程运行轨迹,有助于进行线程级别的故障排查。
  • JCMD是一个多功能的工具,它是一个运用更为全面的工具,可用于获取目标 Java 进程的性能统计、内存使用、垃圾收集、线程堆栈、JVM 运行时间,GC、导出线程信息、堆信息等、简单理解为它可以直接使用相关的名称获取信息

综上所述,JMAP适用于内存分析,JSTAT适用于性能监控,JSTACK适用于线程分析。根据具体的问题和需求,选择合适的工具可以更好地帮助开发人员进行调试和优化。

JMAP的使用

JMAP是一个命令行工具,用于生成Java堆转储快照。

以下是JMAP的使用方法和常用属性的解析:

使用方法:
输入jmap -<option> <pid>,其中<option>为JMAP的选项,<pid>为Java进程的进程ID。


常用选项(属性):

  • heap: 生成Java堆转储快照。示例:jmap -heap <pid>
  • histo: 生成Java堆中对象的统计信息,包括对象数量、类型和大小等。示例:jmap -histo <pid>
  • dump: 生成Java堆转储快照,并保存到文件中。示例:jmap -dump:format=b,file=<filename> <pid>
  • finalizerinfo: 显示等待终结的对象信息。示例:jmap -finalizerinfo <pid>
  • clstats: 显示类加载器的统计信息。示例:jmap -clstats <pid>
  • permstat: 显示永久代(PermGen/Metaspace)的统计信息。示例:jmap -permstat <pid>

也可以在服务中查看:

例如:jmap -heap <pid>  

参数说明:  
Heap Configuration:   #堆配置情况 
   MinHeapFreeRatio         #堆最小使用比例
   MaxHeapFreeRatio        #堆最大使用比例
   MaxHeapSize                 #堆最大空间
   NewSize                         #新生代初始化大小
   MaxNewSize                  #新生代可使用最大容量大小
   OldSize                          #老生代大小
   NewRatio                       #新生代比例
   SurvivorRatio                 #新生代与suvivor的占比
   MetaspaceSize              #元数据空间初始大小
   CompressedClassSpaceSize     #类指针压缩空间大小, 默认为1G
   MaxMetaspaceSize  #元数据空间的最大值, 超过此值就会触发 GC溢出( JVM会动态地改变此值)
   G1HeapRegionSize       #区块的大小

Heap Usage:
G1 Heap:
   regions       # G1区块初始化大小
   capacity     #G1区块最大可使用大小
   used      #G1区块已使用内存
   free        #G1区块空闲内存
   18.137190118432045% used     #G1区块使用比例
G1 Young Generation:  #新生代
Eden Space:  #Eden区空间
   regions  = 670
   capacity = 2699034624 (2574.0MB)
   used     = 1405091840 (1340.0MB)
   free     = 1293942784 (1234.0MB)
   52.05905205905206% used
Survivor Space: #Survivor区
   regions  = 3
   capacity = 6291456 (6.0MB)
   used     = 6291456 (6.0MB)
   free     = 0 (0.0MB)
   100.0% used
G1 Old Generation: #老生代
   regions  = 72
   capacity = 1589641216 (1516.0MB)
   used     = 146589472 (139.79861450195312MB)
   free     = 1443051744 (1376.2013854980469MB)
   9.221544492213267% used

JSTAT的使用

JSTAT是一个用于监视和收集Java虚拟机(JVM)统计数据的命令行工具。它提供了多个选项和属性,用于显示不同方面的JVM统计信息。

以下是JSTAT的使用方法和常用属性的解析:

使用方法:
输入jstat -<option> <pid> [<interval> [<count>]]

其中<option>为JSTAT的选项,<pid>为Java进程的进程ID,

<interval>为采样间隔时间(以毫秒为单位),<count>为采样次数。

常用选项(属性):

  • -class:显示类加载、卸载数量和总空间等信息。
  • -compiler:显示JIT编译器的编译任务和耗时等信息。
  • -gc:显示垃圾回收器的统计信息,包括堆内存使用、GC时间、吞吐量等。
  • -gcutil:显示垃圾回收器的详细统计信息,包括堆内存使用、GC时间、吞吐量、GC持续时间等。
  • -gccause 显示GC触发的原因的时间等
  • -gccapacity:显示堆内存容量和使用情况的详细信息。
  • -gcnew:显示新生代垃圾回收器的统计信息。
  • -gcnewcapacity:显示新生代堆内存容量和使用情况的详细信息。
  • -gcold:显示老年代垃圾回收器的统计信息。
  • -gcoldcapacity:显示老年代堆内存容量和使用情况的详细信息。
  • -gcpermcapacity:显示永久代(PermGen/Metaspace)容量和使用情况的详细信息。

也可以在Linux中查看具体的选项:

例如:jstat -gcutil 23397 1000 15     -- 每秒中打印一次,打印15次

 也可以换成如下写法:

通过查看 新生代、老年代以及GC的次数、时间、调整服务启动参数的设置

参数解析:

  • S0: 幸存者区(Survivor)0的使用百分比。
  • S1: 幸存者区(Survivor)1的使用百分比。
  • E: 伊甸园(Eden)区的使用百分比。
  • O: 老年代(Old Generation)的使用百分比。
  • M: 元空间(Metaspace)的使用百分比。
  • CCS: 压缩类空间(Compressed Class Space)的使用百分比。
  • YGC: 年轻代垃圾回收的次数。
  • YGCT: 年轻代垃圾回收的总时间(以秒为单位)。
  • FGC: Full GC(全局垃圾回收)的次数。
  • FGCT: Full GC(全局垃圾回收)的总时间(以秒为单位)。
  • GCT: 所有垃圾回收的总时间(以秒为单位)。
  • NGCMN: 年轻代最小容量(以KB为单位)。
  • NGCMX: 年轻代最大容量(以KB为单位)。
  • NGC: 年轻代当前容量(以KB为单位)。
  • OGCMN: 老年代最小容量(以KB为单位)。
  • OGCMX: 老年代最大容量(以KB为单位)。
  • OGC: 老年代当前容量(以KB为单位)。
  • MCMN: 元空间最小容量(以KB为单位)。
  • MCMX: 元空间最大容量(以KB为单位)。
  • MC: 元空间当前容量(以KB为单位)。
  • CCSMN: 压缩类空间最小容量(以KB为单位)。
  • CCSMX: 压缩类空间最大容量(以KB为单位)。
  • CCSC: 压缩类空间当前容量(以KB为单位)。

通过分析这些参数信息,可以了解垃圾回收器的使用情况、堆内存的使用情况和变化趋势等,帮助识别内存问题并进行性能调优。

例如:jstat -gccause 23397 1s 10     -- 查看GC的原因

JSTACK的使用

jstack是一个用于生成Java线程转储快照的命令行工具,它可以帮助分析和诊断Java应用程序中的线程问题。

使用方法:
     输入jstack [-m] <pid>,其中<pid>为Java进程的进程ID。


常用选项(属性):

  • -l:输出长格式线程转储,包括锁信息。
  • -F:当目标Java进程无响应时,强制生成线程转储。
  • -m:输出Java和本地堆栈信息。
  • -h:显示帮助信息。

输出解析:
jstack输出的内容包含了当前Java进程中所有线程的堆栈跟踪信息。每个线程的堆栈跟踪以线程ID开始,并按照调用层次结构显示方法调用序列。

以下是一些常见的线程状态和属性的解析:

  • java.lang.Thread.State:线程的状态,如RUNNABLE(运行中)、WAITING(等待中)、TIMED_WAITING(定时等待中)等。
  • at <class>.<method>(<file>:<line>):方法调用的堆栈跟踪信息,包括类名、方法名和源代码文件位置。
  • Locked <monitor>:线程正在持有某个监视器锁。
  • Waiting on <monitor>:线程正在等待某个监视器锁。
  • Blocked on <monitor>:线程被阻塞在某个监视器锁上。

通过分析线程转储快照,可以了解Java应用程序中各个线程的状态、堆栈跟踪信息以及可能存在的死锁或性能问题。这对于诊断和解决线程相关的问题非常有帮助。

请注意,jstack命令需要与目标Java进程具有相同的用户权限才能执行成功。另外,建议在生产环境中谨慎使用该命令,以避免对应用程序性能产生不利影响。

例如: jstack -l 23397

JCMD的使用

使用帮助文档:

 使用 jcmd 获取服务进程

使用 jcmd <pid> help 获取可执行命令

例如: jcmd 23397 GC.heap_info

 例如: jcmd 23397  Thread.print

 总之,jcmd是一个功能强大的工具,可以帮助开发人员和运维人员对Java应用程序进行诊断、监控和管理,从而提高应用程序的可靠性和性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/657219.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

S7 1200 CM1241组态modbus rtu

S7 1200 V4.5版本 CM1241 V2.0版本 1 一开始遇到问题 CM1241 绿色灯一直闪烁, PLC 显示LED红色错误 网上查找可能固件不匹配 我一开始选的V2.2 最后选到V2.0才行 如果CM1241 绿灯变为常亮, 这样才是正确组态 如果不是常亮,那么是没有输出的 2 程序 弄了M1.0来启动配置m…

K-means算法

文章目录 1. K-means算法简介2. K-means算法原理2.1 算法具体步骤2.2 k取值方法2.2.1 手肘法2.2.2 轮廓系数法 2.3 K-means2.4 算法终止条件 3. K-means算法特点4. K-means算法应用场景5. K-means算法的Python应用5.1 K-means算法的Python实现5.2 sklearn.cluster.Kmeans函数的…

【Linux】timerfd——定时器

文章目录 前言认识 timerfdAPI timerfdAPI clock 官方示例简单使用epoll实现 前言 在 Linux 系统编程中&#xff0c;使用 timerfd 实现定时器功能是一种更加可靠、高效、灵活的方式。本文是对 timerfd 的简单使用&#xff0c;不涉及太过深入知识&#xff0c;熟练掌握几个常用 …

该死的科斯定理和三条保命原则

* * * 原创&#xff1a;刘教链 * * * 号外&#xff1a;今天在“刘教链”公众号次条发表了《内参&#xff1a;美联储下半年加息时间表和路径》&#xff0c;一号两文无法直接链接&#xff0c;请大家点击公众号卡片进入文章列表打开阅读。星球会员可以直接打开知识星球或discord …

企业级微服务架构实战项目--xx优选3-mq+nacos+es实现上下架

一 nacosmqes实现上下架 1.1 架构图 1.2 工程结构 1.3 核心代码流程 1.3.1 请求product模块 2.修改数据库&#xff0c;推送rabbitmq中 1.3.2 rabbitmq的工具类 1.3.3 search模块中rabbit客户端订阅信息 1.监听器监听信息 2.调用相应的上下架方法 2.1 调用product模块&…

c#网编实验五--WCF和TCP消息通信实验

分别编写服务端和客户端程序&#xff0c;利用基于WCF的TCP技术&#xff0c;实现在线聊天功能&#xff0c;完成在线用户列表管理&#xff0c;消息发送、接收的功能。 在同一个解决方案中&#xff0c;分别编写服务端程序和客户端程序&#xff0c;利用TCP实现简单的群聊功能。 具…

【领域驱动设计专题】一文带领你透视DDD领域驱动模型的本质和设计原理分析指南(构建领域知识)

一文带领你透视DDD领域驱动模型的本质和设计原理分析指南 前提介绍传统的软件设计方案瀑布设计方法敏捷方法学敏捷方法学的问题和局限性 构建领域知识认识和了解领域内容实体模型介绍分析飞行计划路线(route)路线(route) 领域专家进行交流&#xff0c;相互交换知识挖掘出关键的…

一台服务器最大能支持多少条 TCP 连接

一、一台服务器最大能打开的文件数 1、限制参数 我们知道在Linux中一切皆文件&#xff0c;那么一台服务器最大能打开多少个文件呢&#xff1f;Linux上能打开的最大文件数量受三个参数影响&#xff0c;分别是&#xff1a; fs.file-max &#xff08;系统级别参数&#xff09;&a…

npm发布自己的包

按照上面流程操作

基于Echarts构建停车场数据可视化大屏

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

XSS—存储型xss

xss >跨站脚本攻击>前端代码注入>用户输入的数据会被当做前端代码执行。 原理&#xff1a;使用者提交的XSS代码被存储到服务器上的数据库里或页面或某个上传文件里&#xff0c;导致用户访问页面展示的内容时直接触发xss代码。 输入内容后直接在下方回显&#xff0c;回…

【Python 随练】今天是哪一天?

题目&#xff1a; 输入某年某月某日&#xff0c;判断这一天是这一年的第几天&#xff1f; 简介&#xff1a; 在本篇博客中&#xff0c;我们将使用Python代码解决一个日期相关的问题&#xff1a;如何确定某一天是给定年份的第几天。我们将提供问题的解析&#xff0c;并给出一…

领导看了给你加薪!python +ddt+excel 一招鲜,接口自动化测试轻松搞定,测试报告惊艳四座!

“ 接口自动化测试是指通过编写代码或使用工具&#xff0c;模拟用户发送请求&#xff0c;验证接口是否符合设计规范和功能需求的过程。” 如何用 python ddtexcel 实现接口自动化测试 接口自动化测试可以提高测试效率和质量&#xff0c;节省测试成本和时间&#xff0c;保证测试…

使用PyTorch执行特征提取和微调的迁移学习来进行图像分类

使用PyTorch执行特征提取和微调的迁移学习来进行图像分类 1. 效果图2 项目结构3 什么是迁移学习4 如何使用PyTorch进行迁移学习&#xff1f;5 花朵数据集源码train_feature_extraction.pyfine_tune.pyinference.py 参考 这篇博客将介绍如何使用PyTorch深度学习库执行图像分类的…

U盘重装系统Win10详细步骤和方法

当前超多的用户都在使用Win10系统&#xff0c;有些用户想使用U盘来重装一下Win10系统&#xff0c;但不知道具体怎么操作&#xff0c;其实操作起来难度不会很大&#xff0c;可以按照以下小编给大家分享的U盘重装系统Win10详细步骤和方法&#xff0c;就能轻松顺利完成U盘重装系统…

Jetson TX2 NX的GPIO引脚使用方式

Jetson TX2 NX是一款高性能的嵌入式AI计算平台&#xff0c;其中引脚的设计和使用对于开发人员来说非常重要。在本文中&#xff0c;我们将会介绍Jetson TX2 NX的引脚并说明其功能和使用方式。 官方文档官方文档 引脚概述 Jetson TX2 NX具有许多不同类型的引脚&#xff0c;包…

C++ 类的构造函数和析构函数

目录 类的构造函数和析构函数构造函数声明构造函数定义构造函数使用构造函数默认构造函数 析构函数析构函数的声明析构函数的定义 改进Stock类(加入构造函数和析构函数) 类的构造函数和析构函数 构造函数 常规的初始化语法不适用类的初始化 例如&#xff1a; int a 10;//整…

Deepin20.9 安装Mysql

文章目录 mysql下载查看 mysql 状态卸载卸载mysql&#xff1a;清理残留数据检查是否删除完毕 mysql Deepin 安装 下载 从网上下载 https://dev.mysql.com/get/mysql-apt-config_0.8.23-1_all.deb 安装 mysql-apt-config 下载文件名: mysql-apt-config_0.8.23-1_all.deb …

PoseiSwap IDO 即将开启,一览 $POSE 经济模型

以太坊创始人 Vitalik Buterin 曾在今年以太坊黑山大会上&#xff0c;进行了以“以太坊的三个技术挑战&#xff1a;扩容、隐私和用户安全”为主题的演讲&#xff0c;阐明了具有隐私性、可扩展性和安全性的且易访问的区块链生态将是行业发展趋势&#xff0c;或许重复造轮子正在变…

【探索 Kubernetes|作业管理篇 系列 10】Pod 健康检查和恢复机制

前言 大家好&#xff0c;我是秋意零。 上一篇中介绍了&#xff0c;Pod 的服务对象&#xff0c;从而对 Pod 有了更深的理解&#xff1b; 今天的主题是 Pod 健康检查和恢复机制&#xff0c;我们将结束 Pod 的内容。 最近搞了一个扣扣群&#xff0c;旨在技术交流、博客互助&am…