메뉴 건너뛰기

Bigdata, Semantic IoT, Hadoop, NoSQL

Bigdata, Hadoop ecosystem, Semantic IoT등의 프로젝트를 진행중에 습득한 내용을 정리하는 곳입니다.
필요한 분을 위해서 공개하고 있습니다. 문의사항은 gooper@gooper.com로 메일을 보내주세요.


#참고 : http://bcho.tistory.com/789


*주의 : 모니터링 하려는 어플리케이션의 실행계정과 rmiregistry, jstatd실행 계정이 같아야함


JVM 1.4 버전대에만 해도 GUI 기반으로 JVM을 모니터링 하는 도구는 거의 없었다. 콘솔로 접속해서 Thread dump나 GC 로그등을 분석하거나 필요할 경우 JMX 기반의 모니터링 명령어등을 만들어야 했는데, 근래에는 좋은 모니터링 도구들이 많이 나와서, 쉽게 JVM의 상태를 모니터링 할 수 있고, 메모리,CPU 사용률, Thread 현황들을 매우 쉽게 분석할 수 있다.

여기에, 여러개의 VM을 동시에 중앙에서 매우 세세하게 모니터링이 가능하게 되었다.

여기서는 몇가지 자주 사용되는 JVM 모니터링 툴을 소개하고자 한다. 

VisualVM

대표적인 도구로는 오픈소스 기반의 Visual VM이라는 도구가 있다. http://visualvm.java.net/

에서 다운로드 받을 수 있다. 여러개의 VM을 동시 모니터링이 가능할 뿐만 아니라, profiling도 가능하고, eclipse 안에 embed 해서 사용할 수 도 있다.

먼저 사용법을 알아보자. VisualVM을 다운받은 후에, 압축을 풀어놓는다.다음은 원격지에 있는 VM을 모니터링 하는 설정이다. 모니터링할VM 서버에서 먼저 rmiregistry 서버를 기동한다.


1. rmiregistry 실행

C:devlangjdk1.7bin> nohup rmiregistry 1099 & (root로 실행하는 경우)

(linux에서는 root로 jdk를 설치하고 root이외의 계정으로 실행하는 경우는 실행 계정(예, hadoop)의 home디렉토리에서 nohup $JAVA_HOME/bin/rmiregistry 1099 &를 실행시켜준다.)


2. tools.policy파일 생성(root로 생성)

다음으로는 VM에 대한 정보를 접근할 수 있도록 permission을 허용해야 하는데 JDK를 설치한 계정(예, root)로 ${java.home}/bin 디렉토리에 tools.policy라는 파일을 다음과 같이 만든어 저장한다.

grant codebase "file:${java.home}/../lib/tools.jar" {

   permission java.security.AllPermission;

};


3. jstatd 실행

C:devlangjdk1.7bin> nohup jstatd -p 1099 -J-Djava.security.policy=tools.policy & (root로 실행하는 경우) 

(linux에서는 root로 jdk를 설치하고 root이외의 계정으로 실행하는 경우는 실행 계정의 home디렉토리에서 nohup $JAVA_HOME/bin/jstatd -p 1099 -J-Djava.security.policy=$JAVA_HOME/bin/tools.policy &를 실행시켜준다.)


위의 설정까지 하면 기본적인 VM에 대한 상태 정보 (메모리)를 모니터링할 수 있는데, 조금 더 상세한 모니터링을 위해서, JVM의 JMX 설정을 on 한다.

(com.sun.management.jmxremote.port는 각각 다르게 해야함)

다음은 Tomcat의 JMX 설정을 하기 위해서 ${tomcathome}/bin/catalina.bat를 수정한 내용이다.

JVM옵션에 다음과 같은 내용을 추가 하면 된다.


set JAVA_OPTS=%JAVA_OPTS% %LOGGING_CONFIG% -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=9981


export JAVA_OPTS="-Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=9982"


# tomcat의 경우 설정

CATALINA_OPTS="-Djsse.enableSNIExtension=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=9983"


* fuseki/jena의 경우 설정

JVM_ARGS="-Xms1g -Xmx2g -Djsse.enableSNIExtension=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=9984"


* 최초 기동시 아래와 같은 오류가 발생할 수 있는데 이때는 --jdkhome옵션을 주고 실행하면 된다.

C:UsersgooperDownloadsvisualvm_139visualvm_139binvisualvm.exe --jdkhome c:devjdk1.8.0_60



여기 까지 했으면 모든 준비가 끝났다.


주의할점은, 실제 운영이나 개발 환경들에 이러한 설정을 적용할때, 포트가 외부에 오픈 되기 때문에, 보안상 문제가 될 수 있다. 그래서 반드시 OS (Linux)의 iptable 설정등에서, VisualConsole이 인스톨 되는 서버로 부터의 inbound connection 만 오픈하도록 하는 것이 좋다.

Visual VM을 실행하고, Remote Host를 Add하고, ip 주소와 위에서 지정한 포트를 지정하면 아래와 같이 VM을 모니터링 할 수 있다.

아래 그림은 편의상 local에 있는 JVM을 모니터링 하도록 설정하였다.



여기서는 전체 VM에 대한 Thread 개수, Class개수와 기본적인 CPU와 JVM 메모리 상황을 모니터링 할 수 있다.

 

