티스토리 뷰
본 포스팅은 JavaMelody에 대해 알아보겠습니다.
WAS를 모니터링하거나, profiling하기위해 Javamelody를 사용합니다.
참조) https://github.com/javamelody/javamelody/wiki
목적
Javamelody는 QA및 운영환경에서 JavaEE애플리케이션을 모니터링하는데 목적이 있다. 운영환경에 따른 애플리케이션의 실환경에 대한 통계를 측정하고 계산하는 도구이다.
구현 및 특징
자바 멜로디는 오픈 소스이고 대부분의 어플리케이션에 통합시키기 쉽고 가볍다이다.
타 모니터링 프로파일러와 다르게 DB저장소가 없다.
필요성
QA및 운영환경에서 다음과 같은 경우 사용한다.
•평균 응답 시간 및 실행 횟수에 대한 정보를 제공한다.
•문제가 심각해 지기 전에 장애를 사전에 감지할 수 있게 도움을 준다.
•보다 제한된 응답 시간을 기반으로 최적화한다.
•응답 시간의 근본 원인을 찾는다.
•최적화 후 실제 개선 사항을 확인한다.
그럼 실제로 테스트를 수행해 보겠습니다.
(*) 환경
- version
1) JEUS 6.0 (Fix#9)
2) JEUS 7.0 (fix#4)
- OS : any
- library : javamelody-1.0.0.jar
(*) 개요
- Spring Framework에서 제공하는 javamelody라는 성능측정 API를 application에서 사용시 JEUS의 설정 방법을 가이드 합니다.
(a) jar file 복사
Javamelody.jar 및 jrobin-1.5.9.jar파일을 모니터링할 Appliation의 WEB-INF/lib 디렉토리에 복사합니다. 또는 Maven을 사용하는 경우 webapp의 pom.xml파일에 javamelodycorerependence를 추가합니다.
(b) web.xml 설정
-> jeus7.0에서는 지원이 되지만, jeus6.0에서는 지원이 되지 않는 tag가 있습니다.
-> 아래 빨간색 주석처리부분은 JEUS6.0에서 기동 시에 servlet spec이 달라서 지원하지 않는 tag로 확인됩니다.
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee">
<filter>
<filter-name>monitoring</filter-name>
<filter-class>net.bull.javamelody.MonitoringFilter</filter-class>
<!-- <async-supported>true</async-supported> -->
</filter>
<filter-mapping>
<filter-name>monitoring</filter-name>
<url-pattern>/*</url-pattern>
<!--
<dispatcher>REQUEST</dispatcher>
<dispatcher>ASYNC</dispatcher>
-->
</filter-mapping>
<listener>
<listener-class>net.bull.javamelody.SessionListener</listener-class>
</listener>
</web-app>
(c)JEUSMain.xml 설정
-> 기존 web application 설정을 잡는 것과 동일 함.
-> /user/nrson/test/WEB-INF/lib 에 해당 javamelody jar파일을 위치 하면 됩니다.
<application>
<name>test</name>
<path>/user/nrson/test</path>
<deployment-type>COMPONENT</deployment-type>
<web-component>
<context-root>/</context-root>
</web-component>
<deployment-target>
<target>
<engine-container-name>infrasvr_container1</engine-container-name>
</target>
</deployment-target>
</application>
(a)web.xml 설정
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<display-name>cxf</display-name>
<servlet>
<description>Apache CXF Endpoint</description>
<display-name>cxf</display-name>
<servlet-name>cxf</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>cxf</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
<filter>
<filter-name>monitoring</filter-name>
<filter-class>net.bull.javamelody.MonitoringFilter</filter-class>
<async-supported>true</async-supported>
</filter>
<filter-mapping>
<filter-name>monitoring</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>ASYNC</dispatcher>
</filter-mapping>
<listener>
<listener-class>net.bull.javamelody.SessionListener</listener-class>
</listener>
..생략..
</web-app>
3.1 JEUS6 ~ JEUS70.0.3 와 JEUS7.0.0.4의 차이점
-> JEUS7.0 fix4버전부터는 JEUS의 Logger에서 로그내용을 AsyncHandler에게 전달 한 후, AsyncHandler는 file에 로그내용을 Async하게 wirte()합니다.
-> JEUS7.0 fix4 버전 이전은 JEUS의 Logger가 로그내용을 핸들러에게 전달하는 과정은 동일하나, 해당 핸들러가 file에 write()하는 동작을 Sync하게 작동합니다.
-> 따라서 javamelody의 lib. 필터가 JEUS의 Logger 핸들러를 추가할 때 AsyncHandler와 충돌이 발생하면서, 오류가 발생합니다.
Javamelody를 사용 하려면, JEUS7.0.0.4 이전과 동일하게 AsynHandler 인터페이스를 설정해 주어야 합니다.
jvm-options(command-option) 으로 -Djeus.logging.useAsync=false 를 추가해 주면 됩니다.
-Djeus.logging.useAsync=false 옵션을 추가하지 않을 경우 아래와 같은 Exception이 발생 합니다.
..생략..
at jeus.util.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:1261)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.RuntimeException: javax.servlet.ServletException: Loading the class net.bull.javamelody.MonitoringFilter failed.
at jeus.servlet.engine.ServletManager.initFilter(ServletManager.java:1250)
at jeus.servlet.engine.ServletManager.startFilters(ServletManager.java:1230)
at jeus.servlet.engine.Context.distributeInternal(Context.java:1550)
... 15 more
Caused by: javax.servlet.ServletException: Loading the class net.bull.javamelody.MonitoringFilter failed.
at jeus.servlet.loader.ContainerManagedInstanceReloader.checkAndInitInstance(ContainerManagedInstanceReloader.java:89)
at jeus.servlet.loader.ContainerManagedInstanceReloader.getInstance(ContainerManagedInstanceReloader.java:60)
at jeus.servlet.filter.FilterWrapper.getFilter(FilterWrapper.java:18)
at jeus.servlet.filter.FilterConfigImpl.getFilter(FilterConfigImpl.java:123)
at jeus.servlet.engine.ServletManager.initFilter(ServletManager.java:1237)
... 17 more
Caused by: java.lang.SecurityException: Async logging doesn't allow to use general handlers but AsyncHandler (file, console).
at jeus.util.logging.JeusLogger.addHandler(JeusLogger.java:858)
at net.bull.javamelody.LoggingHandler.register(LoggingHandler.java:82)
at net.bull.javamelody.FilterContext.initLogs(FilterContext.java:279)
at net.bull.javamelody.FilterContext.<init>(FilterContext.java:70)
at net.bull.javamelody.MonitoringFilter.init(MonitoringFilter.java:112)
at jeus.servlet.loader.FilterReloader.doInitInstance(FilterReloader.java:18)
at jeus.servlet.loader.ContainerManagedInstanceReloader.checkAndInitInstance(ContainerManagedInstanceReloader.java:79)
... 21 more
Root Exception stack trace:
java.lang.SecurityException: Async logging doesn't allow to use general handlers but AsyncHandler (file, console).
at jeus.util.logging.JeusLogger.addHandler(JeusLogger.java:858)
at net.bull.javamelody.LoggingHandler.register(LoggingHandler.java:82)
at net.bull.javamelody.FilterContext.initLogs(FilterContext.java:279)
at net.bull.javamelody.FilterContext.<init>(FilterContext.java:70)
at net.bull.javamelody.MonitoringFilter.init(MonitoringFilter.java:112)
at jeus.servlet.loader.FilterReloader.doInitInstance(FilterReloader.java:18)
at jeus.servlet.loader.ContainerManagedInstanceReloader.checkAndInitInstance(ContainerManagedInstanceReloader.
..생략..
JEUS6.0 과 동일한 jar(API)를 사용 한 화면 입니다.
JavaMelody를 활용하여 WAS를 모니터링하거나, profiling하기위해 사용하시기 바랍니다.
고맙습니다.
'④ 미들웨어 > ⓙ JEUS' 카테고리의 다른 글
[JEUS7] JPA Deploy 가이드 (0) | 2018.08.11 |
---|---|
JEUS-WebtoB 구간암호화 설정(SSL통신) (0) | 2018.08.05 |
[JEUS7] 이중화 테스트 가이드 (0) | 2018.08.04 |
[JEUS6] XML 사용 가이드 (0) | 2018.08.02 |
[EJB] RMI 기본 구성 및 작성 가이드 (0) | 2018.08.01 |
- Total
- Today
- Yesterday
- aa
- apache
- webtob
- 오픈스택
- kubernetes
- nodejs
- MSA
- JBoss
- node.js
- 마이크로서비스
- OpenStack
- openstack tenant
- TA
- JEUS6
- Docker
- git
- openstack token issue
- wildfly
- 아키텍처
- Da
- aws
- SA
- jeus
- API Gateway
- SWA
- JEUS7
- 쿠버네티스
- k8s
- Architecture
- 마이크로서비스 아키텍처
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |