JVM监控和调优常用命令jps|jstat|jinfo|jmap|jhat|jstack实战

1.JVM监控和调优的主要目的

  1. 性能优化:通过JVM调优,可以提高Java应用程序的性能,减少响应时间,提高吞吐量,以更好地满足用户需求。性能优化可以加快应用程序的执行速度,减少延迟,提高用户体验。

  2. 内存管理:JVM负责管理Java应用程序的内存。正确的内存管理可以避免内存泄漏和内存溢出等问题,确保应用程序在长时间运行时不会耗尽内存或导致性能下降。

  3. 垃圾回收优化:垃圾回收是JVM的核心功能之一,它负责释放不再使用的对象并回收内存。通过调整垃圾回收器的参数和策略,可以减少垃圾回收的频率和开销,提高应用程序的响应速度。

  4. 资源利用率:JVM调优可以帮助应用程序更有效地利用计算资源,包括CPU、内存和线程等。这有助于降低硬件成本,提高应用程序的伸缩性和性能。

  5. 稳定性和可靠性:JVM调优可以提高应用程序的稳定性,降低崩溃和故障的风险。通过监视和调整JVM的行为,可以减少应用程序中的内存泄漏、死锁和其他潜在问题。

  6. 成本效益:优化JVM性能可以减少硬件和运维成本。通过更好地利用现有资源,可以延长硬件的使用寿命,降低云计算服务的费用,从而在长期内节省资金。

        总之,JVM调优是确保Java应用程序在生产环境中稳定、高性能运行的重要步骤。它需要深入理解Java虚拟机、垃圾回收机制、内存管理等方面的知识,以便根据应用程序的需求进行合适的调整和优化。通过JVM调优,可以提高应用程序的竞争力,提供更好的用户体验,并减少运维成本。

2.JVM监控和调优常用命令

2.1jps查看正在运行的Java进程

        jps(Java Process Status):显示指定系统内所有的HotSpot虚拟机进程(查看虚拟机进程信息),可用于查询正在运行的虚拟机进程。

基本使用语法为:jps [-q] [-mlvV] [<hostid>]

-q:仅仅显示LVMID(local virtual machine id),即本地虚拟机唯一id。不显示主类的名称等
-m:输出虚拟机进程启动时传递给主类main()的参数
-l:输出应用程序主类的全类名 或 如果进程执行的是jar包,则输出jar完整路径
-v:列出虚拟机进程启动时的JVM参数。比如:-Xms20m -Xmx50m是启动程序指定的jvm参数。---V:表示显示版本信息
hostid:RMI注册表中注册的主机名。如果想要远程监控主机上的 java 程序,需要安装 jstatd

上述命令在同一个【】内的命令也可以组合使用,示例
bdpcloud@host154[/home/bdpcloud]$ jps -mlvV
10240 DbToHiveServer-5.0.jar conf/reldbtohive -Xms512m -Xmx1g -Xss64m -Xmn128m -XX:MetaspaceSize=64m -XX:MaxMetaspaceSize=128m

2.2jstat查看JVM统计信息

        jstat(JVM Statistics Monitoring Tool):用于监视虚拟机各种运行状态信息的命令行工具。它可以显示本地或者远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。在没有GUI图形界面,只提供了纯文本控制台环境的服务器上,它将是运行期定位虚拟机性能问题的首选工具。常用于检测垃圾回收问题以及内存泄漏问题。

基本使用语法为:jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]

查看可选项:jstat -options所有参数
类装载相关的:
-class:显示ClassLoader的相关信息:类的装载、卸载数量、总空间、类装载所消耗的时间等
JIT相关的:
-compiler:显示JIT编译器编译过的方法、耗时等信息
-printcompilation:输出已经被JIT编译的方法
垃圾回收相关的(重点):
-gc:显示与GC相关的堆信息。包括Eden区、两个Survivor区、老年代、永久代等的容量、已用空间、GC时间合计等信息。
-gccapacity:显示内容与-gc基本相同,但输出主要关注Java堆各个区域使用到的最大、最小空间。
-gcutil:显示内容与-gc基本相同,但输出主要关注已使用空间占总空间的百分比。
-gccause:与-gcutil功能一样,但是会额外输出导致最后一次或当前正在发生的GC产生的原因。
-gcnew:显示新生代GC状况
-gcnewcapacity:显示内容与-gcnew基本相同,输出主要关注使用到的最大、最小空间
-gcold:显示老年代GC状况
-gcoldcapacity:显示内容与-gcold基本相同,输出主要关注使用到的最大、最小空间
其他参数说明:
[-t] :
 可以在输出信息前加上一个Timestamp列,显示程序的运行时间。单位:秒
[-h<lines>]:可以在周期性数据输出时,输出多少行数据后输出一个表头信息
<vmid>:jps中的JVM进程
[<count>]]:
用于指定输出统计数据的周期,单位为毫秒。即:查询间隔
<count>]]:用于指定查询的总次数

jstat -class查看
bdpcloud@host154[/home/bdpcloud]$ jstat -class 7872
Loaded  Bytes  Unloaded  Bytes     Time   
 23203 45413.4        0     0.0     245.35

