【Java可执行命令】(十七)JVM运行时信息动态维护工具 jinfo:一个维护 JVM 相关的配置参数和系统属性的工具,辅助故障排除、诊断和优化 ~

Java可执行命令之jinfo

  • 1️⃣ 概念
  • 2️⃣ 优势和缺点
  • 3️⃣ 使用
      • 3.1 语法格式
      • 3.2 -flags:查看进程的启动参数
      • 3.3 -sysprops:查看进程的系统属性
      • 3.4 -flag < name>:查看特定虚拟机参数的值
      • 3.5 -flag [+/-]< name>:启用或禁用特定虚拟机参数的值
  • 4️⃣ 应用场景
  • 🌾 总结

在这里插入图片描述

1️⃣ 概念

jinfoJava Development Kit (JDK) 自带的一款命令行工具。它旨在为用户提供进程的运行时信息,特别是与 Java 虚拟机 (JVM) 相关的配置和系统属性。jinfo 使得用户可以轻松地查看和修改正在运行的 Java 进程的参数,以便进行故障排除、诊断和优化

jinfo 允许用户动态查询和修改 JVM 的运行时信息,包括系统属性、堆参数、环境变量、启动参数等。通过与 JVM 内部通信,该工具提供了修改虚拟机参数的能力,而无需重启 JVM。这对于调试和优化应用程序的性能非常有用。

jinfo 实际上是通过 Java Debug Interface (JDI) 来与正在运行的 Java 进程进行通信。它利用 JVM 提供的调试接口,向目标进程发送请求并获取所需的信息。这些信息包括启动参数、系统属性和堆参数等。修改操作是通过向 JVM 发送相应的命令来完成的。

2️⃣ 优势和缺点

优点:

  • 提供了便捷方式来获取并更改正在运行的 Java 进程的运行时信息;
  • 可以直接与 JVM 通信并进行实时修改,而无需重启进程;
  • 具有简单易懂的命令行接口,方便使用和操作。

缺点:

  • 需要访问该进程所属用户的权限;
  • 使用不当可能导致进程崩溃或数据丢失;
  • 涉及到 JVM 内部信息,因此需要具备一定的 Java 和 JVM 知识。

3️⃣ 使用

3.1 语法格式

jinfo 命令的使用语法如下:

jinfo [option] <pid>(to connect to running process)(连接到正在运行的进程)
jinfo [option] <executable <core>(to connect to a core file)(连接到核心文件)
jinfo [option] [server_id@]<remote server IP or hostname>(to connect to remote debug server)(连接到远程调试服务器)

其中,当用作连接到正在运行的进程时,<pid> 可以指定要操作的 Java 进程ID。

当用作连接到核心文件时,<executable <core> 表示可执行核心转储文件,指定正在运行的 Java 进程的可执行核心转储文件路径。

当用作连接到远程调试服务器时,[server_id@] 表示可选的服务器标识符,用于指定目标远程服务器的 ID。 <remote server IP or hostname>用于指定远程服务器的 IP 地址或主机名,指定要连接和操作的远程 Java 进程。jinfo 通过远程调试协议与目标服务器进行通信,并获取所需的运行时信息。

option 是可选的命令行选项,允许指定要执行的操作类型。一些常见的选项包括:

可选参数说明
-flag <name>显示指定虚拟机参数(flag)的值
-flag [+|-] <name>启用或禁用指定虚拟机参数
-flag <name>=<value>设置指定虚拟机参数(flag)的值
-flags显示所有虚拟机参数(flags)及其值
-sysprops显示 Java 系统属性及其值
-h-help显示帮助信息,列出 jinfo 命令的使用示例和选项说明

总的来说,jinfo 命令有以下常见的用法:

  • jinfo -flags <pid>:查看进程的启动参数;
  • jinfo -sysprops <pid>:查看进程的系统属性;
  • jinfo -flag <name> <pid>:查看特定虚拟机参数的值;
  • jinfo -flag [+/-]<name> <pid>:启用或禁用特定虚拟机参数的值。

下面我们逐一详细介绍。

同时需要注意,jinfo 命令需要相应 Java 进程所属用户的权限才能访问和修改信息。而修改虚拟机参数可能会对应用程序产生意想不到的影响,请谨慎使用,确保已经了解虚拟机参数的含义和影响,以避免意外结果发生。

3.2 -flags:查看进程的启动参数

jinfo -flags <pid> 用于查看指定进程的启动参数。通过运行该命令,可以获取正在运行的 Java 进程的虚拟机参数(flags)及其对应的值。

当执行 jinfo -flags <pid> 命令时,它将与指定的 Java 进程进行通信,并返回该进程所使用的所有虚拟机参数及其当前设置的值。虚拟机参数包括启动类路径、堆大小、垃圾收集器类型等。

以下片段是输出的一部分:

Command line:  -Xmx1024m -Xms512m
…
Environmental variable: 
JAVA_HOME=C:\Program Files\Java\jdk1.8.0_251
…
VM Flags:
-XX:CICompilerCount=4
-XX:InitialHeapSize=536870912
-XX:MaxHeapSize=1073741824
…

在上述示例中,我们可以看到进程的启动参数 -Xmx1024m -Xms512m,以及其他一些虚拟机参数的值。

使用 jinfo -flags <pid> 命令可以帮助了解正在运行的 Java 进程所使用的启动参数,这对于故障排除和性能优化非常有用。

3.3 -sysprops:查看进程的系统属性

jinfo -sysprops <pid> 用于查看指定进程的系统属性。通过运行该命令,可以获取正在运行的 Java 进程的系统属性及其对应的值。

当执行 jinfo -sysprops <pid> 命令时,它将与指定的 Java 进程进行通信,并返回该进程的所有系统属性及其当前设置的值。系统属性包括 Java 版本、操作系统名称、用户名称等。

以下是示例输出的一部分:

Command line: …
…
sun.java.command=com.example.MyApplication
java.home=/usr/lib/jvm/java-11-openjdk-amd64
…
os.name=Linux
os.version=5.4.0-42-generic
…
user.name=johndoe
…

在上述示例中,我们可以看到进程的一些系统属性,例如 sun.java.commandjava.homeos.nameuser.name 等。

使用 jinfo -sysprops <pid> 命令可以帮助了解正在运行的 Java 进程的系统属性,这对于了解环境配置和应用程序运行时信息非常有用。

3.4 -flag < name>:查看特定虚拟机参数的值

jinfo -flag <name> <pid> 命令用于查看特定虚拟机参数的值。通过运行该命令,可以获取正在运行的 Java 进程中特定虚拟机参数的当前设置值。

-flag <name>: 选项用于指定要查询虚拟机参数值的操作,并提供参数的名称。

运行命令后,将获得以下可能的输出情况:

  • 如果指定的虚拟机参数存在并且可以映射到该进程,则输出 <name>=<value> 的形式。其中,<name> 是虚拟机参数的名称,<value> 是该虚拟机参数的当前值。
  • 如果指定的虚拟机参数不存在或无法映射到该进程,则输出 Could not find the specified VM flag. 消息表示找不到指定的虚拟机参数。

假设我们要查看 Java 进程的 MaxHeapSize 虚拟机参数的值就可以照以下步骤操作:

  • 打开终端或命令提示符窗口,运行命令:jps,以获取正在运行的 Java 进程的进程 ID (PID);
  • 从输出中找到目标进程的 PID(例如,12345),记下这个值;
  • 使用命令 jinfo -flag MaxHeapSize 12345 来查看特定虚拟机参数的值。

在运行上述命令后,将得到以下可能的结果示例输出:

MaxHeapSize=512m

在上述示例中,我们可以看到目标 Java 进程的 MaxHeapSize 虚拟机参数的当前值为 512m

分析结果时,请注意以下几点:

  • 确保指定的虚拟机参数名称正确无误,并与实际应用程序使用的参数名称一致。
  • 检查虚拟机参数的值,了解当前的配置设置。根据需要,可以比较、调整和优化参数的值,以满足应用程序的需求。

请注意,确保 <pid> 是要查询的目标 Java 进程的有效进程 ID,并且具有足够权限来访问该进程的信息。

3.5 -flag [+/-]< name>:启用或禁用特定虚拟机参数的值

jinfo -flag [+/-]<name> <pid>jinfo 命令的一条选项,用于启用或禁用特定虚拟机参数的值。通过运行该命令,可以更改正在运行的 Java 进程中指定虚拟机参数的状态。

-flag [+/-]<name>: 选项用于指定要启用或禁用虚拟机参数的操作,并提供参数的名称。使用 “+” 号表示启用参数,使用 “-” 号表示禁用参数。<name> 是要启用或禁用的虚拟机参数的名称。

当执行 jinfo -flag [+/-]<name> <pid> 命令时,它将与指定的 Java 进程进行通信,并更改指定虚拟机参数的状态。

以下是示例输出:

Command line flags for process id: 12345:
-XX:+PrintGCDetails
-XX:MaxHeapSize=512m
…

