JVM学习总结,虚拟机性能监控、故障处理工具:jps、jstat、jinfo、jmap、Visual VM、jstack等

news2024/11/15 11:01:03

上篇:JVM学习总结,全面介绍运行时数据区域、各类垃圾收集器的原理使用、内存分配回收策略
参考资料:《深入理解Java虚拟机》第三版

文章目录

  • 三,虚拟机性能监控、故障处理工具
    • 1)jps:虚拟机进程状况工具
    • 2)jstat:虚拟机统计信息监视工具
    • 3)jinfo:Java配置信息工具
    • 4)jmap:Java内存映像工具
    • 5)jhat:虚拟机堆转储快照分析工具
    • 6)jstack:Java堆栈跟踪工具
    • 7)其他命令

三,虚拟机性能监控、故障处理工具

  给一个系统定位问题的时候,知识、经验是关键基础,数据是依赖,工具则是运用知识处理数据的手段。这里说的数据包括但不限于异常堆栈、虚拟机运行日志、垃圾收集器日志、线程快照(threaddump/javacore文件)、堆转储快照(heapdump/hprof文件)等。恰当地使用虚拟机故障处理、分析的工具可以提升我们分析数据、定位并解决问题的效率,但我们在学习工具之前,也应该意识到工具永远都是知识技能的一层包装

  总所周知JDK的bin目录中有java.exejavac.exe这两个命令行工具,随着JDK的版本迭代,这些小工具的数量与功能也在不断的增强中。除了编译与运行Java程序外,打包、部署、签名、调试、监控、运维等各种场景都有可能会遇到它们(展示的是jdk17):

image-20230218001735050

1)jps:虚拟机进程状况工具

  JDK很多小工具的命名都参考了UNIX命令的命名方式,jps(JVM Process Status Tool)则是其中的典型,除了命令像UNIX的ps命令之外,它的功能也与之类似:可以列出正在运行的虚拟机进程,并显示虚拟机执行主类(main函数所在的类)名称以及这些进程的本地虚拟机唯一ID(LVMID,Local Virtual Machine Identifier)

  虽然jps的功能比较单一,但其绝对是使用得最多的命令行工具之一,对于本地虚拟机进程来说LVMID与操作系统的进程ID(PID,Process Identifier)是一致的,使用windows的任务管理器或者UNIX的ps -ef|grep、losf -i:[host port]命令也可以查询到虚拟机进程的LVMID,但如果同时启动了多个虚拟机进程,无法根据进程名称来进行定位时,那就必须依赖jps命令显示主类的功能才能去区分了。

# 通过此命令可以查看虚拟机上所有运行的Java进程,有时候我们不知道端口或者应用名称,就可以使用这个命令查看Java进程的PID
jps [options] [hostid]
	# 参数options
	-q # 只输出LVMID
	-m # 输出虚拟机进程启动时传递给主类main()函数的参数
	-l # 输出主类的全名,如果进程执行的是jar包,则输出jar的路径
	-v # 输出虚拟机进程启动时的JVM参数
	-V # 输出仅包含本地JVM标识符的列表

image-20230218125441150

jps -v|grep 2485查看某个Java进程的启动JVM参数:

image-20230218142335415

2)jstat:虚拟机统计信息监视工具

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

