JVM—jps、jstat、jinfo、jmap、jstack的使用

JVM—jps、jstat、jinfo、jmap、jstack的使用

jps

jps全称:Java Virtual Machine Process Status Tool

可以查看Java进程,相当于Linux下的ps命令,只不过它只列出Java进程。

jps:列出Jav程序ID和Main函数名称
jps -q:只输出进程ID
jps -m :输出传递给Java进程(主函数)的参数
jps -l:输出主函数的完整路径
jps -v:显示传递给Java虚拟的参数

例如:

jps -l

测试

jstat

jstat全称:JVM Statistics Monitoring Tool
jstat可以查看Java程序运行时相关信息,可以通过它查看运行时堆信息的相关情况。

jstat -<options> [-t] [-h<lines>] <vmid> [<interva1>I count>]]
options:由以下值构成
-class:显示C1assLoader的相关信息
-compiler:显示了JIT编译的相关信息
-gc:显示与GC相关信息
-gccapacity:显示各个代的容量和使用情况
-gccause.显示垃圾收集相关信息〈同-gcutil),同时显示最后一次或当前正在发生的垃圾收集的诱发原因
-gcnew:显示新生代信息 
-gcnewcapacity:显示新生代大小和使用情况
-gcold:显示老年代信息
-gcoldcapacity:显示老年代大小
-gcpermcapacity:显示永久代大小
-gcutil:显示垃圾收集信息

找到进程id

找到进程id

例如:

下面输出的是进程内存区域及GC详细信息

jstat -gc 17351 250 4
# 进程ID 17351 ,采样间隔250ms,采样数4

例子

s0C:年轻代中第一个survivor(幸存区)的容量(单位kb)
s1C:年轻代中第二个survivor(幸存区)的容量(单位kb)
s0u :年轻代中第一个survivor(幸存区)目前已使用空间(单位kb)
s1U :年轻代中第二个survivor(幸存区)目前已使用空间(单位kb)
EC :年轻代中Eden的容量(单位kb)
EU :年轻代中Eden目前己使用空间(单位kb)
oC : old代的容量(单位kb)
ou : old代目前已使用空间(单位kb)
MC: metaspace的容量(单位kb)
MU: metaspace目前已使用空间(单位kb)
ccsc:压缩类空间大小
ccsu:压缩类空间使用大小
YGC :从应用程序启动到采样时年轻代中gc次数
YGCT :从应用程序启动到采样时年轻代中gc所用时间(s)
FGC :从应用程序启动到采样时o1d代(全gc)gc次数
FGCT :从应用程序启动到采样时old代(全gc)gc所用时间(s)
GCT:从应用程序启动到采样时gc用的总时间(s)

例子2:

下面输出的是进程内存区域百分百 及 GC详细信息

jstat -gcutil 17351 1s 5
# 进程ID 17351,采样间隔1s,采样数5

截图

s0:年轻代中第一个survivor(幸存区)己使用的占当前容量百分比
s1:年轻代中第二个survivor(幸存区)已使用的占当前容量百分比
E:年轻代中Eden(伊甸园)已使用的占当前容量百分比
O:old代已使用的占当前容量百分比
M:metaspace已使用的占当前容量百分比
ccs压缩使用比例
YGC:从应用程序启动到采样时年轻代中gc次数
YGCT:从应用程序启动到采样时年轻代中gc所用时间(s)
FGC:从应用程序启动到采样时old代(全gc)gc次数
FGCT:从应用程序启动到采样时o1d代(全gc)gc所用时间(s)
GCT:从应用程序启动到采样时gc用的总时间(s)

jinfo

jinfo全称Java Configuration Info
jinfo可以用来查看正在运行的Java程序的扩展参数,甚至支持修改运行过程中的部分参数。

jinfo [option] <pid>

-flags 打印虚拟机 VM 参数
-flag <name> 打印指定虚拟机 VM 参数
-flag [+|-]<name> 打开或关闭虚拟机参数
-flag <name>=<value> 设置指定虚拟机参数的值

例子如下:

jinfo -flags 17351

截图

jmap

jmap全称Java Memory Map
jmap用来查看堆内存使用状况,一般结合jhat使用。

no option