在上述示例中,我们可以看到进程的特定虚拟机参数 -XX:+PrintGCDetails 已经被启用。要禁用该参数,可以运行 jinfo -flag -PrintGCDetails 12345

这是命令的使用方式。但请注意,在动态修改虚拟机参数时,存在一些限制和约束。某些参数可能需要在进程启动之前进行配置或重启进程才能生效。因此,在更改虚拟机参数之前,请务必参考相应的文档和建议,以避免可能产生的意外结果。

4️⃣ 应用场景

  • 调试:通过查看和修改虚拟机参数来分析和调试应用程序的性能问题;
  • 优化:通过修改虚拟机参数来改进应用程序的性能和资源利用率;
  • 监控:实时跟踪和记录 Java 进程的运行时信息,以便进行监控和分析。

🌾 总结

jinfo 是一款方便的工具,可用于在运行的 Java 进程中检索和修改运行时信息。它为用户提供了简单而直观的界面,使其可以轻松地查看和更改虚拟机参数。通过与 JVM 内部通信,它提供了实时性和灵活性,可以帮助开发人员进行调试、优化和监控应用程序。但是,需要小心使用,确保理解虚拟机参数的含义和影响,以避免潜在的风险。

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

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

相关文章

vue-router相关(持续更新中)

文章目录 router-viewrouter-view的嵌套router.addRoute复杂嵌套实例 总结 router-view <router-view></router-view>router-view 是Vue Router中的一个组件&#xff0c;用于渲染匹配到的路由组件。它是用来显示当前路由对应的组件内容的占位符。 即当前路由组件会…

2023年8月份华为H12-811更新了

801、[单选题]178/832、在系统视图下键入什么命令可以切换到用户视图? A quit B souter C system-view D user-view 试题答案&#xff1a;A 试题解析&#xff1a;在系统视图下键入quit命令退出到用户视图。因此答案选A。 802、[单选题]“网络管理员在三层交换机上创建了V…

【CSS】CSS 选择器

CSS 选择器 1.基础选择器 1.1 元素选择器 语法&#xff1a;标签名{...} 元素选择器会选中对应标签名的HTML元素&#xff0c;例如&#xff1a;p{...}&#xff0c;div{...}&#xff0c;span{...}等 1.2 类选择器 语法&#xff1a;.类名{...} 类选择器会选中class属性为指定…

配置两台数据库为主从数据库模式

一、主库配置 1、修改配置文件 /etc/my3306.cnf #mysql服务ID&#xff0c;保证整个集群环境中唯一&#xff0c;默认为1server-id1#是否只读&#xff0c;1代表只读&#xff0c;0代表读写read-only0#忽略的数据&#xff0c;指不需要同步的数据库#binlog-ignore-dbmysql#指定同步…

OSPF作业3

题目 地址配置 R1&#xff1a; R2&#xff1a; R3&#xff1a; R4&#xff1a; R5&#xff1a; R6&#xff1a; R7&#xff1a; R8&#xff1a; R9&#xff1a; R10&#xff1a; R11&#xff1a; R12&#xff1a; 私网通及LSDB优化 R1&#xff1a; ospf 1 router-id 1.1.1.1 …

基于Matlab实现图像拼接技术(附上完整源码+图像)

图像拼接是数字图像处理中一个重要的问题&#xff0c;它的目标是将多张图像拼接成一张更大的图像。图像拼接技术在许多领域中都有广泛的应用&#xff0c;如全景图像拼接、医学图像拼接、遥感图像拼接等。 本文将介绍一种基于Matlab实现的图像拼接技术&#xff0c;即基于特征匹…

【图论】强连通分量进阶

一.作用 强连通分量可以判断环和进行缩点。还有一系列作用.... 这篇文章介绍缩点 二.题目 https://www.luogu.com.cn/problem/P2341 三.思路 我们分析可以知道当一个点没有出度时&#xff0c;则为最受欢迎的牛。但如果有多个出度&#xff0c;则没有最受欢迎的牛。 这是只有…

AcWing 93:递归实现组合型枚举 ← DFS

【题目来源】https://www.acwing.com/problem/content/95/【题目描述】 从 1∼n 这 n 个整数中随机选出 m 个&#xff0c;输出所有可能的选择方案。【输入格式】 两个整数 n&#xff0c;m&#xff0c;在同一行用空格隔开。【输出格式】 按照从小到大的顺序输出所有方案&#xf…

python多任务笔记

