【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.rhkb.cn/news/79363.html

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

相关文章

企业如何实现自己的AI垂直大模型

文章目录 为什么要训练垂直大模型训练垂直大模型有许多潜在的好处训练垂直大模型也存在一些挑战 企业如何实现自己的AI垂直大模型1.确定需求2.收集数据3.准备数据4.训练模型5.评估模型6.部署模型 如何高效实现垂直大模型 ✍创作者&#xff1a;全栈弄潮儿 &#x1f3e1; 个人主页…

HadoopWEB页面上传文件报错Couldn‘t upload the file course_info.txt

HadoopWEB页面上传文件报错Couldn’t upload the file course_info.txt 右键F2检查发现&#xff1a;文件上传PUT操作的IP地址是节点IP别名识别不到导致 解决方法&#xff1a;在WEB页面访问浏览器所在机器上面配置hosts映射地址(注意:配置的是浏览器访问的地址不是hadoop节点所在…

探索Python数据容器之乐趣:列表与元组的奇妙旅程!

文章目录 零 数据容器入门一 数据容器&#xff1a;list(列表)1.1 列表的定义1.2 列表的下表索引1.3 列表的常用操作1.3.1 列表的查询功能1.3.2 列表的修改功能1.3.3 列表常用方法总结 1.4 补充&#xff1a;append与extend对比1.5 list&#xff08;列表&#xff09;的遍历1.6 补…

C#实现SqlServer数据库同步

实现效果&#xff1a; 设计思路&#xff1a; 1. 开启数据库及表的cdc&#xff0c;定时查询cdc表数据&#xff0c;封装sql语句(通过执行类型&#xff0c;主键;修改类型的cdc数据只取最后更新的记录)&#xff0c;添加到离线数据表&#xff1b; 2. 线程定时查询离线数据表&#xf…

httpd+Tomcat(jk)的Web动静分离搭建

动静分离是指将动态请求和静态请求分别交给不同的服务器来处理&#xff0c;可以提高服务器的效率和性能。在Java Web开发中&#xff0c;常见的动态请求处理方式是通过Tomcat来处理&#xff0c;而静态请求则可以通过Apache服务器来处理。本文将详细讲解如何结合Apache和Tomcat来…

c++之STL详解

c之STL详解 泛型编程什么是STLSTL发展STL组件容器类型成员适配器STL迭代器STL算法顺序容器向量vector双端队列双端队列实现列表listc关联容器cmapmultimapsetmultiset迭代器函数对象集成函数对象自定义函数对象标准c库中算法STL算法头文件标准函数泛型算法例子自定函数作为算法…

SNAT与DNAT原理

SNAT和DNAT &#xff08;源地址转换和目标地址转换&#xff09; SNAT&#xff1a;源地址转换。内网到外网转换的是源地址。 DNAT&#xff1a;目标地址转换&#xff1a;外网到内网转换的是目的地址 &#xff08;把内部服务器的ip地址转换成一个所有人都可以访问的地址&#xff0…

【Spring】创建一个Spring项目与Bean对象的存储

目录 一、创建Spring项目 1、创建Maven项目 2、配置maven国内源 3、引入spring依赖 4、添加启动类 二、将Bean对象存储到Spring&#xff08;IoC容器&#xff09; 1、创建Bean对象 2、将Bean存储到spring&#xff08;容器&#xff09;中 3、获取Bean对象 3.1、Applicatio…

详解PHP反射API

PHP中的反射API就像Java中的java.lang.reflect包一样。它由一系列可以分析属性、方法和类的内置类组成。它在某些方面和对象函数相似&#xff0c;比如get_class_vars()&#xff0c;但是更加灵活&#xff0c;而且可以提供更多信息。反射API也可与PHP最新的面向对象特性一起工作&…

信息安全技术工业控制系统安全控制应用指南学习笔记

工业控制系统安全控制基线 根据工业控制系统在国家安全、经济建设、社会生活中的重要程度&#xff0c;遭到破坏后对国家安全、社会秩序、公共利益以及公民、法人和其他组织的合法权益的危害程度等&#xff0c;结合信息安全等级保护标准划分及实施效果分析&#xff0c;结合工业…

ElasticSearch详细操作