# 注意s|ms中的|不是L
jstat [option vmid [interval[s|ms] [count]]]
# 如果是本地的虚拟机进程,那么VMID与LVMID是一致的,但如果是远程的虚拟机进程的话,那VMID的格式应该改变:
[protocol:][//]lvmid[@hostname[:port]/servername]
	# 参数解释
	interval # 查询间隔,表示多久执行一次查询
	count # 查询次数,如果省略这个和上面的参数则代表只查询一次
	# 假设需要每隔250ms查询一次垃圾收集情况,共查询20次:
	jstat -gc [vmid] 250 20
	# 参数枚举option,代表用户希望查询的虚拟机信息,主要分为三类:类加载、垃圾收集、运行期编译状况,详细参数如下:
参数jstat [option] vmid 中option参数作用
-class监视类加载、卸载数量、总空间以及类装载所耗费的时间
-gc监视Java堆情况,包括Eden、Survivor、老年代、永久代等的容量,已用空间,垃圾收集时间合计等信息
-gccapacity监视内容与-gc基本相同,但输出主要关注Java堆各个区域使用到的最大、最小空间
-gcutil监视内容与-gc基本相同,但输出主要关注已使用空间占总空间的百分比
-gccause与-gcutil功能一致,但是会多输出导致上一次垃圾收集产生的原因
-gcnew监视新生代的垃圾收集情况
-gcnewcapacity监视内容与-gcnew基本相同,输出主要关注使用到的最大、最小空间
-gcold监视老年代垃圾收集情况
-gcoldcapacity监视内容与-gcold基本相同,输出主要关注使用到的最大、最小空间
-gcpermcapacity输出永久代使用到的最大、最小空间
-compiler输出即时编译器编译过的方法、耗时等信息
-printcompilation输出已经被即时编译的方法

举例查询说明jstat -gcutil 2485 1000 5

image-20230218134346621

查询结果表明:这台机器上的2485进程(一个Java项目)

  1. E:新生代Eden(E表示Eden)使用了35.29%的空间;
  2. S0、S1:一个Survivor区使用了96.99%一个未使用(S0与S1表示Survivor0与Survivor1);
  3. O、M:老年代(O表示Old)使用了54.63%,而元空间区(M表示Metaspace)使用了99.3%;
  4. CCS:当前压缩类空间的容量(CCS)使用了97.33%;
  5. YGC、YGCT:程序自运行以来执行了12次Minor GC(YGC表示Young GC),总耗时0.032秒(TGCT表示YGC Time耗时时间);
  6. FGC、FGCT:程序自运行以来执行了0次Full GC(FGC表示Full GC),总耗时0秒(FGCT表示FGC Time耗时时间);
  7. CGC、CGCT:并发GC的数量(CGC表示Concurrent GC)为8,总耗时0.005秒;
  8. GCT:程序自运行以来所有GC的总耗时为0.037秒(GCT表示GC Time)。

3)jinfo:Java配置信息工具

  jinfo(Configuration Info for Java)的作用是实时查看和调整虚拟机的各项参数。使用jps -v参数可以查看虚拟机启动时显式指定的参数列表,但如果想知道未被显式指定的参数的系统默认值,除了去找资料外,就只能使用jinfo -flag 或者 java -XX:PrintFlagsFinal。jinfo还可以使用-sysprops选项把虚拟机进程的System.getProperties()内容打印出来。

# 查询指定参数值
jinfo [option] [vmid]
	# 查询G1的Region设置大小值(我使用的是Jdk17)
	jinfo -flag G1HeapRegionSize 2485

image-20230218143309101

4)jmap:Java内存映像工具

  jmap(Memory Map for Java)命令用于生成堆转储快照(一般称之为heapdump或dump文件)。之前说过还可以通过-XX:+HeapDumpOnOutOfMemoryError参数来让在JVM发生内存溢出异常时自动生成堆转储快照文件,还可以通过-XX:+HeapDumpOnCtrlBreak参数则可以使用[Ctrl]+[Break]键让虚拟机生成堆转储快照文件,又或者在Linux系统下通过kill -3命令发送进程退出信号,也能拿到dump文件。

  jmap的作用不仅仅是为了获取堆转储快照文件,它还可以查询finalize执行队列,Java堆和方法区的详细信息,如空间使用率、当前使用的是哪种收集器等。

# jmap命令格式:
jmap [option] vmid
	# 生成一个dump快照,生成的文件会直接保存在当前目录下
	jmap -dump:format=b,file=myboot.bin 2485
参数jmap [option] vmid 中option参数作用
-dump生成Java堆转储快照,格式为-dump:[live,]format=b,file=<filename>,其中live子参数说明是否只dump出存活的对象
-finalizerinfo显示在F-Queue中等待Finalizer线程执行finalize方法的对象
-heap显示Java堆详细信息,如使用哪种回收器、参数配置、分代状况(已弃用)
-histo显示堆中对象的统计信息,包括类、实例数量、合计容量
-permstat以ClassLoader为统计口径显示永久代的内存状态
-F当虚拟机对-dump参数无响应时,可使用这个参数强制生成dump快照

image-20230218153939838

5)jhat:虚拟机堆转储快照分析工具

  上面我们已经使用jmap命令来获取堆存储快照了,接下来我们就需要对该文件进行分析,JDK提供了jhat(JVM Heap Analysis Tool)命令与jmap搭配使用,来分析dump文件,但是在JDK9时该命令就被删除了。jhat使用可查看这篇文章。

# JDK9之后官方建议用VisualVM代替,在JDK8环境中还是可以使用的
jhat myboot.bin

VisualVM下载地址,Java的VM监控工具,jconsole的增强版,拥有非常强大的功能~
image-20230218161458340

6)jstack:Java堆栈跟踪工具

  jstack(Stack Trace for Java)命令用于生成虚拟机当前时刻的线程快照(一般称为threaddump或javacore文件)。线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈集合,生成线程快照的目的通常是为了定位线程出现长时间停顿的原因,如线程间死锁问题、死循环、请求外部资源而导致的长时间挂起等,都是导致线程长时间停顿的常见原因。线程出现停顿时可通过jstack来查看各个线程的调用堆栈,就可以获知没有响应的线程到底在后台做什么,或者等待什么资源。

