Tomcat 모니터링 주요 지표와 Zabbix Item
개요
톰캣은 JVM위에서 도니
1) 일반적인 JVM 모니터링 메트릭 2) 톰캣에 특화된 모니터링 메트릭
을 뽑으면 될 것 같은 기분이 든다. monitoring metric에는 어떤것들이 있을까.
주요 지표
JMX
- 메모리 사용 : OutOfMemory 검출용으로 주요 쓰게 될 듯.
- 클래스 수 : jconsole 프론트 화면에 있으니 뭔가 중요해보임! 실제로 모니터링에서 의미있게 사용해본 적은 없다. 실력이 증가하면 뭔가 의미있게 쓸 수 있을수도..
- 자비지 컬렉션 : GC가 돌면 힘들다
- CPU 사용 : 피크타입을 뽑을수 있을 것 같다.
- 쓰레드 수 : Thread Usage Count로 Connection을 러프하게 뽑을 수 있을 것 같다. 도는 쓰레드기 많다는 것은 사용량이 많다는 것
- 세션 수 : 뽑을 수 있나? Thread수보다는 세션수가 진짜 커낵션 수
- DB Connection Pool : 주로 DB단에서 퍼포먼스 이슈가 많다. 개발단 도움없이(ex. DB쪽 로직에 코드 수정 없이) 데이터를 뽑을 수 있는가?
Zabbix General
- Response Time : JMX에서 자체적으로 뽑기는 애매할 것 같고 모니터링 툴에서 모니터링용 주소에 대한 response time을 뽑으면 될듯
Zabbix Item으로 주요 지표 모니터링
jconsole로 연결하여 mbeans쪽에서 뽑을 피쳐를 하나하나 뽑아보자
메모리 사용 - 힙, 논힙
힙과 논힙 영역의 최대/사용/커밋을 모니터링
- max : 최대 사용량. -Xmx(MaxSize)
- used : 실제 사용량
- commited : JVM이 이용 가능한 메모리양. used>commited가 되면 OutOfMemory가 발생함.
jmx["java.lang:type=Memory","HeapMemoryUsage.max"]jmx["java.lang:type=Memory","HeapMemoryUsage.used"]jmx["java.lang:type=Memory","HeapMemoryUsage.commited"]jmx["java.lang:type=Memory","NonHeapMemoryUsage.used"]jmx["java.lang:type=Memory","NonHeapMemoryUsage.commited"]
클래스
로드된 클래스의 토탈/현재로드/언로드 모니터링
jmx["java.lang:type=ClassLoading","TotalLoadedClassCount"]jmx["java.lang:type=ClassLoading","LoadedClassCount"]jmx["java.lang:type=ClassLoading","UnloadedClassCount"]
스레드
Thread Usage Count로 Connection을 러프하게 뽑을 수 있을 것 같다. 도는 쓰레드기 많다는 것은 사용량이 많다는 것. DaemonThread까지 볼 필요가 있을까?
jmx["java.lang:type=Threading","ThreadCount"]jmx["java.lang:type=Threading","TotalStartedThreadCount"]jmx["java.lang:type=Threading","PeakThreadCount"]jmx["java.lang:type=Threading","DaemonThreadCount"]
session
현재 쓰레드풀에서 뽑은 현재 커넥션 카운트, 쓰레드 카운트, 비지 쓰레드 숫자
jmx["Catalina:type=ThreadPool,name=\"ajp-nio-0.0.0.0-8009\"", connectionCount"]jmx["Catalina:type=ThreadPool,name=\"ajp-nio-0.0.0.0-8009\"", "currentThreadsBusy"]jmx["Catalina:type=ThreadPool,name=\"ajp-nio-0.0.0.0-8009\"", currentThreadCount"]
가비지컬렉터
DB Connection Pool - JDBC - not works
커낵션 풀에 대한 정보를 모니터링. 안됨.
jmx["Catalina:type=DataSource,name={JDBCNAME},"numActive"]jmx["Catalina:type=DataSource,name={JDBCNAME},"MaxIdle"]
- CPU 사용 : 피크타입을 뽑을수 있을 것 같다.
- 세션 수 : 뽑을 수 있나? Thread수보다는 세션수가 진짜 커낵션 수
- DB Connection Pool : 주로 DB단에서 퍼포먼스 이슈가 많다. 개발단 도움없이(ex. DB쪽 로직에 코드 수정 없이) 데이터를 뽑을 수 있는가?