본문 바로가기

etc.

jps 명령어가 작동 안될 때

문제

jps명령어는 실행중인 JVM 프로세스 상태를 보여주는 것으로 자바 프로세스가 하나도 없어도 jps를 치면 Jps가 기본으로 나와야한다.

하지만 내가 생성한 계정에서 jps가 출력이 되지 않는 사태가 발생했다.

자바도 설치도 되어 있었고(내가 만든 계정에서 자바 버전이 출력된다) root 계정에서는 jps가 작동이 되길래 sudo jps 명령어를 치니 역시 원하는 결과가 출력되었다.

내가 만든 계정에서는 jps 명령어를 사용할 수 있는 권한이 없다는 것인데 어떻게 권한을 바꿔야 하는지 몰랐다.

해결

stackoverflow에서 해결방법을 찾았다.

jps returns no output even when java processes are running
Thanks for contributing an answer to Stack Overflow! Please be sure to answer the question. Provide details and share your research! Asking for help, clarification, or responding to other answers. Making statements based on opinion; back them up with references or personal experience. To learn more, see our tips on writing great answers.
https://stackoverflow.com/questions/3805376/jps-returns-no-output-even-when-java-processes-are-running

/tmp/hsperfdata_<user> 는 Java 애플리케이션의 성능 통계 데이터를 저장하는 로그들이 쌓이는 디렉토리로 JVM을 실행할 때마다 생성된다고 한다.(https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html)

즉 이 디렉토리의 권한에 문제가 생긴 것이다.

 

/tmp/hsperfdata_<user> 를 확인해 보니 hsperfdata_내계정 디렉토리의 권한이 777이다.

반면에 hsperfdata_root 디렉토리의 권한은 아래와 같이 755이다.

(당연히 소유자만 해당 디렉토리에 쓰기 권한이 있어야 하기 때문에 755로 설정되어 있어야 한다.)

 

/tmp/hsperfdata_<user> 디렉토리의 권한을 755로 바꿔주니 해결 되었다.