Java Application을 원격지에서 감시하려면 JMX를 활성화해야 하고, Client로는 jConsole, VisualVM으로 접근하여 확인해야 합니다. GUI 환경이 갖추어지지 않는 CLI 환경은 jstatd (Virtual Machine jstat Daemon)을 활성화하고 rmi (Java Remote Method Invocation)을 이용하여 확인해야 합니다.
jstatd -p 10080 -J-Djava.security.policy=./java.policy
jps -l -m -v rmi:192.168.0.2:10080
jstat -gcutil -h20 -t rmi:17755@192.168.0.2:10080 1000 1000
Jolokia는 원격지에서 JMX에 접근을 목적으로 사용되는 Java Specification Request (JSR 160)을 구현해놓은 Agent이며, Client와 Agent간의 통신은 HTTP/JSON으로 요청, JSON으로 정보를 받습니다.
Java Application에 결합된 형태로 배포할 수 있기 때문에 사용성이 좋습니다. 예시는 Spring Boot 기준으로 합니다. Jolokia 활성화를 위해 모듈을 추가합니다.
dependencies {
compile 'org.jolokia:jolokia-core'
}
Http Endpoint, MBean name 중복방지를 위해 추가 설정이 필요합니다. application.properties에 추가합니다.
management:
context-path: /manage
security:
enabled: false
endpoints:
beans:
sensitive: false
jmx:
unique-names: true
enabled: true
jolokia:
enabled: true
Jolokia Protocol은 https://jolokia.org/reference/html/protocol.html에서 확인할 수 있습니다.
버전 확인
GET /manage/jolokia/version
Heap Memory 사용량 확인
GET /manage/jolokia/read/java.lang:type=Memory
Thread 수 확인
GET /manage/jolokia/read/java.lang:type=Threading/ThreadCount
Thread Dump 확인
POST /manage/jolokia
{
"type":"EXEC",
"mbean":"java.lang:type=Threading",
"operation":"dumpAllThreads",
"arguments":[true,true]
}
GC 현황 확인
POST /manage/jolokia
{
"mbean": "java.lang:type=GarbageCollector,*",
"type": "read"
}
대표적으로는 Memory, Thread, GC를 확인했으며, 자세한 내용은 Jolokia Protocol 문서를 참고하시기 바랍니다.
참고 사이트
- https://jolokia.org/
- https://jolokia.org/reference/html/protocol.html
- https://docs.spring.io/spring-boot/docs/1.5.9.RELEASE/reference/htmlsingle/#production-ready-jolokia