# jstack命令格式
jstack [option] vmid
	# 参数option
	-l # 除堆栈外,显示关于锁的附加信息
	-F # 当正常输出的请求不被响应时,强制输出线程堆栈(已弃用)

image-20230218162719055

从JDK5开始,java.lang,Thread类新增了一个方法getAllStackTraces()方法用于获取虚拟机中所有线程的StackTraceElement对象。使用这个方法就可以通过几行代码完成jstack的大部分功能。

7)其他命令

前面介绍了几个常用的命令,还有很多其他强大的命令就不一一介绍了,查看官方文档介绍。

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

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

相关文章

清风1.层次分析法

一.流程1.建立评价体系2.建立判断矩阵2.1 A-C-C矩阵从准则层对目标层的特征向量上看&#xff0c;花费的权重最大算术平均法求权重的结果为&#xff1a;0.26230.47440.05450.09850.1103几何平均法求权重的结果为&#xff1a;0.26360.47730.05310.09880.1072特征值法求权重的结果…

人工智能轨道交通行业周刊-第34期(2023.2.13-2.19)

本期关键词&#xff1a;智慧地铁、枕簧检测选配机器人、智慧工地、接触网检修、工业缺陷检测 1 整理涉及公众号名单 1.1 行业类 RT轨道交通人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网上榜铁路视点ITS World轨道交通联盟VSTR铁路与城市轨道交通RailMetro…

Spring boot整合mongodb

1.下载及说明 下载地址&#xff1a;Try MongoDB Atlas Products | MongoDB 下载之后在mongodb的文件夹中配置data文件用来存放数据。 传统的关系数据库一般由数据库&#xff08;database&#xff09;、表&#xff08;table&#xff09;、记录&#xff08;record&#xff09;…

Java实现 华为2016校园招聘上机笔试题(牛客网能不能用点心......题目不完整、不清楚)

文章目录最高分是多少简单错误记录扑克牌大小牛客网…能不能用点心&#xff0c;题目根本不完整&#xff0c;是不是包含多组输入也不说&#xff0c;还是百度了别人的博客&#xff0c;才看到的完整题目&#xff0c;无语了… 最高分是多少 输入都不完整&#xff1a;以下是看别人的…

爆红的chatgpt是如何诞生的?程序员要如何使用

大家好&#xff0c;小编来为大家解答以下问题爆红的chatgpt是如何诞生的?&#xff0c;一个有趣的事情&#xff0c;一个有趣的事情程序员要如何使用&#xff0c;现在让我们一起来看看吧&#xff01; 1、chatGPT是哪个公司做的&#xff1f; Chatgpt &#xff08;中文&#xff1…

Ubuntu 20 安装包下载(清华镜像)

Ubuntu 20 安装包下载在国内推荐使用清华大学镜像 清华镜像地址&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/ 在搜索框中输入Ubuntu&#xff0c;然后点击Ubuntu -release&#xff0c;这里面有近几年的Ubuntu镜像 点击你想下载的版本&#xff0c;我选择的是20.0413点击…

tauri 打包现有React 项目(window)

注意事项&#xff1a;1.此项目没有路由&#xff0c;2.没有 API请求 环境配置 请看文档 tauri 文档 第一步&#xff1a;在需要打包的项目根目录执行命令 npm install --save-dev tauri-apps/cli第二步&#xff1a;在 package.json scripts 中添加 tauri "scripts": …

使用canvas实现腾讯自选股K线图

前言 平常为了方便看行情就会打开小程序看走势&#xff0c;作为一个开发在看腾讯自选股的日K时就会在想这个玩意是怎么弄的呢&#xff1f;下面我就用h5来实现一个最简K线图。 K线的构成以及画法 K线又称阴阳线、棒线、红黑线或蜡烛线。K线是一条柱状的线条&#xff0c;由实体…

[数据结构]---八大经典排序算法详解

&#x1f427;作者主页&#xff1a;king&南星 &#x1f3f0;专栏链接&#xff1a;c 文章目录一、八大排序算法复杂度对比二、基于比较的排序算法1.冒泡排序2.选择排序3.插入排序4.希尔排序5.直观感受四种算法的时间复杂度三、基于非比较的排序算法1.基数排序2.箱(桶)排序四…

MySQL 实战记录篇

