Java的进程查看工具jps学习笔记

Java:Java的进程查看工具jps学习笔记。

收藏

原帖位于IT老兵博客

前言

研究Java已经有两年多,居然不知道还有一个命令叫JPS,可以查看Java的进程,真是惭愧,从官网找到讲解,开始研究。

正文

jps - Java Virtual Machine Process Status Tool

jps - Java虚拟机进程状态工具

SYNOPSIS

**jps** [ *options* ] [ *hostid* ]

PARAMETERS

options

Command-line options.

hostid

The host identifier of the host for which the process report should be generated. The hostid may include optional components that indicate the communications protocol, port number, and other implementation specific data.

这两个参数下面有详细的介绍,在这个地方,我第一遍也没有看懂。

DESCRIPTION

The jps tool lists the instrumented HotSpot Java Virtual Machines (JVMs) on the target system. The tool is limited to reporting information on JVMs for which it has the access permissions.

这句话,谷歌是这样翻译的: jps 工具列出了目标系统上的已检测HotSpot Java虚拟机(JVM)。这里我对instrumented这个词在这里怎么理解有些疑惑,已经装配的?

If jps is run without specifying a hostid, it will look for instrumented JVMs on the local host. If started with a hostid, it will look for JVMs on the indicated host, using the specified protocol and port. A jstatd process is assumed to be running on the target host.

如果指定了hostid,它将会在指明的host上寻找JVM,使用指定的协议和端口。一个jstatd 被假定运行在目标host之上–这个是前提。

The jps command will report the local VM identifier, or lvmid, for each instrumented JVM found on the target system. The lvmid is typically, but not necessarily, the operating system’s process identifier for the JVM process. With no options, jps will list each Java application’s lvmid followed by the short form of the application’s class name or jar file name. The short form of the class name or JAR file name omits the class’s package information or the JAR files path information.

lvmid是操作系统上的JVM进程标识符。如果不输入别的options,jps只会列出这个lvmid和一个Java应用程序的类名或者jar文件名的简短的形式(short form)。

The jps command uses the java launcher to find the class name and arguments passed to the main method. If the target JVM is started with a custom launcher, the class name (or JAR file name) and the arguments to the main method will not be available. In this case, the jps command will output the string Unknown for the class name or JAR file name and for the arguments to the main method.

jps命令会使用java launcher(启动器,怎么理解?)去寻找传递给main方法的类名和参数。如果目标JVM是使用自定义的launcher,那么就得不到。那样的话,会输出一个Unknown

The list of JVMs produced by the jps command may be limited by the permissions granted to the principal running the command. The command will only list the JVMs for which the principle has access rights as determined by operating system specific access control mechanisms.

NOTE: This utility is unsupported and may not be available in future versions of the JDK. It is not currently available on Windows 98 and Windows ME platforms.

OPTIONS

The jps command supports a number of options that modify the output of the command. These options are subject to change or removal in the future.

-q
Suppress the output of the class name, JAR file name, and arguments passed to the main method, producing only a list of local VM identifiers.
抑制类名,JAR文件名和传递给main方法的参数。

-m
Output the arguments passed to the main method. The output may be null for embedded JVMs.
输出传递给main方法的参数。

-l
Output the full package name for the application’s main class or the full path name to the application’s JAR file.

-v
Output the arguments passed to the JVM.

-V
Output the arguments passed to the JVM through the flags file (the .hotspotrc file or the file specified by the -XX:Flags=<filename> argument).

-J option
Pass option to the java launcher called by jps. For example, -J-Xms48m sets the startup memory to 48 megabytes. It is a common convention for -J to pass options to the underlying VM executing applications written in Java.

HOST IDENTIFIER

The host identifier, or hostid is a string that indicates the target system. The syntax of the hostid string largely corresponds to the syntax of a URI:

[*protocol*:][[//]*hostname*][:*port*][/*servername*]

protocol
The communications protocol. If the protocol is omitted and a hostname is not specified, the default protocol is a platform specific, optimized, local protocol. If the protocol is omitted and a hostname is specified, then the default protocol is rmi.

hostname
A hostname or IP address indicating the target host. If hostname is omitted, then the target host is the local host.

port
The default port for communicating with the remote server. If the hostname is omitted or the protocol specifies an optimized, local protocol, then port is ignored. Otherwise, treatment of the port parameter is implementation specific. For the default rmi protocol the port indicates the port number for the rmiregistry on the remote host. If port is omitted, and protocol indicates rmi, then the default rmiregistry port (1099) is used.

servername
The treatment of this parameter depends on the implementation. For the optimized, local protocol, this field is ignored. For the rmi protocol, this parameter is a string representing the name of the RMI remote object on the remote host. See the -n option for the jstatd command.

OUTPUT FORMAT

The output of the jps command follows the following pattern:

*lvmid* [ [ *classname* | *JARfilename* | "Unknown"] [ *arg** ] [ *jvmarg** ] ]

Where all output tokens are separated by white space. An arg that includes embedded white space will introduce ambiguity when attempting to map arguments to their actual positional parameters.

NOTE: You are advised not to write scripts to parse jps output since the format may change in future releases. If you choose to write scripts that parse jps output, expect to modify them for future releases of this tool.

EXAMPLES

This section provides examples of the jps command.

Listing the instrumented JVMs on the local host:

**jps**
18027 Java2Demo.JAR
18032 jps
18005 jstat

Listing the instrumented JVMs on a remote host:

This example assumes that the jstat server and either the its internal RMI registry or a separate external rmiregistry process are running on the remote host on the default port (port 1099). It also assumes that the local host has appropriate permissions to access the remote host. This example also includes the -l option to output the long form of the class names or JAR file names.

**jps -l remote.domain**
3002 /opt/jdk1.7.0/demo/jfc/Java2D/Java2Demo.JAR
2857 sun.tools.jstatd.jstatd

Listing the instrumented JVMs on a remote host with a non-default port for the RMI registry

This example assumes that the jstatd server, with an internal RMI registry bound to port 2002, is running on the remote host. This example also uses the -m option to include the arguments passed to the main method of each of the listed Java applications.

**jps -m remote.domain:2002**
3002 /opt/jdk1.7.0/demo/jfc/Java2D/Java2Demo.JAR
3102 sun.tools.jstatd.jstatd -p 2002

SEE ALSO

  • java - the Java Application Launcher
  • jstat - the Java virtual machine Statistics Monitoring Tool
  • jstatd - the jstat daemon
  • rmiregistry - the Java Remote Object Registry

总结

“眼过千遍,不如手写一遍”。花费几十分钟,记录一下,顿时感觉基本都搞明白了。

参考

https://docs.oracle.com/javase/7/docs/technotes/tools/share/jps.html