您的位置:首页 > 编程语言 > Java开发

Java Monitoring Tools之jcmd

2016-04-07 00:14 561 查看

Java Monitoring Tools之jcmd

jcmd

Prints basic class, thread, and VM informationfor
a Java process. This is suitable for use in scripts; it is executed like this:

% jcmd process_idcommand
optional_arguments

Supplying the command help willlist all possible commands, and supplying help

<command> will give the syntax for a particular command.

例如:我本机开启了一个jmeter程序。
找出jmeter进程ID:

$ jps -mlvV
11328 ApacheJMeter.jar -XX:+HeapDumpOnOutOfMemoryError -Xms512m -Xmx512m -XX:NewSize=128m -XX:MaxNewSize=128m -XX:SurvivorRatio=8 -XX:TargetSurvivorRatio=50 -XX:MaxTenuringThreshold=2 -XX:+CMSClassUnloadingEnabled
9948 sun.tools.jps.Jps -mlvV -Denv.class.path=.;C:\Java\jdk1.8.0_65\lib;C:\Java\jdk1.8.0_65\lib\tools.jar -Dapplication.home=C:\Java\jdk1.8.0_65 -Xms8m


jmeter的pid 为11328

$ jcmd 11328 help




$ jcmd 11328 help VM.flags




Basic VM Information

JVM tools can provide basic information about a running JVM process: how long it has been up, what JVM flags are in
use, JVM system properties, and so on.

Uptime

The length of time the JVM has been up can be found via this command:

% jcmd process_id VM.uptime

System properties

The set of items in System.getProperties() can be displayed with either of these commands:

% jcmd process_id VM.system_properties

or

% jinfo -sysprops process_id

This includes all properties set on the command line with a -D option, any properties

dynamically added by the application
, and the set of default properties for the JVM.

JVM version

The version of the JVM is obtained like this:

% jcmd process_id VM.version

JVM command line

The command line can be displayed in the VM summary tab of jconsole, or via jcmd:

% jcmd process_id VM.command_line

JVM tuning flags

The tuning flags in effect for an application can be obtained like this:

% jcmd process_id VM.flags [-all]

Working with tuning flags

There are a lot of tuning flags that can be given to a JVM, and many of those flags
are a major focus of this book. Keeping track of those flags and their default values can be a little daunting; those last two examples of jcmd are quite useful in that regard. The command_line command shows which flags were specified directly on the command line.
The flags command shows which flags were set on the command line, plus some flags that were set directly by the JVM (because their value was determined ergonomically). Including the -all option lists every flag within the JVM. There are hundreds of JVM tuning
flags, and most of them are very obscure; it is recommended that most of them never be changed (see“Too Much Information?” on page

49). Figuring out which flags are in effect is a frequent task when diagnosing performance issues, and the jcmd commands can do that for a running JVM. Often, what you’d rather figure out is whatthe platform-specific
defaults for a particular JVM
are, in which case using the-XX:+PrintFlagsFinal option on the command line is more useful.

A
useful way to determine what the flags are set to on a particular platform is to execute this command:

% java other_options -XX:+PrintFlagsFinal -version

...Hundreds of lines of output, including...

uintx InitialHeapSize := 4169431040 {product}

intx InlineSmallCode = 2000 {pd product}

You should include all other options on the command line because some options affect others, particularly when setting GC-related flags. This will print out the entire list of JVM flags and their values (the same as is printed
via the VM.flags -all option to jcmd for a live JVM).

Flag data from these commands is printed in one of the two ways shown. The colon in

the first line of included output indicates that a nondefault value is in use for the flag in

question. This can happen for the following reasons:

1. The flag’s value was specified directly on the command line.

2. Some other option indirectly changed that option.

3. The JVM calculated the default value ergonomically.

The second line (without a colon) indicates that value is the default value for this version

of the JVM. Default values for some flags may be different on different platforms, which

is shown in the final column of this output. product means that the default setting of

the flag is uniform across all platforms; pd product indicates that the default setting of

the flag is platform-dependent.

Quick Summary

1. jcmd can be used to find the basic JVM information—including the value of all the tuning flags—for a running application.

2. Default flag values can be found by including -XX:+PrintFlags Final on a command line. This is useful for determining the

default ergonomic settings of flags on a particular platform.

3. jinfo is useful for inspecting (and in some cases changing) individual flags.

读书笔记:


Java Performance: The Definitive Guide
by Scott
Oaks (O’Reilly). Copyright 2014 Scott Oaks, 978-1-449-35845-7

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: