关注【程序猿电报】,后台回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
更多深度好文
关注程序猿电报公众