命令:jmap pid
描述:查看进程的内存映像信息。使用不带选项参数的jmap打印共享对象映射,将会打印目标虚拟机中加载的每个共享对象的
起始地址、映射大小以及共享对象文件的路径全称。

例子

jmap 17351

截图

heap

命令:jmap -heap pid
描述:显示Java堆详细信息:打印堆的摘要信息,包括使用的GC算法、堆配置信息和各内存区域内存使用信息

例子

jmap -heap 17351

截图

histo[:live]

命令:jmap -histo:live pid
描述:显示堆中对象的统计信息:其中包括每个Java类、对象数量、内存大小(单位:字节)、完全限定的类名。打印的虚拟机内部的类名称将会带有一个’*’前缀。如果指定了live子选项,则只计算活动的对象。

例子

jmap -histo:live 17351

截图

clstats

命令:jmap -clstats pid
描述:打印类加载器信息:打印Java堆内存的方法区的类加载器的智能统计信息。对于每个类加载器而言,它的名称、活跃度、
地址、父类加载器、它所加载的类的数量和大小都会被打印。此外,包含的字符串数量和大小也会被打印。

dump:<dump-options>

命令: jmap -dump:format=b,file=heapdump.hprof pid
描述:生成堆转储快照dump文件:以二进制格式转储Java堆到指定文件中。如果指定了live子选项,堆中只有活动的对象会被转
储。浏览heap dump 可以使用jhat 读取生成的文件,也可以使用MAT等堆内存分析工具。
注意:这个命令执行,JVM会将整个heap的信息dump写入到一个文件,heap如果比较大的话,就会导致这个过程比较耗时,并且执
行的过程中为了保证dump的信息是可靠的,所以会暂停应用, 线上系统慎用!

例子

jmap -dump:format=b,file=heapdump.hprof 17351

截图

jhat

jhat全称Java Heap Analysis Tool

jhat 命令会解析Java堆转储文件,并启动一个 web server。然后用浏览器来查看/浏览 dump 出来的 heap二进制文件。
jhat 命令支持预先设计的查询,比如:显示某个类的所有实例。还支持 对象查询语言(OQL)。 OQL有点类似SQL,专门用来
查询堆转储。

Java生成堆转储的方式有多种:
1. 使用 jmap -dump 选项可以在JVM运行时获取 dump.
2. 使用 jconsole 选项通过 HotSpotDiagnosticMXBean 从运行时获得堆转储。
3. 在虚拟机启动时如果指定了 -XX:+HeapDumpOnOutOfMemoryError 选项,则抛出 OutOfMemoryError 时,会自动执行堆转
储。

命令为

jhat [ options] heap-dump-file

我们分析,刚才生成的heapdump.hprof文件

# 来到文件所在目录
jhat  ./heapdump.hprof

截图

会暴露一个7000端口;在浏览器查看

截图

jstack

jstack全称Java Stack Trace

jstack是Java虚拟机自带的一种堆栈跟踪工具,用于生成java虚拟机当前时刻的线程快照。

线程快照是当前Java虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待、等等。

线程快照里留意下面几种状态

  • 死锁,Deadlock(重点关注)
  • jhat [ options 1 ] heap-dump-file
  • 等待资源,Waiting on condition(重点关注)
  • 等待获取管程,Waiting on monitor entry(重点关注)
  • 阻塞,Blocked(重点关注)
  • 执行中,Runnable
  • 暂停,Suspended
  • 对象等待中,Object.wait() 或 TIMED_WAITING
  • 停止,Parked
jstack [ option ] pid 查看当前时间点,指定进程的dump堆栈信息。
jstack [ option ] pid > 文件 将当前时间点的指定进程的dump堆栈信息,写入到指定文件中。
# 注:若该文件不存在,则会自动生成; 若该文件存在,则会覆盖源文件。
jstack [ option ] executable core 查看当前时间点,core文件的dump堆栈信息。
jstack [ option ] [server_id@]<remote server IP or hostname> 查看当前时间点,远程机器的dump堆栈信息。

可选参数:

