JPSは嘘をつくことができますか?そうでなければ何ですか?

JPSは嘘をつくことができますか?そうでなければ何ですか?

私はSupervisorを使用してdockerized hadoop cdh 4.6.0を実行しています。 Dockerコンテナを開き、次の2つのコマンドを試しました。非常に混乱。

 jps

 103 -- process information unavailable
 291 -- process information unavailable
 107 -- process information unavailable
 449 Jps

プロセス情報が利用できないということは、プロセスがゾンビであることを意味すると読みました。しかし、同じコンテナで使用されているこれらのプロセスの状態を確認しました。

root@1389ca416997:/# /etc/init.d/hadoop-hdfs-namenode status
   * Hadoop namenode is running
root@1389ca416997:/# /etc/init.d/hadoop-hdfs-secondarynamenode status
   * Hadoop secondarynamenode is running
root@1389ca416997:/# /etc/init.d/hadoop-hdfs-datanode status
   * Hadoop datanode is running

このあいまいさの原因は何ですか?それとも私が間違っていますか?

答え1

jpsファイルを使用して/tmp/hsperfdata_<username>vmidと情報を決定します。ただし、何らかの理由でファイルが古いファイルになることがあります。これにより、jps古いVMIDが報告され始めることができます。

答え2

私はあなたがすでにこの問題を解決していると思いますが、まだ答えを探している他の人のためにここに書いています。問題はこれに関連している可能性があります。ここにJavaエラーがあります。

解決策は、jpsが見つけることが期待される形式のファイルの特定のプロセスファイルへのソフトリンクを生成することです。たとえば、ln -s /tmp/hsperfdata_hdfs/553 /tmp/hsperfdata_553

または、Javaバージョンをダウングレードしてみることもできます。私にとって、これは1.7.0_65まで動作しました。おそらくそれ以降のバージョンでも動作するかもしれませんが、1.7.0_79で問題が発生し始めました。

あるいは、rootユーザーとしてのみ確認しても構わない場合は、/tmp/hsperfdata_userファイルを所有しているユーザーとしてjpsを実行できます。例:sudo -u hdfs jpsおよびsudo -u mapred jps/tmp/hsperfdata_hdfs/および/tmp/hsperfdata_mapred/でそれぞれ実行中のプロセスを表示します。

関連情報