반응형
Tomcat에서 currentThreadBusy 값이 있다.
이 값은 thread의 수와는 별도의 수치이다.
Http Thread pool 의 ThreadPoolExecutor.getActiveCount()의 값으로서, 디폴트 설정인 경우에는 java.util.concurrent.ThreadPoolExecutor 를 사용한다
ActiveCount()의 개념은 현재 작업을 할당받고 일을 하고 있는 수이다.
Thread에는 다음과 같은 상태가 있는데 이 중에서 NEW가 아닌 상태들을 ActiveCount에서 카운팅하고 있다.
- NEW: 스레드가 생성되었지만 아직 실행되지 않은 상태
- RUNNABLE: 현재 CPU를 점유하고 작업을 수행 중인 상태. 운영체제의 자원 분배로 인해 WAITING 상태가 될 수도 있음
- BLOCKED: Monitor를 획득하기 위해 다른 스레드가 락을 해제하기를 기다리는 상태
- WAITING: wait() 메서드, join() 메서드, park() 메서드 등를 이용해 대기하고 있는 상태
- TIMED_WAITING: sleep() 메서드, wait() 메서드, join() 메서드, park() 메서드 등을 이용해 대기하고 있는 상태. WAITING 상태와의 차이점은 메서드의 인수로 최대 대기 시간을 명시할 수 있어 외부적인 변화뿐만 아니라 시간에 의해서도 WAITING 상태가 해제될 수 있음.
그래서 서비스 중인 톰캣의 currentThreadBusy의 수치를 보면, 계속 처리하고 있는 스레드들이 있을 것이므로 어느정도 수치가 유지되는 것은 당연한 일이고 문제가 없다. 그러나 이 수치가 튀는 시점에는 GC, Network, DB등의 이유로 처리속도가 떨어지는 일이 발생했다고 추정할 수 있다.
Reference
반응형