一文读懂JVM常用工具-jps

645 阅读2分钟

图片

关注【程序猿电报】,后台回jvm,获取全套jvm资料

01什么是jps

jps的作用其实很简单,就是显示当前系统的java进程情况及进程id。我们可以通过它来查看我们到底启动了几个java进程(因为每一个java程序都会独占一个java虚拟机实例)并可通过opt来查看这些进程的详细启动参数。

02使用前配置

jsp 命令的位置在 JAVA_HOME/bin/ 下,如果使用 sudo apt get install、 dpkg -i、yum install 命令进行安装,会自动配置环境变量。使用 which 命令可以查看命令的位置。

图片

如果手动解压,可以编辑 ~/.bashrc 文件,来添加环境变量,例如

export JAVA_HOME=/usr/local/java/jdk-14.0.2export JRE_HOME=${JAVA_HOME}/jre  export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib  export PATH=${JAVA_HOME}/bin:$PATH

保存后,使用 source 命令激活配置文件source ~/.bashrc图片

03使用详解

命令语法:

1.jps [-q] [-mlvV] [hostid]

2.jps [-help]

具体 [options]选项解析:

**-q:**仅输出VM标识符,不包括classname,jar name,arguments in main method;

**-m:**输出main method的参数;

**-l:**输出完全的包名,应用主类名,jar的完全路径名;

**-v:**输出jvm参数 ;

**-V:**输出通过flag文件传递到JVM中的参数(.hotspotrc文件或-XX:Flags=所指定的文件 。

实例:

jps命令:

[root@119 app]# jps
16464 jar
2300 jar

jps -q:

[root@119 app]# jps -q
16464
2300

jps -m:

[root@119 app]# jps -m
16464 jar
2300 jar

jps -l:

[root@119 app]# jps -l16464 test-1.0.0-SNAPSHOT.jar9671 sun.tools.jps.Jps

当然,也可以组合使用参数,比如:

jps -ml

特殊说明

jps仅查找当前用户的Java进程,而不是当前系统中的所有进程。

04jps失效

我们在定位问题过程会遇到这样一种情况,用 jps 查看不到进程id,用 ps -ef | grep java 却能看到启动的java进程。

要解释这种现象,先来了解下 jps 的实现机制:

java程序启动后,会在目录 /tmp/hsperfdata_{userName}/ 下生成几个文件,文件名就是java进程的 pid ,因此jps列出进程id就是把这个目录下的文件名列一下而已,至于系统参数,则是读取文件中的内容。

我们来思考下:

  • 由于磁盘满了,无法创建这些文件;

  • 用户对这些文件没有读的权限;

  • 因为某种原因这些文件或者目录被清除;

出现以上这些情况,就会导致jps命令失效。

如果jps命令失效,而我们又要获取pid,还可以使用以下两种方法:

top | grep java
ps -ef |grep java

更多深度好文

关注程序猿电报公众