jstat -compiler查看
bdpcloud@host154[/home/bdpcloud]$ jstat -compiler 7872
Compiled Failed Invalid   Time   FailedType FailedMethod
   27280      8       0  1544.76          1 com/alibaba/csp/sentinel/util/TimeUtil$1 run

jstat -printcompilation 查看(输出已经被JIT编译的方法)
bdpcloud@host154[/home/bdpcloud]$ jstat -printcompilation 7872
Compiled  Size  Type Method
   27280    456    1 redis/clients/jedis/JedisFactory validateObject

jstat -gc查看(基于内存大小分析)
示例:
bdpcloud@host154[/home/bdpcloud]$ jstat -gc 7873
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT   
10752.0 10752.0 6792.1  0.0   153088.0 22379.3   175104.0   16293.0   53760.0 50572.8 7168.0 6508.4     14    5.373   2      4.079    9.452

也可以指定时间,次数,打印总次数输出
bdpcloud@host154[/home/bdpcloud]$ jstat -gc -t 7873 1000 100

参数说明:
S0C:表示年轻代(Young Generation)中的 Survivor 0 区的容量(以KB为单位)。
S1C:表示年轻代中的 Survivor 1 区的容量(以KB为单位)。
S0U:表示年轻代中 Survivor 0 区的使用量(以KB为单位)。
S1U:表示年轻代中 Survivor 1 区的使用量(以KB为单位)。
EC:表示年轻代中 Eden 区的容量(以KB为单位)。
EU:表示年轻代中 Eden 区的使用量(以KB为单位)。
OC:表示老年代(Old Generation)的容量(以KB为单位)。
OU:表示老年代的使用量(以KB为单位)。
MC:表示方法区(Metaspace)的容量(以KB为单位)。
MU:表示方法区的使用量(以KB为单位)。
CCSC:表示压缩类空间(Compressed Class Space)的容量(以KB为单位)。
CCSU:表示压缩类空间的使用量(以KB为单位)。
YGC:表示年轻代垃圾回收的次数。
YGCT:表示年轻代垃圾回收所花费的总时间

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

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

相关文章

CKEditor5定制及文件上传

CKEditor4已从2023年6月开始停止支持&#xff0c;所以最好还是升级到CKEditor5。CKEditor5在使用上与CKEditor4在使用层面上还是有很大的不同&#xff0c;首先&#xff0c;CKEditor4完全可以下载包含了所有功能的full包&#xff0c;通过配置选择需要的功能&#xff0c;只有希望…

人们对区块链的认识开始变得深入和完善,另一条新路径开始衍生

当区块链行业的发展进入到深水区&#xff0c;特别是当有关区块链的狂热与躁动开始退场&#xff0c;仅仅只是主打区块链的概念&#xff0c;而没有找到区块链与现实商业联通的方式和方法&#xff0c;依然成为困扰区块链发展的一大症结。   事实上&#xff0c;从区块链被人们认识…

STL常用容器 (C++核心基础教程之STL容器详解)String的API

在C的标准模板库&#xff08;STL&#xff09;中&#xff0c;有多种容器可供使用。以下是一些常见的容器类型&#xff1a; 序列容器&#xff08;Sequential Containers&#xff09;&#xff1a; std::vector&#xff1a;动态数组&#xff0c;支持快速随机访问。 std::list&…

宠物电商Chewy第二季度销售额28亿美元,同比增长14.3%

美国宠物电商Chewy公布2023年第二季度财报。报告显示&#xff0c;其Q2季度销售额同比增长14.3%至28亿美元&#xff0c;超出市场预期。 以下为Chewy期内业绩概要&#xff1a; 1.毛利率28.3%&#xff0c;同比增长20个基点 2.净利润有所收窄&#xff0c;同比下降15.2%至1890万美…

9.2.tensorRT高级(4)封装系列-自动驾驶案例项目self-driving-深度估计

目录 前言1. 深度估计总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程&#xff0c;之前有看过一遍&#xff0c;但是没有做笔记&#xff0c;很多东西也忘了。这次重新撸一遍&#xff0c;顺便记记笔记。 本次课程学习 tensorRT 高级-自动驾驶案例项目self-driving-深度估…

备战面试每日一题

1.如何理解this&#xff1f; this表示的是函数运行时自动生成的一个内部对象&#xff0c;只能在函数内部使用&#xff0c;总是指向调用它的对象。 this是在运行时进行绑定的&#xff0c;并不是在编写的时候绑定&#xff0c;它的上下文取决于函数调用时的各种条件。this的绑定…

Mybatis学习|Mybatis缓存:一级缓存、二级缓存

Mybatis缓存 MyBatis包含一个非常强大的查询缓存特性&#xff0c;它可以非常方便地定制和配置缓存。缓存可以极大的提升查询效率。 MyBatis系统中默认定义了两级缓存:一级缓存和二级缓存 默认情况下&#xff0c;只有一级缓存开启。(SqlSession级别的缓存&#xff0c;也称为本地…