多任务介绍 在现实生活中&#xff0c;有很多的场景中的事情是同时进行的&#xff0c;比如跳舞和唱歌是同时进行的。 在程序中&#xff0c;可以使用代码来模拟唱歌和跳舞的功能&#xff1a; from time import sleep def sing(): for i in range(3): print("正在唱歌...…

win10 安装 tensorflow-gpu 2.10.0

win10 安装 tensorflow-gpu 2.10.0 系统配置 系统 win10 x64 显卡 GTX 1660 Ti CUDA 12.2 cudnn 8.9 查看版本对应&#xff1a; https://tensorflow.google.cn/install/source_windows#gpu VersionPython versionCompilerBuild toolscuDNNCUDAtensorflow_gpu-2.10.03.7-3.…

为独立服务器增加安全性的简单步骤

为独立服务器增加安全性的简单步骤 马上注册成为ROSABC会员&#xff0c;随时发帖回复。 您需要 登录 才可以下载或查看&#xff0c;没有账号&#xff1f;会员注册 x 独立服务器是您业务的中心&#xff0c;它需要尽可能的安全。对企业中心的攻击可能会导致您失去知识产权&…

【TypeScript】交叉类型联合类型(四)

【TypeScript】交叉类型&联合类型&#xff08;四&#xff09; 【TypeScript】交叉类型&联合类型&#xff08;四&#xff09;一、简介二、交叉类型2.1 交叉类型使用的注意点2.2 基本数据类型交叉2.3 对象类型交叉 三、联合类型四、类型缩减 一、简介 TypeScript 中的交…

[英语单词] password, passphrase, passport.... paraphrase

password 是密码&#xff0c;大多可能就是一个单词的量&#xff0c;10多个字母&#xff0c;或者更少&#xff1b;而且就是一个单词&#xff1b; 后来发现密码这么设置不安全&#xff0c;怎么办&#xff1f; 就出现了passphrase&#xff0c;使用词组的组合来做为密码&#xff0c…

用于实体对齐的联合学习实体和关系表示2019 AAAI 8.7

用于实体对齐的联合学习实体和关系表示 摘要介绍相关工作实体对齐图卷积网络 问题公式我们的方法整体架构初步实体对齐图卷积层近似关系表示联合实体和关系对齐 实验总结 摘要 实体对齐是在不同知识图之间集成异构知识的一种可行方法。该领域的最新发展通常采用基于嵌入的方法…

Neo4j笔记-数据迁移(导出/导入)

这里先说明以下几点&#xff1a; Neo4j在4.0下版本默认的库名是&#xff1a;graph.db Neo4j在4.0上版本默认的库名是&#xff1a;neo4j.db 不管是Neo4j&#xff0c;还是Neo4j Desktop&#xff0c;都会在bin目录下有neo4j、neo4j-admin软件。在conf目录下&#xff0c;有neo4j.…

【状态估计】一维粒子滤波研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

代理模式(C++)

定义 为其他对象提供一种代理以控制(隔离&#xff0c;使用接口)对这个对象的访问。。 应用场景 在面向对象系统中&#xff0c;有些对象由于某种原因(比如对象创建的开销很大&#xff0c;或者某些操作需要安全控制&#xff0c;或者需要进程外的访问等)直接访问会给使用者、或…

el-tree 懒加载数据,增删改时局部刷新实现

1.数据过多时进行懒加载孩子节点&#xff0c;根据层级传参获取后端孩子数据 懒加载主要部分&#xff1a; 1参数: :load"loadNode" lazy :props"defaultProps" 2.defaultProps 需要设置isLeaf: isLeaf,去除最后一层孩子节点的展开图表 defaultProps: { ch…

Pytorch迁移学习使用MobileNet v3网络模型进行猫狗预测二分类

目录 1. MobileNet 1.1 MobileNet v1 1.1.1 深度可分离卷积 1.1.2 宽度和分辨率调整 1.2 MobileNet v2 1.2.1 倒残差模块 1.3 MobileNet v3 1.3.1 MobieNet V3 Block 1.3.2 MobileNet V3-Large网络结构 1.3.3 MobileNet V3预测猫狗二分类问题 送书活动 1. MobileNet …

解释器模式-自定义语言的实现

有时&#xff0c;我们希望输入一串字符串&#xff0c;然后计算机能够按照预先定义的文法规则来对这个字符串进行解释&#xff0c;从而实现相应的功能。 例如&#xff0c;我们想实现简单的加减法接收器&#xff0c;只需输入一个表达式&#xff0c;它就能计算出表达式结果。比如…