JPS가 거짓말을 할 수 있나요? 그렇지 않다면 무엇입니까?

JPS가 거짓말을 할 수 있나요? 그렇지 않다면 무엇입니까?

저는 Supervisor를 사용하여 dockerized hadoop cdh 4.6.0을 실행하고 있습니다. 도커 컨테이너를 열고 다음 두 명령을 시도했습니다. 매우 혼란.

 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

나는 당신이 이미 이 문제를 해결했다고 생각하지만, 여전히 답을 찾고 있는 다른 사람들을 위해 여기에 글을 쓰고 있습니다. 문제는 이것과 관련이 있을 수 있습니다.여기에 자바 오류가 있습니다.

해결책은 jps가 찾을 것으로 예상되는 형식의 파일에 대한 특정 프로세스 파일에 대한 소프트 링크를 생성하는 것입니다. 예를 들어:ln -s /tmp/hsperfdata_hdfs/553 /tmp/hsperfdata_553

또는 Java 버전을 다운그레이드해 볼 수도 있습니다. 나에게 이것은 1.7.0_65까지 작동했습니다. 아마도 이후 버전에서도 작동할 수도 있지만 1.7.0_79에서 문제가 발생하기 시작했습니다.

또는 루트 사용자로만 확인해도 괜찮다면 /tmp/hsperfdata_user 파일을 소유한 사용자로 jps를 실행할 수 있습니다. 예: sudo -u hdfs jpssudo -u mapred jps/tmp/hsperfdata_hdfs/ 및 /tmp/hsperfdata_mapred/에서 각각 실행 중인 프로세스를 표시합니다.

관련 정보