HDFS真死和假死,其实就是 process information unavailable状态的真假判断。
一、真死
我们先在 /opt/software/hadoop-2.8.1/sbin目录下使用命令 ./start-dfs.sh将hdfs启动,这时候有一个NameNode,一个SecondaryNameNode,一个DataNode。
如图:
在root用户下使用命令 kill -9 $(pgrep -f hadoop-2.8.1) 将hadoop用户下的进程全部杀死。就会出现以下状态,使用命令 ps -ef|grep 进程号 查看进程也会发现,所有的进程都不存在了。这种状态就是真死。
二、假死
承接上文,在hadoop用户下再一次重新启动HDFS,然后jps查看进程是否存在。此时的进程是存在的。
如下图:
然后再在root用户下直接jps查看进程,却出现以下的状况,发现进程依旧不可查看。而且此时的进程的进程号发生了变化,进程号自动变为刚刚启动的进程号。
这种状态属于假死。
总结:真死——进程不存在且不可用(process information unavailable)
假死——进程存在但不可用 (process information unavailable)
三、jps ——查看Java的进程号
进一步解释:jps 查询的是当前用户的 hsperfdata_当前用户/文件。
hsperfdata_hadoop/文件 文件的名字就是该用户进程的进程号。
四、在生产上出现process information unavailable状态时,该怎么做呢?
1. 使用 jps 找到进程号
2. ps -ef|grep pid 查看是否存在
3. 如果不存在,就可以去该 /tmp/hsperfdata_xxx目录下删除
查找准确的hsperfdata_xxx目录—— cd /tmp目录,然后输入命令 ll hsperfdata_*,查看所有用户的hsperfdata_xxx对应文件,然后看显示不可用(process information unavailable)的进程号在哪个文件夹,再去对应的文件夹将文件删除。
4. 如果存在,但是当前用户查看进程就是显示process information unavailable(不可用),就切换用户查看进程在哪。