有没有办法获取正在运行的JVM的参数?是否有像jstat这样的命令行工具,它将JVM的pid作为输入并返回其起始参数?我对启动JVM时给出的-Xmx和-Xms值特别感兴趣.谢谢.
编辑:澄清我的约束.我们要检查的JVM正在生产服务器上运行.这就是为什么,我们更喜欢最小的破坏.我们可以使用jstat监视JVM,因此我们希望有一个类似的简单解决方案来访问参数.
编辑:我们还尝试使用jvisualvm获取参数.但为了连接到远程的JVM,我们需要运行jstatd和修改JVM,我们发现是非常具有破坏性和危险的生产服务器上的安全设置.
Pet*_*rey 126
你可以使用jps之类的
jps -lvm
Run Code Online (Sandbox Code Playgroud)
打印像
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
Run Code Online (Sandbox Code Playgroud)
Vip*_*pin 23
这也可以用jcmd完成
jcmd pid VM.system_properties
jcmd pid VM.flags
Run Code Online (Sandbox Code Playgroud)
我正在添加这个新答案,因为根据JDK8文档, jcmd现在是建议的方法.
建议使用最新的实用程序jcmd代替以前的jstack,jinfo和jmap实用程序,以增强诊断并降低性能开销.
jcmd pid VM.system_properties
username@users-Air:~/javacode$ jcmd -l
11441 Test
6294 Test
29197 jdk.jcmd/sun.tools.jcmd.JCmd -l
Run Code Online (Sandbox Code Playgroud)
jcmd 11441 VM.flags输出:
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
Run Code Online (Sandbox Code Playgroud)
Jar*_*zki 20
或者,您可以使用jinfo
jinfo -flags <vmid>
jinfo -sysprops <vmid>
Run Code Online (Sandbox Code Playgroud)
Die*_*pez 14
在Linux上:
java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize'
Run Code Online (Sandbox Code Playgroud)
在Mac OSX上:
java -XX:+PrintFlagsFinal -version | grep -iE 'heapsize|permsize|threadstacksize'
Run Code Online (Sandbox Code Playgroud)
在Windows上:
C:\>java -XX:+PrintFlagsFinal -version | findstr /i "HeapSize PermSize ThreadStackSize"
Run Code Online (Sandbox Code Playgroud)
资料来源:https://www.mkyong.com/java/find-out-your-java-heap-memory-size/
luk*_*ymo 13
如果您可以在java中执行此操作,请尝试:
例:
RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean();
List<String> jvmArgs = runtimeMXBean.getInputArguments();
for (String arg : jvmArgs) {
System.out.println(arg);
}
Run Code Online (Sandbox Code Playgroud)
Windows 10 或Windows Server 2016在其标准任务管理器中提供此类信息。
在生产环境中这种情况很少见,但如果目标 JVM 在 Windows 上运行,查看其参数的最简单方法是按Ctrl+ Alt+ Delete,选择“进程”选项卡并添加“命令行”列(通过在任意位置单击鼠标右键)现有的列标题)。