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쪽 로직에 코드 수정 없이) 데이터를 뽑을 수 있는가?

참고

  1. A Step By Step Guide to Tomcat Performance Monitoring
  2. Zabix + Apache Tomcat
  3. Difference in Used, Committed, and Max Heap Memory
  4. Key metrics for monitoring Tomcat