一、jps的使用
# 首先要看一下jps的命令在哪
[hadoop@hadoop hadoop]$ which jps
/usr/java/jdk1.8.0_181/bin/jps
# jps的命令帮助
[hadoop@hadoop hadoop]$ jps --help
illegal argument: --help
usage: jps [-help]
jps [-q] [-mlvV] [<hostid>]
Definitions:
<hostid>: <hostname>[:<port>]
常用的jps命令
(1)直接使用jps查看进程及pid号
(2)使用jps -l显示进程的全限定名
[hadoop@hadoop hadoop]$ jps -l
12644 org.apache.hadoop.yarn.server.nodemanager.NodeManager
16804 sun.tools.jps.Jps
11878 org.apache.hadoop.hdfs.server.namenode.NameNode
12552 org.apache.hadoop.yarn.server.resourcemanager.ResourceManager
12154 org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode
二、jps和pid文件
以Hadoop为例,Hadoop的jps进程文件是放在/tmp/hsperfdata_hadoop下的
其中 hsperfdata_hadoop是以hsperfdata_为前缀,后面接上用户名
[hadoop@hadoop hsperfdata_hadoop]$ pwd
/tmp/hsperfdata_hadoop
[hadoop@hadoop hsperfdata_hadoop]$ jps
18135 SecondaryNameNode
17977 DataNode
17851 NameNode
17325 ResourceManager
17422 NodeManager
18270 Jps
# 查看进程的jps文件,文件名就是pid号
[hadoop@hadoop hsperfdata_hadoop]$ ll
总用量 160
-rw-------. 1 hadoop hadoop 32768 5月 14 08:45 17325
-rw-------. 1 hadoop hadoop 32768 5月 14 08:45 17422
-rw-------. 1 hadoop hadoop 32768 5月 14 08:45 17851
-rw-------. 1 hadoop hadoop 32768 5月 14 08:45 17977
-rw-------. 1 hadoop hadoop 32768 5月 14 08:45 18135
# 我们把DataNode的进程jps文件改个名字
[hadoop@hadoop hsperfdata_hadoop]$ mv 17977 17977.bak
#再次查看就会发现通过jps命令查看不到DataNode进程了,且相关的进程pid文件也被删除了
[hadoop@hadoop hsperfdata_hadoop]$ jps
18135 SecondaryNameNode
17851 NameNode
17325 ResourceManager
17422 NodeManager
18319 Jps
[hadoop@hadoop hsperfdata_hadoop]$ ll
总用量 128
-rw-------. 1 hadoop hadoop 32768 5月 14 08:50 17325
-rw-------. 1 hadoop hadoop 32768 5月 14 08:50 17422
-rw-------. 1 hadoop hadoop 32768 5月 14 08:50 17851
-rw-------. 1 hadoop hadoop 32768 5月 14 08:50 18135
# 然而,通过 ps -ef 来查看进程,发现DataNode实际是活着的
[hadoop@hadoop hsperfdata_hadoop]$ ps -ef | grep DataNode
hadoop 17977 1 1 08:44 ? 00:00:05 /usr/java/jdk1.8.0_181/bin/java -Dproc_datanode -Xmx1000m -Djava.net.preferIPv4Stack=true -Dhadoop.log.dir=/home/hadoop/app/hadoop-2.6.0-cdh5.16.2/logs -Dhadoop.log.file=hadoop.log -Dhadoop.home.dir=/home/hadoop/app/hadoop-2.6.0-cdh5.16.2 -Dhadoop.id.str=hadoop -Dhadoop.root.logger=INFO,console -Djava.library.path=/home/hadoop/app/hadoop-2.6.0-cdh5.16.2/lib/native -Dhadoop.policy.file=hadoop-policy.xml -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Stack=true -Dhadoop.log.dir=/home/hadoop/app/hadoop-2.6.0-cdh5.16.2/logs -Dhadoop.log.file=hadoop-hadoop-datanode-hadoop.log -Dhadoop.home.dir=/home/hadoop/app/hadoop-2.6.0-cdh5.16.2 -Dhadoop.id.str=hadoop -Dhadoop.root.logger=INFO,RFA -Djava.library.path=/home/hadoop/app/hadoop-2.6.0-cdh5.16.2/lib/native -Dhadoop.policy.file=hadoop-policy.xml -Djava.net.preferIPv4Stack=true -server -Dhadoop.security.logger=ERROR,RFAS -Dhadoop.security.logger=ERROR,RFAS -Dhadoop.security.logger=ERROR,RFAS -Dhadoop.security.logger=INFO,RFAS org.apache.hadoop.hdfs.server.datanode.DataNode
hadoop 18342 16699 0 08:51 pts/1 00:00:00 grep --color=auto DataNode
# 如果是将pid文件移走,发现jps查看不到相关的进程,再移动回来后,就又能查看到了
[hadoop@hadoop hsperfdata_hadoop]$ ll
总用量 128
-rw-------. 1 hadoop hadoop 32768 5月 14 08:57 17325
-rw-------. 1 hadoop hadoop 32768 5月 14 08:56 17422
-rw-------. 1 hadoop hadoop 32768 5月 14 08:57 17851
-rw-------. 1 hadoop hadoop 32768 5月 14 08:57 18135
[hadoop@hadoop hsperfdata_hadoop]$ jps
18135 SecondaryNameNode
17851 NameNode
17325 ResourceManager
17422 NodeManager
18367 Jps
[hadoop@hadoop hsperfdata_hadoop]$ mv 18135 /tmp/
[hadoop@hadoop hsperfdata_hadoop]$ jps
17851 NameNode
17325 ResourceManager
18381 Jps
17422 NodeManager
[hadoop@hadoop hsperfdata_hadoop]$ mv /tmp/18135 ./
[hadoop@hadoop hsperfdata_hadoop]$ jps
18135 SecondaryNameNode
18394 Jps
17851 NameNode
17325 ResourceManager
17422 NodeManager
有时候我们还能通过jps命令看到某个进程 -- process information unavailable
表示这个进程不可用 ,但这时候一定要去查看一下 ps -ef |grep pid,这个进程可能是活着的
三、结论
(1)通过jps来查看一个进程是否活着是不保险的 要用 ps -ef 来查看,特别是做监控的时候,监控脚本一定要用ps -ef
(2)通过jps来查看一个进程是否正常可用,也是不可靠的 ,有时查看到 -- process information unavailable,但其实进程是活着的,要用ps -ef 来查看
网友评论