티스토리 뷰

이번에 개발한 API서버의 성능 테스트를 진행하면서 모니터링을 위해 Thread, CPU, Memory, 개발한 connection pool, Thread pool 등의 자원은 JMX를 사용하고, 처리 속도 및 병목 구간을 확인하기 위해서 Open Source APM인 Scouter를 적용해 보기로 했다. Scouter의 XLog를 사용하면 하나의 서비스에 대해 전체 호출 StackTrace를 확인할 수 있기 때문에 아주 유용할 것으로 보였다.

JMX

JMX는 체크해야할 클래스의 정보를 MBean Interface를 통해 확인하고 데이터를 변경할 수 있다. 방법은 interface를 만들고 간단하게 MBeanServer에 등록하면 된다.(Interface를 만들 때 get/set를 지켜줘야 하고 Interface 이름은 클래스 이름 + MBeand 형식으로 만들어야 한다. 예)class DBWorkerPool implments DBWorkerPoolMBean)

MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
ObjectName name = new ObjectName("ReportAgent:name=DBWorkerPool");
mbs.registerMBean(this, name);

이렇게 등록하게 되면 나중에 JDK에서 기본으로 제공하는 Java VisualVM의 MBeans에서 Agent폴더 및에 DBWorkerPool이라는 항목으로 모니터링이 가능하다.
(더블 클릭하면 그래프로 실시간 확인이 가능하다.)

그리고 jvm 실행 옵션에 아래 옵션을 추가해 준다.

-Dcom.sun.management.jmxremote=true
-Djava.rmi.server.hostname=서버 아이피
-Dcom.sun.management.jmxremote.port=사용할 포트 
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.local.only=false

위 옵션은 아무런 보안 없이 접속할 수 있는 설정이다.

Java VisualVM을 실행하고 왼쪽 remote에서 우클릭을 하여 Remote  Host를 추가하자. 여기에는 모니터링할 jvm이 설치되어 있는 서버의 IP만 적으면 된다. 그리고 새로 생성된 Remote를 우클릭하여 Add JMX Connection를 클릭하여 -Dcom.sun.management.jmxremote.port에 설정한 포트를 적으면 접속되는 것을 볼 수 있다.



MBeans 항목이 없을 경우 상위 메뉴에서 Tools -> Plugins를 통해서 설치할 수 있다. 또한 코드에서 registerMBean실행 시 이미 등록된 이름이면 에러가 발생할 수 있다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함