Python自动检测西北政法大学研究生院网站硕士招生新闻并发送邮件

因为近期需要时刻查看该网页的最新公布消息&#xff0c;所以使用python自动访问网页消息并通过邮件通知。 官网链接&#xff1a;硕士招生 - 西北政法大学研究生院 工具&#xff1a;python&#xff0c;官网下载python安装即可 插件安装&#xff1a; pip install BeautifulSou…

nginx实现负载均衡load balance

目录 nginx实现负载均衡load balance相关算法负载均衡https的访问后端的real server是否知道真正访问的用户的IP地址健康检查提升负载均衡的并发数量七层负载均衡和四层负载均衡七层负载均衡四层负载均衡四层和七层的区别502错误 nginx实现负载均衡load balance 准备&#xff…

Leetcode 1572.矩阵对角线元素之和

给你一个正方形矩阵 mat&#xff0c;请你返回矩阵对角线元素的和。 请你返回在矩阵主对角线上的元素和副对角线上且不在主对角线上元素的和。 示例 1&#xff1a; 输入&#xff1a;mat [[1,2,3],[4,5,6],[7,8,9]] 输出&#xff1a;25 解释&#xff1a;对角线的和为&#xff…

qt.qpa.plugin:找不到Qt平台插件“wayland“|| (下载插件)Ubuntu上解决方案

相信大家也都知道这个地方应该做什么&#xff0c;当然是下载这个qt平台的插件wayland,但是很多人可能不知道怎么下载这个插件。 那么我现在要说的这个方法就是针对这种的。 sudo apt install qtwayland5完事儿了奥兄弟们。 看看效果 正常了奥。

华纳云:Debian下dpkg-query命令怎么用

dpkg-query 是 Debian 和基于 Debian 的 Linux 发行版中用于查询已安装软件包信息的命令。它可用于检索关于已安装软件包的信息&#xff0c;如软件包名称、版本号、安装状态等。以下是 dpkg-query 命令的一些常见用法&#xff1a; 查询已安装软件包的列表&#xff1a; dpkg-q…

JVM类的加载相关的问题

JVM类的加载相关的介绍 学习类的加载的加载过程对深入理解JVM有十分重要的作用&#xff0c;下面就跟我一起学习JVM类的加载过程吧&#xff01; 文章目录 JVM类的加载相关的介绍一、类的加载过程二、双亲委派机制1、类加载器的种类2、为什么JVM要分成不同的类的加载器3、类的加…

MiniExcel

MiniExcel 是一个在 .NET 平台上用于操作 Excel 文件的库。它的特点是轻量级、简单易用&#xff0c;并且支持读取和写入 Excel 文件的功能。 使用 MiniExcel 可以进行以下操作&#xff1a; 读取 Excel 文件的数据&#xff0c;并将其转换为多维数组或实体对象。将多维数组或实…

机器人中的数值优化(十)——线性共轭梯度法

本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考&#xff0c;主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等&#xff0c;本系列文章篇数较多&#xff0c;不定期更新&#xff0c;上半部分介绍无约束优化&#xff0c;…

HDFS 架构剖析

目录 一、HDFS 架构整体概述 二、HDFS 集群角色介绍 2.1 整体概述 2.2 主角色&#xff1a;namenode 2.3 从角色&#xff1a;datanode 2.4 主角色辅助角色&#xff1a; secondarynamenode 三、HDFS 重要特性 3.1 主从架构 3.2 分块存储机制 3.3 副本机制 3.4 …

新的Ubuntu服务器上如何安装深度学习环境的docker

背景&#xff1a; 硬件&#xff1a;联想的双3090显卡 总共 48GB显存 4TB 刀片式服务器。 软件&#xff1a;只安装了nvidia的驱动&#xff0c;能用nvidia-smi查看显卡信息&#xff0c;但是 nvcc -V看不到东西。 镜像包是 nvidia_cu11_tf15.tar&#xff0c;里面包含 tensorfl…

JVM详细教程

JVM 前言 还在完善中先发布 JVM虚拟机厂家多钟多样&#xff0c;具体实现细节可能不一样&#xff0c;这里主要讲的是虚拟机的规范&#xff0c;以下内容融合了各个平台发布的内容和周志明老师的《深入理解java虚拟机》 JVM概述 如何理解jvm跨平台&#xff1f; 编译成汇编代码…

Vue+elementUI 导出word打印

import JSZipUtils from "jszip-utils"; import JSZip from "pizzip"; import Docxtemplater from "docxtemplater"; npm安装以上依赖 首先维护个word模板 导出方法 //导出wordskipOutWord(row) {var printData rowconst data JSON.parse(JS…

SpringMVC <url-pattern/>解读

1. < url-pattern/>的值 (1).使用拓展名的方式&#xff0c;语法*.xxx&#xff0c;xxx是自定义的拓展名&#xff0c;常用的方式*.do&#xff0c;*.action,不能使用*.jsp. (2).使用斜杠 "/"当项目中使用了 / &#xff0c;他会替代tomcat中的default。导致所有的…