-F # 当进程挂起了,此时'jstack [-l] pid'是没有相应的,这时候可使用此参数来强制打印堆栈信息,强制jstack),一般情况不
需要使用。
-m # 打印java和native c/c++框架的所有栈信息。可以打印JVM的堆栈,以及Native的栈帧,一般应用排查不需要使用。
-l # 长列表. 打印关于锁的附加信息。例如属于java.util.concurrent的ownable synchronizers列表,会使得JVM停顿得长久
得多(可能会差很多倍,比如普通的jstack可能几毫秒和一次GC没区别,加了-l 就是近一秒的时间),-l 建议不要用。一般情况不需
要使用。
-h or -hel # 打印帮助信息

jstack pid 打印堆栈

jstack  17351
# 或者输出到文件中查看
jstack 17351 > jvm_stack_info_17351.txt

统计线程数

jstack -l 进程id | grep 'java.lang.Thread.State' | wc -l

例子:

jstack -l 17351 | grep 'java.lang.Thread.State' | wc -l

截图

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

故障诊断 | Matlab实现基于小波包结合卷积神经网络DWT-CNN实现电缆故障诊断算法

故障诊断 | Matlab实现基于小波包结合卷积神经网络DWT-CNN实现电缆故障诊断算法 目录 故障诊断 | Matlab实现基于小波包结合卷积神经网络DWT-CNN实现电缆故障诊断算法分类效果基本介绍程序设计参考资料 分类效果 基本介绍 1.Matlab实现基于小波包结合卷积神经网络DWT-CNN实现电…

在k8s 中部署有状态服务MongoDB高可用集群详解(附带镜像)

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Kubernetes航线图&#xff1a;从船长到K8s掌舵者》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、前言 1、k8s简介 2、MongoDB介绍 3、为什么要…

精确号码比例放通算法的设计与实现

精确号码比例放通算法的设计与实现 引言背景问题定义算法设计1. 数据结构2. 算法流程3. 伪代码4. C语言实现 结论参考文献 引言 随着通信技术的飞速发展&#xff0c;呼叫中心和电信运营商面临着日益增长的呼叫管理需求。在某些情况下&#xff0c;为了确保服务质量或者遵守特定…

⭐Unity 里调用弹出电脑系统文件选择窗 (选择图片/文件)

今天遇到的需求要从Uinty里调用选择程序外的图片&#xff0c;类似手机环境下拿图库的照片一样。 效果如下: 话不多说 直接上代码&#xff01; 1.编辑器模式下 using System.Collections; using System.Collections.Generic; using UnityEngine; using System.IO; using Syst…

[阅读笔记2][FLAN]FINETUNED LANGUAGE MODELS ARE ZERO-SHOT LEARNERS

接下来这篇是谷歌的FLAN&#xff0c;提出了指令微调这一新范式&#xff0c;在2022年发表。 这篇论文指出GPT3的zero-shot性能相比few-shot性能差太多了。他们发现如果对预训练模型进行指令微调能使zero-shot性能显著提升&#xff0c;下面右图显示指令微调后zero-shot比GPT3 few…

[Spring Cloud] (3)gateway令牌token拦截器

文章目录 集成redisNacos配置增加 redis配置配置pomredis配置RedisConfigredis序列化工具FastJson2JsonRedisSerializer测试 令牌校验拦截器nacos配置拦截器代码微服务登录接口实现 最终效果-登录接口与数据接口 本文gateway与微服务已开源到gitee 杉极简/gateway网关阶段学习 …

ORA-00742 ORA-00312 恢复---惜分飞

有客户反馈,断电之后数据库启动报ORA-00742和ORA-00312,无法正常open 我们远程上去尝试open库结果也报同样错误 [oracleoldhis oradata]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on Wed Apr 10 09:40:03 2024 Copyright (c) 1982, 2013, Oracle. A…

基于Springboot的汉服推广网站

基于SpringbootVue的汉服推广网站设计与实现 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringbootMybatis工具&#xff1a;IDEA、Maven、Navicat 系统展示 用户登录页 首页 图文动态区 视频动态区 近期活动 汉服交流 汉服知识 后台登录页 后台首页…

基于SpringBoot的“汉服文化平台网站”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“汉服文化平台网站”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 系统功能界面图 用户登录、用…

海外代理IP是什么,如何使用?

