JAVA命令系列(一) : jps

1、功能

jps(Java Virtual Machine Process Status Tool)是JDK 1.5提供的一个显示当前用户的所有java进程pid的命令 如下;

 2、位置 

jps 命令位于$JAVA_HOME/bin目录下

 3、jps 用法

 

 没有添加参数的时候,默认列出vm的标识符号即java的进程id和简单的class或者jar 的名称 如下图所示

 -q 参数只显示pid,不显示class名称,jar文件名,传递给main方法的参数

 -l 参数 输出应用程序main class的完整package名或者 应用程序的jar文件完整路径名

 -m 参数 显示在启动main方法的时候,传递给main方法的参数 String[] args,我这里传递的是helloword

 -v 参数 显示启动应用程序时通过-D参数设置的应用程序属性值

 

 

 4、jps 失效问题排查

      在环境中有可能jps,jstatck等命令失效,查看不到进程pid或者jconsole,jvisualvm等工具打开查看不到进程pid,linux 的ps命令可以看到进程的pid

      因为启动Java应用后,会在/tmp目录生成了一个hsperfdata_$USER文件夹,该文件夹(/tmp/hsperfdata_$USER/pid)下面存储的是各个java应用程序启动的进程的pid,

      由于jps、jstack、jconsole、jvisualvm等命令和工具都是读取这个目录下面的文件,所以当该文件不存在或是无法读取时就会出现无法查看该进程号

      原因:(1)默认情况下,/tmp目录所有者和所属组为root,权限为777,即所有人都有读写权限。出于系统安全等因素考虑,有些系统管理员会进行优化,使/tmp目录不可写,比如将权限改为750,或者干脆直接将其挂载为不可写的分区等。

                 (2)除权限导致不可写之外,该目录所在分区已满(使用率100%),同样会造成该目录不可写,使用df -lh命令查看使用情况。

                 (3)启动的时候添加 -XX:-UsePerfData 参数关闭了性能监控

 5、  java.io.tmpdir

       由于很多应用默认都要往该目录下写临时文件,此时如果该目录不可写,应用运行就可能出现问题,比如Java应用。Java应用除了要往临时目录写入一些临时数据外,还包括性能监控数据,这就是所说的hsperfdata_$USER目录,

前者可以使用系统变量java.io.tmpdir修改为其他目录,例如-Djava.io.tmpdir=/opt/tmpdir,但是hsperfdata_$USER目前好像并没有方法可以修改,只能在系统临时目录下生成

 需要注意的是,如果java.io.tmpdir指向的目录不可写,那么应用就可能起不来了

 

posted @ 2022-02-22 22:58  huyang0726  阅读(950)  评论(0编辑  收藏  举报