【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 内部通信,它提供了实时性和灵活性,可以帮助开发人员进行调试、优化和监控应用程序。但是,需要小心使用,确保理解虚拟机参数的含义和影响,以避免潜在的风险。

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

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

相关文章

【在树莓派上安装cpolar内网穿透实战】

文章目录 前言1.在树莓派上安装cpolar2.查询cpolar版本号3.激活本地cpolar客户端4.cpolar记入配置文件 前言 树莓派作为一个超小型的电脑系统&#xff0c;虽然因其自身性能所限&#xff0c;无法如台式机或笔记本等准系统一样&#xff0c;运行大型软件或程序&#xff08;指望用…

VsCode美化 - VsCode自定义 - VsCode自定义背景图

VsCode美化 - VsCode自定义 - VsCode自定义背景图&#xff1a;添加二次元老婆图到VsCode 前言 作为一个二刺螈&#xff0c;VsCode用久了&#xff0c;总觉得少了些什么。是啊&#xff0c;高效的代码生产工具中怎么能没有老婆呢&#xff1f; 那就安装一个VsCode插件把老婆添加…

数学建模学习(9):模拟退火算法

模拟退火算法(Simulated Annealing, SA)的思想借 鉴于固体的退火原理&#xff0c;当固体的温度很高的时候&#xff0c;内能比 较大&#xff0c;固体的内部粒子处于快速无序运动&#xff0c;当温度慢慢降 低的过程中&#xff0c;固体的内能减小&#xff0c;粒子的慢慢趋于有序&a…

go重制版的海盗王gateserver网关服务端

海盗王原有的gateserver网关经常出现无故报错和掉地图的问题&#xff0c;经过反复修改都无法解决相关问题。 加上&#xff0c;原有的程序已经趋于古董级别&#xff0c;存在很大的兼容性问题。 以上&#xff0c;萌发了用go语言进行重新开发一个gateserver网关程序的想法&#xf…

sxs卡丢失数据如何找回?sxs卡数据丢失原因和修复办法分享!

说起sxs卡&#xff0c;你们是否有所了解呢&#xff1f;sxs卡具有很好的传输性能&#xff0c;能够存储照片和视频数据&#xff0c;主要被放置在索尼XDCAM EX型摄像机上。 而在使用sxs卡设备过程中&#xff0c;难免和其他设备一样&#xff0c;容易出现数据丢失情况。而如果丢失的…

ESP-IDF插件去除红色波浪线

如图&#xff0c;新装的ESP-IDF打开别人的工程有好多红色波浪线。 把这里的第一个文件夹删除&#xff0c;就是那个.vscode&#xff0c;接下来按ctrlshiftP&#xff0c;输入vscode&#xff0c; 选第一个&#xff0c;添加配置文件夹。 问题解决。 之后记得重新配置板子信息和串…

豪越HYDO智能运维助力智慧医院信息化建设

随着国家政策的推动与支持&#xff0c;医疗行业信息化应用不断普及&#xff0c;大数据、AI、医疗物联网等技术的应用&#xff0c;快速推动了电子病历、智慧服务、智慧管理的智慧医院建设和医院信息标准化建设&#xff0c;通过不断探索创新“智慧医院”服务模式&#xff0c;实现…

Java实现籍贯级联选择器

在工作中要求写一个籍贯的级联选择器&#xff0c;记录一下自己写这个级联选择器的过程&#xff0c;因为自己才刚开始工作&#xff0c;有很多地方都没有考虑的很清楚&#xff0c;希望各位大佬能给出建议。 一、需求 A:正常的23个省&#xff0c;籍贯由“省区/县/市”组成&#xf…

回归预测 | MATLAB实现POA-CNN-GRU鹈鹕算法优化卷积门控循环单元多输入单输出回归预测

回归预测 | MATLAB实现POA-CNN-GRU鹈鹕算法优化卷积门控循环单元多输入单输出回归预测 目录 回归预测 | MATLAB实现POA-CNN-GRU鹈鹕算法优化卷积门控循环单元多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 MATLAB实现POA-CNN-GRU鹈鹕算法优化卷积门…

Linux下 时间戳的转化

