jps命令
jps是jdk提供的一个查看当前java进程的小工具,可以当作 Java Virtual Machine Process Status Tool的缩写
命令格式:jps [options ] [ hostid ]
[options]选项 :
-q:仅输出VM标识符,不包括classname,jar name,arguments in main method
-m:输出main method的参数
-l:输出完全的包名,应用主类名,jar的完全路径名
-v:输出jvm参数
-V:输出通过flag文件传递到JVM中的参数(.hotspotrc文件或-XX:Flags=所指定的文件
-Joption:传递参数到vm,例如:-J-Xms512m
[hostid]:
[protocol:][[//]hostname][:port][/servername]
命令的输出格式 :
lvmid [ [ classname| JARfilename | "Unknown"] [ arg* ] [ jvmarg* ] ]
1)jps
2)jps –l:输出主类或者jar的完全路径名
3)jps –v :输出jvm参数
4)jps –q :仅仅显示java进程号
5)jps -mlv10.134.68.173
注意:如果需要查看其他机器上的jvm进程,需要在待查看机器上启动jstatd。
jps命令查看进程得到 process information unavailable的解决办法
jps -J-Djps.debug=true -J-Djps.printStackTrace=true 可以获得Jps错误详细信息
jps出现process information unavailable(当然我ps -aux了,确定该进程是存在的),网上查找了原因,我的理解是这样:
因为jps的进程信息是存储在/tmp/hsperfdata_{myuser}中,那么当我使用 root 操作jps时,发现其它用户启动的java进程的tmp文件是读不了的。
所以使用 sudo -u cloudera-scm /usr/java/jdk1.7.0_79/bin/jps 即可正常显示jps信息了。【原因就是进程信息只有启动用户才有读取权限 600,连root都没有】
使用相应的用户查看相应的进程
sudo -u hdfs jps
异常信息如下:
31388 -- process information unavailable
31388 not found
sun.jvmstat.monitor.MonitorException: 31388 not found
at sun.jvmstat.perfdata.monitor.protocol.local.PerfDataBuffer.<init>(PerfDataBuffer.java:84)
at sun.jvmstat.perfdata.monitor.protocol.local.LocalMonitoredVm.<init>(LocalMonitoredVm.java:68)
at sun.jvmstat.perfdata.monitor.protocol.local.MonitoredHostProvider.getMonitoredVm(MonitoredHostProvider.java:77)
at sun.tools.jps.Jps.main(Jps.java:92)
Caused by: java.lang.IllegalArgumentException: Could not map vmid to user Name
at sun.misc.Perf.attach(Native Method)
at sun.misc.Perf.attachImpl(Perf.java:270)
at sun.misc.Perf.attach(Perf.java:200)
at sun.jvmstat.perfdata.monitor.protocol.local.PerfDataBuffer.<init>(PerfDataBuffer.java:64)
... 3 more
查阅资料发现 /tmp/hsperfdata_root目录下为空,遂把其它以hsperfdata打头的目录下的文件copy到hsperfdata_root下,jps显示正常