Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么某些jcmd命令(例如:VM.set_flag)不能在所有pid上使用?_Java_Jvm_Jvm Hotspot_Jvm Arguments - Fatal编程技术网

Java 为什么某些jcmd命令(例如:VM.set_flag)不能在所有pid上使用?

Java 为什么某些jcmd命令(例如:VM.set_flag)不能在所有pid上使用?,java,jvm,jvm-hotspot,jvm-arguments,Java,Jvm,Jvm Hotspot,Jvm Arguments,当我想要更改HeapDumpAfterFullGC标志时,我使用jps来查找程序的pid 41123日元 5957 41031发射器 这是我的 然后执行JCMD41032帮助 41032: 以下命令可用: 停止 JFR.start JFR.dump 检查 本机内存 VM.check\u商业功能 VM.unlock_商业_功能 停止 ManagementAgent.start\u本地 管理代理。开始 GC.u日志 线程打印 GC.class_统计 类直方图 GC.heap\u转储 GC.run\u

当我想要更改HeapDumpAfterFullGC标志时,我使用jps来查找程序的pid

41123日元 5957 41031发射器 这是我的 然后执行JCMD41032帮助

41032: 以下命令可用: 停止 JFR.start JFR.dump 检查 本机内存 VM.check\u商业功能 VM.unlock_商业_功能 停止 ManagementAgent.start\u本地 管理代理。开始 GC.u日志 线程打印 GC.class_统计 类直方图 GC.heap\u转储 GC.run\u终结 GC.run 正常运行时间 VM.flags VM.system\u属性 命令行 虚拟机版本 帮助 有关特定命令的详细信息,请使用“帮助”。 VM.set_标志未列出,jcmd 0帮助包含:

5957: 以下命令可用: Compiler.CodeHeap\u分析 Compiler.codecache 编译器代码表 编译器.u添加 编译器指令\u清除 编译器.u打印 编译器.u删除 编译器队列 类直方图 GC.class_统计 GC.finalizer\u信息 GC.heap\u转储 GC.heap\u信息 GC.run GC.run\u终结 检查 JFR.configure JFR.dump JFR.start 停止 JVMTI.agent\u加载 JVMTI.data\u转储 管理代理。开始 ManagementAgent.start\u本地 管理代理。状态 停止 线程打印 VM.class_层次结构 VM.classloader_stats VM.classloaders 命令行 VM.dynlibs VM.flags VM.info VM.log 虚拟机元空间 本机内存 VM.print\u\u方法 **VM.set_标志**这是我的 VM.stringtable VM.symboltable VM.system\u属性 系统字典 正常运行时间 虚拟机版本 帮助 有关特定命令的详细信息,请使用“帮助”。 41031: 以下命令可用: 停止 JFR.start JFR.dump 检查 本机内存 VM.check\u商业功能 VM.unlock_商业_功能 停止 ManagementAgent.start\u本地 管理代理。开始 GC.u日志 线程打印 GC.class_统计 类直方图 GC.heap\u转储 GC.run\u终结 GC.run 正常运行时间 VM.flags VM.system\u属性 命令行 虚拟机版本 帮助 有关特定命令的详细信息,请使用“帮助”。 41032: 以下命令可用: 停止 JFR.start JFR.dump 检查 本机内存 VM.check\u商业功能 VM.unlock_商业_功能 停止 ManagementAgent.start\u本地 管理代理。开始 GC.u日志 线程打印 GC.class_统计 类直方图 GC.heap\u转储 GC.run\u终结 GC.run 正常运行时间 VM.flags VM.system\u属性 命令行 虚拟机版本 帮助 有关特定命令的详细信息,请使用“帮助”。 我想知道为什么会发生这种情况,以及如何使用jcmd更改JVM的标志。

jcmd命令列出了目标JVM支持的命令。 它取决于目标JVM支持和实现的命令。 较新的JVM确实比较旧的JVM支持更多的命令

例如,在我的机器上,JDK 8 JVM接受以下命令,大约20:

2237216: (JDK 8 JVM)
The following commands are available:
VM.native_memory
ManagementAgent.stop
ManagementAgent.start_local
ManagementAgent.start
VM.classloader_stats
GC.rotate_log
Thread.print
GC.class_stats
GC.class_histogram
GC.heap_dump
GC.finalizer_info
GC.heap_info
GC.run_finalization
GC.run
VM.uptime
VM.dynlibs
VM.flags
VM.system_properties
VM.command_line
VM.version
JDK 14 JVM可以接受更多的命令,大约46个:

2218174:
The following commands are available:
Compiler.CodeHeap_Analytics
Compiler.codecache
Compiler.codelist
Compiler.directives_add
Compiler.directives_clear
Compiler.directives_print
Compiler.directives_remove
Compiler.queue
GC.class_histogram
GC.class_stats
GC.finalizer_info
GC.heap_dump
GC.heap_info
GC.run
GC.run_finalization
JFR.check
JFR.configure
JFR.dump
JFR.start
JFR.stop
JVMTI.agent_load
JVMTI.data_dump
ManagementAgent.start
ManagementAgent.start_local
ManagementAgent.status
ManagementAgent.stop
Thread.print
VM.class_hierarchy
VM.classloader_stats
VM.classloaders
VM.command_line
VM.dynlibs
VM.events
VM.flags
VM.info
VM.log
VM.metaspace
VM.native_memory
VM.print_touched_methods
VM.set_flag
VM.stringtable
VM.symboltable
VM.system_properties
VM.systemdictionary
VM.uptime
VM.version
help
总而言之。您没有VM.set_标志,因为您运行的目标JVM不支持它

另外,我也不确定VM.set_标志究竟会起什么作用。正如@paulsm4所提到的,我很确定在事后更改“HeapDumpAfterFullGC”标志不会改变实际行为。我宁愿搜索它是否有直接标志或JMX选项。

jcmd命令列出了目标JVM支持的命令。 它取决于目标JVM支持和实现的命令。 较新的JVM确实比较旧的JVM支持更多的命令

例如,在我的机器上,JDK 8 JVM接受以下命令,大约20:

2237216: (JDK 8 JVM)
The following commands are available:
VM.native_memory
ManagementAgent.stop
ManagementAgent.start_local
ManagementAgent.start
VM.classloader_stats
GC.rotate_log
Thread.print
GC.class_stats
GC.class_histogram
GC.heap_dump
GC.finalizer_info
GC.heap_info
GC.run_finalization
GC.run
VM.uptime
VM.dynlibs
VM.flags
VM.system_properties
VM.command_line
VM.version
JDK 14 JVM可以接受更多的命令,大约46个:

2218174:
The following commands are available:
Compiler.CodeHeap_Analytics
Compiler.codecache
Compiler.codelist
Compiler.directives_add
Compiler.directives_clear
Compiler.directives_print
Compiler.directives_remove
Compiler.queue
GC.class_histogram
GC.class_stats
GC.finalizer_info
GC.heap_dump
GC.heap_info
GC.run
GC.run_finalization
JFR.check
JFR.configure
JFR.dump
JFR.start
JFR.stop
JVMTI.agent_load
JVMTI.data_dump
ManagementAgent.start
ManagementAgent.start_local
ManagementAgent.status
ManagementAgent.stop
Thread.print
VM.class_hierarchy
VM.classloader_stats
VM.classloaders
VM.command_line
VM.dynlibs
VM.events
VM.flags
VM.info
VM.log
VM.metaspace
VM.native_memory
VM.print_touched_methods
VM.set_flag
VM.stringtable
VM.symboltable
VM.system_properties
VM.systemdictionary
VM.uptime
VM.version
help
总而言之。您没有VM.set_标志,因为您运行的目标JVM不支持它

另外,我也不确定VM.set_标志究竟会起什么作用。正如@paulsm4所提到的,我很确定在事后更改“HeapDumpAfterFullGC”标志不会改变实际行为。我宁愿搜索是否有直接标志或JMX选项。

可用jcmd命令的列表取决于目标JVM的版本

jdk9中首先使用VM.set_标志命令

然而,HeapDumpAfterFullGC也是JDK 8中的一个选项。这意味着,即使jcmd没有列出该标志,也可以在运行时更改该标志。最简单的方法是使用实用程序:

另一种设置标志的方法是JMX:例如,使用jconsole。 查找com.sun.management:type=HotSpotDiagnostic MXBean并调用setVMOption操作:

可用jcmd命令的列表取决于目标JVM的版本

jdk9中首先使用VM.set_标志命令

然而,HeapDumpAfterFullGC也是JDK 8中的一个选项。这意味着,即使jcmd没有列出该标志,也可以在运行时更改该标志。最简单的方法是使用实用程序:

另一种设置标志的方法是JMX:例如,使用jconsole。 查找com.sun.management:type=Hot SpotDiagnostic MXBean和invoke setVMOption操作:


问:我想知道。。。如何使用jcmd更改JVM的标志。问:我想知道。。。如何使用jcmd更改JVM的标志。A:不行,谢谢!你是对的。我很高兴听到你教我另一种方法来改变HeapDumpAfterFullGC。我正在写一个博客,它可以提供一些在程序运行时更改HeapDumpAfterFullGC的方法。到目前为止,我收集了四种方法:jcmd、jinfo、jconsole和gdb。然后我将学习如何使用jattach。谢谢!你是对的。我很高兴听到你教我另一种方法来改变HeapDumpAfterFullGC。我正在写一个博客,它可以提供一些在程序运行时更改HeapDumpAfterFullGC的方法。到目前为止,我收集了四种方法:jcmd、jinfo、jconsole和gdb。然后我将学习如何使用jattach。谢谢。你的回答很详细,解决了我的疑问谢谢。你的回答非常详细,解决了我的疑问