ElasticSearch搜索引擎详细操作以及概念 文章目录 ElasticSearch搜索引擎详细操作以及概念 1、_cat节点操作1.1、GET/_cat/nodes&#xff1a;查看所有节点1.2、GET/_cat/health&#xff1a;查看es健康状况1.3_、_GET/_cat/master&#xff1a;查看主节点1.4、GET/_cat/indices&a…

Linux初识网络基础

目录 网络发展 认识“协议 ” 网络协议 OSI七层模型&#xff1a; TCP/IP五层&#xff08;或四层&#xff09;模型 网络传输基本流程 网络传输流程图&#xff1a; 数据包封装和封用 网络中的地址 认识IP地址&#xff1a; 认识MAC地址&#xff1a; 网络发展 1.独立…

2023华数杯数学建模C题思路 - 母亲身心健康对婴儿成长的影响

# 1 赛题 C 题 母亲身心健康对婴儿成长的影响 母亲是婴儿生命中最重要的人之一&#xff0c;她不仅为婴儿提供营养物质和身体保护&#xff0c; 还为婴儿提供情感支持和安全感。母亲心理健康状态的不良状况&#xff0c;如抑郁、焦虑、 压力等&#xff0c;可能会对婴儿的认知、情…

解决树莓派“由于没有公钥,无法验证下列签名“

目录 简介&#xff1a;在换完国内源后&#xff0c;树莓派尝试更新同步/etc/apt/sources.list和/etc/apt/sources.list.d中列出的软件源的软件包版本也就是&#xff08;apt-get update&#xff09;和更新已安装的所有或者指定软件包&#xff08;也即是apt-get upgrade&#xff0…

输入框长度在XSS测试中如何绕过字符长度限制

大家好&#xff0c;这是我编写的第一篇文章&#xff0c;之所以会分享这个故事&#xff0c;是因为我花了几个晚上的时间&#xff0c;终于找到了解决某个问题的方法。故事如下&#xff1a; 几个月前&#xff0c;我被邀请参加一个非公共的漏洞悬赏项目&#xff0c;在初期发现了一些…

科技云报道:财税数字化时代,财务人实现RPA自由了吗?

企业数字化转型&#xff0c;财务是一个重要的切入点。随着数字化业务不断展开&#xff0c;新的系统、流程和数据源被不断引入&#xff0c;财务部门面临的是不断暴增的对账、处理报表、审计等日常工作。 如此大的工作量&#xff0c;即使是经验丰富的资深财务&#xff0c;也难免…

一篇文章,教你彻底掌握接口测试!

什么是接口测试 所谓接口&#xff0c;是指同一个系统中模块与模块间的数据传递接口、前后端交互、跨系统跨平台跨数据库的对接。而接口测试&#xff0c;则是通过接口的不同情况下的输入&#xff0c;去对比输出&#xff0c;看看是否满足接口规范所规定的功能、安全以及性能方面…

解决问题:ModuleNotFoundError: No module named ‘mmcv._ext‘,及安装mmcv-full的详细教程

解决问题**ModuleNotFoundError: No module named ‘mmcv._ext’**之前得先搞懂mmcv和mmcv-full的关系。 mmcv 和 mmcv-full 都是针对 PyTorch 的计算机视觉基础库,两者的主要区别是: mmcv 包含了 mmcv 的核心组件,例如运行器、回调函数、可视化工具等,打包体积较小。mmcv-fu…

C#,OpenCV开发指南(01)

C#&#xff0c;OpenCV开发指南&#xff08;01&#xff09; 一、OpenCV的安装1、需要安装两个拓展包&#xff1a;OpenCvSharp4和OpenCvSharp4.runtime.win 二、C#使用OpenCV的一些代码1、需要加头文件2、读取图片3、在图片上画矩形框4、 在图片上画直线 一、OpenCV的安装 1、需…

浅谈新电改背景下电网企业综合能源服务商业模式研究及发展方向

安科瑞 华楠 摘要: 新电改方案实施后&#xff0c;由于输配电价的改革和售电侧的放开&#xff0c;电网企业的盈利模式也随之发生了变化。这就要求电网企业转变服务理念与经营方式&#xff0c;来寻求竞争优势。基于“魏朱六要素商业模式”模型&#xff0c;对电网企业综合能源服务…