海外代理IP是一种网络工具&#xff0c;它允许用户通过位于海外的服务器来访问互联网。这种技术的主要作用是帮助用户突破地域限制&#xff0c;解锁全球视野&#xff0c;并保护用户的隐私和安全。 具体来说&#xff0c;海外代理IP的工作原理是&#xff1a;用户的请求首先被发送…

2024年全球可穿戴腕带设备市场将增长 7%,蓝牙BLE助力其发展

根据市场调查机构 Canalys 今日发布的最新报告&#xff0c;2023 年&#xff0c;全球可穿戴腕带设备市场实现 1.4% 的温和增长&#xff0c;出货量达 1.85 亿台。该机构预测 2024 年&#xff0c;全球可穿戴腕带市场将增长 7%。 Canalys 对 2024 年可穿戴腕带市场持谨慎乐观的态…

每日一题---OJ题: 旋转数组

片头 嗨! 小伙伴们,咱们又见面啦,今天我们一起来学习一道OJ题---旋转数组 emmm,看上去好像没有那么难,我们一起来分析分析 比如: 数组里面有7个元素,分别为 1, 2, 3, 4, 5, 6, 7 , 现在我们将数组中的元素向右轮转3个位置 第一次轮转:将最后一个元素"7"放在第一个…

HashMap与HashSet的不安全问题

HashSet的不安全问题 HashSet与ArrayList一样也存在不安全的问题&#xff0c;当多线程时也会出现ConcurrentModificationException&#xff0c;并发修改异常需要提出解决方案 问题 public static void main(String[] args) {Set<Integer> set new HashSet<>();…

基于 Operator 部署 Prometheus 监控 k8s 集群

目录 一、环境准备 1.1 选择版本 1.2 过滤镜像 1.3 修改 yaml 镜像 1.4 移动 *networkPolicy*.yaml 1.5 修改 service 文件 1.6 提前下载镜像并推送到私有镜像仓库 1.7 修改镜像&#xff08;可选&#xff09; 二、执行创建 三、查看 pod 状态 四、访问 prometheus、…

计算机毕业设计springboot小区物业报修管理系统m8x57

该物业报修管理系统实施的目的在于帮助物业管理企业升级员工管理、住户管理、报修问题管理等内部管理平台&#xff0c;整合物业管理企业物力和人力&#xff0c;全面服务于维修人员管理的内部管理需求,并重视需求驱动、管理创新、与业主交流等外部需求,通过物业管理企业各项资源…

【深入理解Java IO流0x09】解读Java NIO核心知识(下篇)

1. NIO简介 在开始前&#xff0c;让我们再简单回顾一下NIO。 在传统的 Java I/O 模型&#xff08;BIO&#xff09;中&#xff0c;I/O 操作是以阻塞的方式进行的。也就是说&#xff0c;当一个线程执行一个 I/O 操作时&#xff0c;它会被阻塞直到操作完成。这种阻塞模型在处理多…

第⑫讲:Ceph集群OSD扩缩容中Reblanceing数据的重分布

文章目录 1.Reblanceing数据重分布的概念2.验证Reblanceing触发的过程3.Reblanceing细节4.临时关闭Reblanceing机制 1.Reblanceing数据重分布的概念 当集群中OSD进行扩缩容操作后&#xff0c;会触发一个Reblanceing数据重分布的机制&#xff0c;简单的理解就是将扩缩容前后OSD…

服务调用-微服务小白入门(4)

背景 各个服务应用&#xff0c;有很多restful api&#xff0c;不论是用哪种方式发布&#xff0c;部署&#xff0c;注册&#xff0c;发现&#xff0c;有很多场景需要各个微服务之间进行服务的调用&#xff0c;大多时候返回的json格式响应数据多&#xff0c;如果是前端直接调用倒…

AI python

AI python 软件方面程序上的人工智能&#xff0c;和物理那种能跑机器人没关系

超聚变服务器快速收集硬件故障日志方法(iBMC)

1、使用网线直接连接服务器的Mgmt口&#xff0c;另外一端连接电脑 2、电脑随便配置一个192.168.2.101段的IP&#xff0c;除100外 3、使用以下默认信息连接IBMC&#xff0c;即可成功登录 默认连接地址&#xff1a;192.168.2.100 默认账号&#xff1a;Administrator 默认密码&am…