记录一下在MySQL实战中简单的笔记 MySQL的逻辑架构&#xff0c;一条查询语句是怎么执行的&#xff1f; MySQL 的架构共分为两层&#xff1a;Server 层和存储引擎层 简单的架构图&#xff1a; 连接器&#xff1a;用来和mysql服务器建立连接&#xff0c;tcp三次握手&#xff0…

SpringCloud系列(十三)[分布式搜索引擎篇] - ElasticSearch 的概念及 Centos 7 下详细安装步骤

打开淘宝, 搜索 狂飙 会出现各种价格有关狂飙的书籍, 当然也有高启强同款的孙子兵法!!! 如下图所示: 那么面对海量的数据, 如何快速且准确的找到我们想要的内容呢? 淘宝界面已经可以按照综合排序 / 销量 / 信用 / 价格等进行筛选, 是如何做到的呢? ElasticSearch 11 Elastic…

实战一(下):如何利用基于充血模型的DDD开发一个虚拟钱包系统?

上一节课,我们做了一些理论知识的铺垫性讲解,讲到了两种开发模式,基于贫血模型的传统开发模式,以及基于充血模型的DDD开发模式。今天&#xff0c;我们正式进入实战环节&#xff0c;看如何分别用这两种开发模式&#xff0c;设计实现一个钱包系统。话不多说&#xff0c;让我们正式…

python自制PDF转换.PNG格式图片(按每页生成图片完整源码)小工具!

使用PyQt5应用程序制作PDF转换成图片的小工具&#xff0c;可以导入PDF文档后一键生成对应的PNG图片。 PDF图片转换小工具使用的中间件&#xff1a; python版本&#xff1a;3.6.8 UI应用版本&#xff1a;PyQt5 PDF文件操作非标准库&#xff1a;PyPDF2 PNG图片生成库&#xff1…

VINS-Mono/Fusion与OpenCV去畸变对比

VINS中没有直接使用opencv的去畸变函数&#xff0c;而是自己编写了迭代函数完成去畸变操作&#xff0c;主要是为了加快去畸变计算速度 本文对二者的结果精度和耗时进行了对比 VINS-Mono/Fusion与OpenCV去畸变对比1 去畸变原理2 代码实现2.1 OpenCV去畸变2.2 VINS去畸变3 二者对…

压缩20M文件从30秒到1秒的优化过程

压缩20M文件从30秒到1秒的优化过程 有一个需求需要将前端传过来的10张照片&#xff0c;然后后端进行处理以后压缩成一个压缩包通过网络流传输出去。之前没有接触过用Java压缩文件的&#xff0c;所以就直接上网找了一个例子改了一下用了&#xff0c;改完以后也能使用&#xff0…

(考研湖科大教书匠计算机网络)第四章网络层-第九节:虚拟专用网与网络地址转换

获取pdf&#xff1a;密码7281专栏目录首页&#xff1a;【专栏必读】考研湖科大教书匠计算机网络笔记导航 文章目录一&#xff1a;虚拟专用网&#xff08;1&#xff09;虚拟专用网是什么&#xff08;2&#xff09;虚拟专用网如何分配IP地址&#xff08;3&#xff09;例子&#x…

【JAVA八股文】框架相关

框架相关1. Spring refresh 流程2. Spring bean 生命周期3. Spring bean 循环依赖解决 set 循环依赖的原理4. Spring 事务失效5. Spring MVC 执行流程6. Spring 注解7. SpringBoot 自动配置原理8. Spring 中的设计模式1. Spring refresh 流程 Spring refresh 概述 refresh 是…

深度学习(1)神经网络基础

要学习深度学习&#xff0c;那么首先要熟悉神经网络&#xff08;Neural Networks&#xff0c;简称NN&#xff09;的一些基本概念。当然&#xff0c;这里所说的神经网络不是生物学的神经网络&#xff0c;我们将其称之为人工神经网络&#xff08;Artificial Neural Networks&…

海豚调度2.0.5 星环驱动包踩坑(二)worker服务正常、zk注册正常,心跳时间不更新,也不执行任务,任务一直处于执行中状态

目录背景问题记录20230206 发现服务启动失败20230215 有一台worker不执行作业&#xff0c;其它均正常问题解决问题思考背景 之前分享过海豚调度2.0.5连接星环库使用记录&#xff0c;后来说存储过程又出现了超时的情况&#xff0c;原因是因为调度星环驱动包和生产星环库驱动包不…

ES 异常写入解决流程

问题说明 一天下午&#xff0c;在北京客户现场的同学反馈我们elasticsearch出现的大量的异常&#xff0c;他反馈说他使用多线程写入大量数据到elasticsearch集群时&#xff0c;隔一段时间之后就会出现CircuitBreakingException&#xff0c;多尝试几次后&#xff0c;他就把问题反…