Linux下一般用date 记录当前时间&#xff0c;尤其是我们需要保存测试log的时候&#xff0c;或者设计一个跑多长时间的脚本都需要时间戳。下面看一下平时最常用的几种写法 1 date “%Y-%m-%d %H:%M” 显示具体时间 2 修改时间 date -s 3 date %s :当前时间的时间戳 显示具体时…

pycharm,VSCode 几个好用的插件

pycharm Tabnine AI Code 可以在编写程序的时候为你提供一些快捷方式&#xff0c;增加编程速度 Chinese 对英文不好的程序员来说是个不错的选择&#xff0c;可以将英文状态下的pycharm变为中文版的 ChatGPT 可以跟ai聊天&#xff0c;ai可以解决你80%的问题 &#xff0c;也可以帮…

机器学习笔记 - 基于C++的​​深度学习 二、实现卷积运算

一、卷积 卷积是信号处理领域的老朋友。最初的定义如下 在机器学习术语中: I(…)通常称为输入 K(…)作为内核,并且 F(…)作为给定K的I(x)的特征图。 虑多维离散域,我们可以将积分转换为以下求和 对于二维数字图像,我们可以将其重写为: <

鸿蒙开发学习笔记1——真机运行hello world

问题背景 学习任何语言和框架的第一步&#xff0c;永远都是跑通熟悉的“hello world”&#xff0c;本文将介绍鸿蒙开发如何跑通“hello world”。 问题分析 一、构建第一个ArkTS应用&#xff08;fa模型&#xff09; 说明&#xff1a;请使用DevEco Studio V3.0.0.601 Beta1及…

企业分配给员工的微信号怎么高效管理?

很多很多公司都在发愁这几个问题&#xff1a; 1、拥有多个微信号&#xff0c;不想管理多台手机&#xff0c;想将所有微信号进行统一管理 2、想用软件来代替传统的营销体系&#xff0c;安全性上也要有保障 3、用人成本太大与公司的效益不成正比 4、多个账号发圈不方便&#xff0…

电脑连接安卓设备显示offline

The Android is offline. This can be resolved by physically disconnecting and...用USB线连接手机和电脑&#xff0c;打开cmd&#xff0c;输入adb devices -l, adb devices -l结果显示可以识别手机&#xff0c;但是状态为offline 打开另外一个终端&#xff0c;输入 adb k…

BGP基础实验建邻+宣告实验

实验题目如下&#xff1a; 实验拓扑如下&#xff1a; 实验要求如下&#xff1a; 【1】除R5的5.5.5.0环回外&#xff0c;其他所有的环回均可互相访问 实验思路如下&#xff1a; &#xff08;1&#xff09;合理的IP配置 &#xff08;2&#xff09;合理的BGP配置 &#xff08;…

每日一题——滑动窗口的最大值

滑动窗口的最大值 题目链接 暴力解法 最容易想到的当然还是通过两层循环来暴力求解&#xff1a;一层循环用来移动窗口&#xff0c;一层循环用来在窗口内找到最大值。这种做法的时间复杂度为O(kN)&#xff0c;会超出时间限制&#xff0c;因此&#xff0c;我们要找到更加高效的…

UX与UI设计的区别是什么?看这一篇就够了!

在产品开发和用户体验设计领域&#xff0c;UX&#xff08;用户体验&#xff09;与UI&#xff08;用户界面&#xff09;设计是两个常被提及的概念&#xff0c;其本质都是在解决产品的用户问题&#xff0c;但在实际的工作场景中&#xff0c;它们代表着不同的设计方向与职责。 简…

自举电容的工作原理

一&#xff0e;异步自举 1.1异步Buck的自举环路组成 上图为芯片的典型应用拓扑&#xff0c;Cboot就是我们说的自举电容。为了能清楚的理解自举电容的原理&#xff0c;我们需要深入到Buck芯片内部&#xff0c;去看个究竟。 上图即为异步Buck芯片LMR16006的内部架构。 ①Q1&…

Git入门到精通——保姆级教程(涵盖GitHub、Gitee、GitLab)

文章目录 前言一、Git1.Git-概述1.1.Git-概述-版本控制介绍1.2.Git-概述-分布式版本控制VS集中式版本控制1.3.Git-概述-代码托管中心1.4.Git-概述-安装和客户端的使用 2.Git-命令(常用命令)2.1.Git-命令-设置用户签名2.2.Git-命令-初始化本地库2.3.Git-命令-查看本地库状态2.4.…