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
指向的目录不可写,那么应用就可能起不来了。