Java

알아두면 좋을 유용한 JDK 도구

팅리엔 2022. 10. 10. 22:15

javac, java, jar 도구만 알고 있는가? JDK의 bin/ 디렉토리에는 유용한 도구가 많다. PATH 환경변수에 포함되었다면 어디서든 호출할 수 있다. 어떤 것들이 있는지 알아두면 나중에 유용하게 쓰일 것이다.

 

 

jps

실행 중인 모든 JVM 목록을 보여준다. 프로세스 ID와 애플리케이션 주 클래스 이름만 출력하므로 프로세스를 구분하기 쉽다. ps aux | grep java 명령어 대신 간단하게 사용해볼 수 있다.

  • -l : 주 클래스의 완전히 식별가능한 이름을 보여준다.
  • -m : main 메서드에 전달된 매개변수를 보여준다.
  • -v : JVM 자체에 전달된 모든 매개변수를 보여준다.

 

javap

javap <클래스이름>을 실행하면 해당 클래스 파일의 필드와 메서드를 볼 수 있다.

  • -c : 메서드의 완전한 바이트코드를 보여준다.

 

jmap

jmap <프로세스ID>을 실행하면 JVM 프로세스의 메모리 공간에 대한 정보를 보여준다.

  • -heap : 메모리 공간에 대한 요약 정보를 보여준다. 각 JVM의 메모리 세대별로 얼마나 많은 메모리를 사용하는지, 힙 설정과 현재 사용 중인 GC 종류를 알 수 있다.
  • -histo : 힙 안의 각 클래스, 클래스의 인스턴스 개수, 각 인스턴스가 소비하는 메모리의 크기 등을 막대그래프로 보여준다.
  • -dump:format=b, file=<파일명> : 전체 힙의 스냅샷을 파일에 기록한다.

 

jhat

jmap 명령으로 생성한 파일을 이용해 jhat <힙덤프파일> 명령을 실행하면 로컬 웹서버를 실행한다. 브라우저로 접속하면 힙 공간의 패키지 이름별로 그룹화해서 확인할 수 있다. 'Show instance counts for all classes (excluding platform)'을 클릭하면 자바에 포함되지 않은 클래스의 인스턴스만 보여준다. 'OOL' 쿼리를 이용하면 SQL과 유사한 문법으로 힙 공간을 쿼리할 수도 있다.

 

jinfo

jinfo <프로세스ID>을 실행하면 JVM 명령줄 플래그와 JVM이 로드한 모든 시스템 속성을 볼 수 있다.

 

jstack

jstack <프로세스ID>을 실행하면 JVM 안의 모든 자바 스레드의 스택 트레이스를 출력할 수 있다.

 

jconsole 그리고 jvisualvm

이 둘을 그래픽 도구로, JVM에 연결해 실행 중인 JVM을 대화형으로 모니터링할 수 있다. 실행 중인 프로세스를 다양한 관점에서 시각적 그래프와 막대그래프 형태로 확인할 수 있으며, 마우스만으로 편리하게 사용할 수 있다.

 

jshell

자바9부터 REPL 도구를 지원한다. 이를 이용해 완전한 프로그램을 작성하지 않고도 문법 검사와 자바 기반 명령을 빠르게 실행해볼 수 있다.