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显示正常

原文地址:https://www.cnblogs.com/Dhouse/p/6490660.html