获取正在运行的JVM的参数

有没有办法获得正在运行的JVM的参数? 是否有像jstat这样的命令行工具,它将JVM的pid作为input并返回其起始参数? 我对启动JVM时给出的-Xmx和-Xms值特别感兴趣。 谢谢。

编辑 :澄清我的约束。 我们想要检查的JVM正在生产服务器上运行。 这就是为什么我们更喜欢最小的中断。 我们能够使用jstat来监视JVM,所以我们希望有一个类似的简单的解决scheme来访问参数。

编辑 :我们也尝试使用jvisualvm获取参数。 但是为了连接到远程jvm,我们需要运行jstatd并修改JVM的安全设置,我们发现这在生产服务器上是非常具有破坏性和风险的。

你可以像使用jps一样

jps -lvm 

打印类似的东西

 4050 com.intellij.idea.Main -Xms128m -Xmx512m -XX:MaxPermSize=250m -ea -Xbootclasspath/a:../lib/boot.jar -Djb.restart.code=88 4667 sun.tools.jps.Jps -lvm -Dapplication.home=/opt/java/jdk1.6.0_22 -Xms8m 

或者,您可以使用jinfo

 jinfo -flags <vmid> jinfo -sysprops <vmid> 

在Linux上:

 java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize' 

在Mac OSX上:

 java -XX:+PrintFlagsFinal -version | grep -iE 'heapsize|permsize|threadstacksize' 

在Windows上:

 C:\>java -XX:+PrintFlagsFinal -version | findstr /i "HeapSize PermSize ThreadStackSize" 

资料来源: https : //www.mkyong.com/java/find-out-your-java-heap-memory-size/

JConsole可以做到这一点。 你也可以使用强大的jvisualVM工具,这个工具也包含在1.6.0.8以后的JDK中。

如果你可以在java中做到这一点,请尝试:

RuntimeMXBean

ManagementFactory

例:

 RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean(); List<String> jvmArgs = runtimeMXBean.getInputArguments(); for (String arg : jvmArgs) { System.out.println(arg); } 

您可以使用JConsole命令(或任何其他JMX客户端)来访问该信息。

此技术适用于运行本地或远程的任何Java应用程序。

  1. 开始你的Java应用程序。
  2. 运行JDK中find的JVisualVM (如C:\ Program Files \ Java \ jdk1.8.0_05 \ bin \ jvisualvm.exe)。
  3. 当这个有用的工具开始查看在“本地”树节点下运行的Java应用程序的列表。
  4. 双击[你的应用程序](pid [n])。
  5. 在右边会有检查内容在申请表中。 在Overview选项卡中间,您将看到应用程序的JVM参数。

自JDK 6 Update 7以来,jvisualvm可以在任何JDK中find。jvisualvm上的video教程就在这里。

这也可以用jcmd来完成

 jcmd pid VM.system_properties jcmd pid VM.flags 

我添加了这个新的答案,因为按照JDK8文档 jcmd现在是build议的方法。

build议使用最新的实用程序jcmd,而不是以前的jstack,jinfo和jmap实用程序来增强诊断并降低性能开销。

jcmd pid VM.system_properties

 11441: #Tue Oct 17 12:44:50 IST 2017 gopherProxySet=false awt.toolkit=sun.lwawt.macosx.LWCToolkit file.encoding.pkg=sun.io java.specification.version=9 sun.cpu.isalist= sun.jnu.encoding=UTF-8 java.class.path=. java.vm.vendor=Oracle Corporation sun.arch.data.model=64 java.vendor.url=http\://java.oracle.com/ user.timezone=Asia/Kolkata java.vm.specification.version=9 os.name=Mac OS X sun.java.launcher=SUN_STANDARD user.country=US sun.boot.library.path=/Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home/lib sun.java.command=Test http.nonProxyHosts=local|*.local|169.254/16|*.169.254/16 jdk.debug=release sun.cpu.endian=little user.home=/Users/XXXX user.language=en java.specification.vendor=Oracle Corporation java.home=/Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home file.separator=/ java.vm.compressedOopsMode=Zero based line.separator=\n java.specification.name=Java Platform API Specification java.vm.specification.vendor=Oracle Corporation java.awt.graphicsenv=sun.awt.CGraphicsEnvironment sun.management.compiler=HotSpot 64-Bit Tiered Compilers ftp.nonProxyHosts=local|*.local|169.254/16|*.169.254/16 java.runtime.version=9+181 user.name=XXXX path.separator=\: os.version=10.12.6 java.runtime.name=Java(TM) SE Runtime Environment file.encoding=UTF-8 java.vm.name=Java HotSpot(TM) 64-Bit Server VM java.vendor.url.bug=http\://bugreport.java.com/bugreport/ java.io.tmpdir=/var/folders/dm/gd6lc90d0hg220lzw_m7krr00000gn/T/ java.version=9 user.dir=/Users/XXXX/javacode os.arch=x86_64 java.vm.specification.name=Java Virtual Machine Specification java.awt.printerjob=sun.lwawt.macosx.CPrinterJob sun.os.patch.level=unknown MyParam=2 java.library.path=/Users/XXXX/Library/Java/Extensions\:/Library/Java/Extensions\:/Network/Library/Java/Extensions\:/System/Library/Java/Extensions\:/usr/lib/java\:. java.vm.info=mixed mode java.vendor=Oracle Corporation java.vm.version=9+181 sun.io.unicode.encoding=UnicodeBig java.class.version=53.0 socksNonProxyHosts=local|*.local|169.254/16|*.169.254/16 

jcmd 11441 VM.flags输出:

 11441: -XX:CICompilerCount=3 -XX:ConcGCThreads=1 -XX:G1ConcRefinementThreads=4 -XX:G1HeapRegionSize=1048576 -XX:InitialHeapSize=67108864 -XX:MarkStackSize=4194304 -XX:MaxHeapSize=1073741824 -XX:MaxNewSize=643825664 -XX:MinHeapDeltaBytes=1048576 -XX:NonNMethodCodeHeapSize=5830092 -XX:NonProfiledCodeHeapSize=122914074 -XX:ProfiledCodeHeapSize=122914074 -XX:ReservedCodeCacheSize=251658240 -XX:+SegmentedCodeCache -XX:-UseAOT -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseG1GC