다음은 Thread를 모니터링 하는 화면이다. time frame에 따라서 어떤 thread가 있고,어떤 상태인지를 모니터링이 가능하다.



 

아래는 Thread dump 추출 화면이다. 좌측 메뉴에서 JVM을 선택하고 오른쪽 마우스 버튼을 이용하면 Thread dump 추출 메뉴가 나오는데, 아래 그림과 같이 추출한 Thread dump를 저장해서 보여준다. Bottleneck 분석등에 매우 유용하게 사용할 수 있다. 



다음은 성능 튜닝 부분에서 유용하게 사용할 수 있는 기능인데, profiling 기능을 제공한다.

우측 상자에 profiling하고 싶은 class 명(패키지명)을 지정해놓고, start를 하게 되면, 각 패키지 또는 클래스에서 소요되는 CPU 사용량을 보여준다. 


이를 이용하면 손쉽게 CPU 소모가 많은 모듈을 찾아낼 수 있다.


 

JConsole

참고로, JVM을 인스톨 하면 default로 인스톨 되는 GUI 기반의 JVM 모니터링 툴이 있는데, ${java.home}의 jconsole이라는 유틸리티이다.

VMConsole 처럼 permission이나 rmi setting이 필요 없고, JMX를 이용해서 통신을 한다.

기능상으로나 UI 면에서는 개인적으로는 Visual VM이 더 났다고 판단하는데, 단 JConsole의 경우에는 모니터링 대상 VM이 제공하는MBean(JMX)를 모니터링 할 수 있다.

Tomcat이나 각종 자바 서버들은 MBean을 통해서 서버의 상태나 Configuration  정보를 저장하기 때문에 이 MBean 만 모니터링 하더라도 서버의 상태를 알아내는데 매우 유용하게 사용할 수 있다.

아래 그림은 JConsole을 이용하여, Tomcat의 MBean을 모니터링 하는 화면이다.

 


 


 2013.9.12 추가. Oracle JVM 7 최신 버전에 multiple JVM을 monitoring 할 수 있는 JMC 라는 것이 포함 되었음

http://www.oracle.com/technetwork/java/javase/2col/jmc-relnotes-2004763.html

번호 제목 글쓴이 날짜 조회 수
417 .git폴더를 삭제하고 다시 git에 추가하고 서버에 반영하는 방법 총관리자 2017.06.19 4069
416 [Dovecot] -ERR [SYS/PERM] Permission denied 총관리자 2017.06.13 236
415 숭실대 교수님등 강의영상(바이오데이터마이닝, 빅데이터분산컴퓨팅, 컴퓨터 그래픽스, 데이터베이스응용및 프로그램밍, 데이터베이스, 의생명영상처리, 웹그로그래밍, 데이터마이닝, 컴퓨터구조) file 총관리자 2017.06.13 204
414 시맨틱 관련 논문 모음 사이트 총관리자 2017.06.13 94
413 [dovecot]dovecot restart할때 root@gsda4:/usr/lib/dovecot# service dovecot restart 오류 발생시 조치사항 총관리자 2017.06.12 492
412 sendmail + dovecot(pop3) + saslauthd 설치 총관리자 2017.06.11 180
411 sendmail전송시 421 4.3.0 collect: Cannot write ./dfv5BA2EBS010579 (bfcommit, uid=0, gid=114): No such file or directory 발생시 조치사항 총관리자 2017.06.11 694
410 Eclipse 에서 bitbucket.org 연동 하기 file 총관리자 2017.06.08 256
409 [u-Auctions]목록이 1개만 나오는 문제 총관리자 2017.05.29 38
408 Ubuntu 16.04 LTS에서 sendmail설치및 설정(수신,발신 가능)및 메일서버 만들기 총관리자 2017.05.23 1111
407 Ubuntu 16.04LTS 설치후 초기에 주어야 하는 작업(php, apache, mariadb설치및 OS보안설정등) file 총관리자 2017.05.23 5261
406 Ubuntu 16.04 LTS에서 사이트에 무료인증서를 이용하여 SSL적용 file 총관리자 2017.05.23 353
405 fuseki용 config-examples.ttl 예시 내용 총관리자 2017.05.17 646
404 webid에서 google처럼 검색할 수 있도록 하는 프로그램 총관리자 2017.05.16 46
403 mysql-server 기동시 Do you already have another mysqld server running on port 오류 발생할때 확인및 조치방법 총관리자 2017.05.14 2656
402 php auction 프로그램 총관리자 2017.05.14 94
401 [PHP7.0]로그파일 위치 총관리자 2017.05.07 151
400 mapreduce appliction을 실행시 "is running beyond virtual memory limits" 오류 발생시 조치사항 총관리자 2017.05.04 16888
399 Mysql DB 생성 및 권한. 특정아이피, 대역에 대한 접근 허용 총관리자 2017.05.04 60
398 Hive MetaStore Server기동시 Could not create "increment"/"table" value-generation container SEQUENCE_TABLE since autoCreate flags do not allow it. 오류발생시 조치사항 총관리자 2017.05.03 340

A personal place to organize information learned during the development of such Hadoop, Hive, Hbase, Semantic IoT, etc.
We are open to the required minutes. Please send inquiries to gooper@gooper.com.

위로