Jps的正确使用姿势

Posted by Jackson on 2017-08-17

Hadoop 的 jps 命令

jps的主要功能是查看java接口的进程号
jps(Java Virtual Machine Process Status Tool) 是JDK 提供给我们的一个查看当前所有java进程PID的命令,缺点是只支持当前用户的Java进程,要显示其他用户还是只能够 用ps命令

  • 1.jps命令类似于Linux的ps命令 ,直接运行jps命令,显示的是java程序的进程ID,以及main函数的名称
  • 2.jps -q 指定jps只输出进程ID,而不输出类的短名称
  • 3.jps -m 用于输出传递给java进程(主函数)的参数
  • 4.jps -l 输出应用程序mian class 的完整包名,或者应用程序的jar文件的完整路径名

jps 的真死还是假死

首先使用jps查看当前用户的进程,可以看到PID和主类名称,然后进入目录/tmp/hsperfdata_hadoop/ 查看PID对应的日志信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[hadoop@hadoop1 ~]$ jps 
54450 Jps
10611 NodeManager
5720 NameNode
6030 SecondaryNameNode
5823 DataNode
10511 ResourceManager
[hadoop@hadoop1 ~]$
[hadoop@hadoop1 ~]$ which jps
/usr/java/jdk1.8.0_45/bin/jps
[hadoop@hadoop1 ~]$
[root@hadoop1 ~]# cd /tmp/hsperfdata_hadoop/
[root@hadoop1 hsperfdata_hadoop]# ll
total 160
-rw-------. 1 hadoop hadoop 32768 Dec 17 10:11 10511
-rw-------. 1 hadoop hadoop 32768 Dec 17 10:11 10611
-rw-------. 1 hadoop hadoop 32768 Dec 17 10:11 5720
-rw-------. 1 hadoop hadoop 32768 Dec 17 10:11 5823
-rw-------. 1 hadoop hadoop 32768 Dec 17 10:11 6030

下面的是使用jps查看进程的正常流程

  • 1.使用jps查看应用进程发现报错 process information unavailable
  • 2.使用命令ps -ef |greo 10611 来进行查看此进程对应的使用用户
  • 3.切换到该用户,然后使用jps再次进行查看进程信息,得到正确的信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@hadoop1 hsperfdata_hadoop]# jps
10611 -- process information unavailable
6325 jar
54487 Jps
5720 -- process information unavailable
6030 -- process information unavailable
5823 -- process information unavailable
10511 -- process information unavailable
[root@hadoop1 hsperfdata_hadoop]# ps -ef |greo 10611
找到该进程的使用用户名称

[root@hadoop1 hsperfdata_hadoop]# su - hadoop
[hadoop@hadoop1 ~]$ jps
10611 NodeManager
5720 NameNode
54524 Jps
6030 SecondaryNameNode
5823 DataNode
10511 ResourceManager

使用jps查看进程出现异常的情况及解决

  • 1.使用jps查看应用进程发现报错 process information unavailable
  • 2.使用kill -9杀掉进程,然后再用jps进行查看,发现进程依然存在
  • 3.使用 ps -ef|grep 10611查看进程的使用用户
  • 4.发现10611信息残留,去/tmp/hsperfdata_hadoop文件夹删除该10611文件
  • 5.再使用jps进行查看对应的进程,使用ps -ef | grep 进程号
  • 6.切换到该用户,然后使用jps再次进行查看进程信息,得到正确的信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
[root@hadoop1 rundeck]# jps
10611 -- process information unavailable
6325 jar
5720 -- process information unavailable
6030 -- process information unavailable
54591 Jps
5823 -- process information unavailable
10511 -- process information unavailable
[root@hadoop1 rundeck]#
[root@hadoop1 rundeck]# kill -9 10611

[root@hadoop1 rundeck]# jps
10611 -- process information unavailable
6325 jar
5720 -- process information unavailable
54605 Jps
6030 -- process information unavailable
5823 -- process information unavailable
10511 -- process information unavailable
[root@hadoop1 rundeck]# ps -ef|grep 10611
root 54618 48324 0 10:15 pts/1 00:00:00 grep 10611
[root@hadoop1 rundeck]#
10611信息残留,去/tmp/hsperfdata_hadoop文件夹删除该10611文件

[root@hadoop1 hsperfdata_hadoop]# ll
total 160
-rw-------. 1 hadoop hadoop 32768 Dec 17 10:17 10511
-rw-------. 1 hadoop hadoop 32768 Dec 17 10:15 10611
-rw-------. 1 hadoop hadoop 32768 Dec 17 10:17 5720
-rw-------. 1 hadoop hadoop 32768 Dec 17 10:17 5823
-rw-------. 1 hadoop hadoop 32768 Dec 17 10:16 6030
[root@hadoop1 hsperfdata_hadoop]# rm -f 10611
[root@hadoop1 hsperfdata_hadoop]#
[root@hadoop1 hsperfdata_hadoop]# jps
54626 Jps
6325 jar
5720 -- process information unavailable
6030 -- process information unavailable
5823 -- process information unavailable
10511 -- process information unavailable
[root@hadoop1 hsperfdata_hadoop]# su - hadoop
[hadoop@hadoop1 ~]$ jps
54661 Jps
5720 NameNode
6030 SecondaryNameNode
5823 DataNode
10511 ResourceManager
[hadoop@hadoop1 ~]$

报错process information unavailable的解决方法

  • 1.找到进程号jps
  • 2.ps -ef|grep pid是否存在(这步很关键要做判断查看进程是否存在)
  • 3.假如进程不存在,我们可以去该/tmp/hsperfdata_xxx去删除
  • 4.如果存在千万别删,自己查看是不可以的,其他用户查看是可用的。
  • 5.如果存在ps -ef |grep pid 看到了用户名,su 切换过去jps一下就好了

jps假死

hadoop用户启动hdfs,jps后的进程是正常的,我切换到root用户发现jps进程报错
这时候我们要判断是否是真死还是假死,ps -ef | grep pid
我们查看一下5235进程是否存在发现进程存在,而且是hadoop用户启动的,说明这个是假死状态,进程还在使用中。

关于jps的一些总结:

hadoop用户启动的 ./start-dfs.sh jps后可以看到进程
root用户看到的就是5235 -- process information unavailable ,
ps -ef| grep 5235 看的到是hadoop用户的这个进程还在, 那这个状态就是假死,
因为进程还在,所以说root用户 是看不到 hadoop启动的jps进程, 只有root用户启动hdfs才能看到 jps下的三个进程,

root 使用jps只有两种情况:
第一种: 查看正常信息
第二种: - process information unavailable