1. 미들웨어이야기/01. JVM

Thread dump(Javacore)가 무엇인가요?

OSSW(Open Source System SoftWare 2009. 6. 8. 15:08

문서를 위해서 우선 용어부터 정의를 하도록 하겠습니다.

Hang up

Server Instance 실행되고 있으나, 아무런 응답이 없는 상황(멈춤 상태)

Slowdown

Server Instance response time 아주 급격히 떨어지는 상태(느려짐)

통산 WAS Client로부터 request 받아서 request 내용을 분석하게 됩니다. JMS인지, HTTP, RMI request인지를 분석 내용을 큐에 저장하게 됩니다. 큐에 저장된 내용은 WAS 에서 request 처리 있는 Working Thread들이 있을 각각의 Thread들이 Queue에서 Request 하나씩 꺼내서 기능을 수행하게 됩니다. 여기서 우리가 주의 깊게 봐야 하는 것은 Thread pooling 입니다. WAS 에서는 일반적으로 업무의 성격마다 Thread Pool 나누어서 만들어 놓고 사용을 하게 됩니다.

WAS 위에서도 설명 했듯이 기본적으로 Thread 기반으로 작동하는 Application입니다. 우리가 hang up 이나 slow down 대부분의 경우가 WAS에서 현상이 보이는 경우가 많습니다.( 원인이 다른 요인에 있는 경우가 많다는 것입니다.) 이를 위해서 JVM에는 Java Thread Dump 제공합니다.

Thread Dump Java Application 작동하는 순간의 X-Ray사진, snapshot 의미 합니다. Thread dump 연속해서 여러 추출한다면, 당시의 Application 어떻게 동작하고 진행되고 있는가를 살펴 있습니다.

Thread dump 추출하기 위해서는

Unix : kill -3 pid

Windows : Ctrl + break

누르면 stdout으로 thread dump 추출됩니다.

Thread dump Application 구성하고 있는 현재 구동중인 모든 Threa들의 각각의 상태를 출력해 줍니다.



[그림1]. Thread dump

그림 1 전체의 Thread dump 중에서 하나의 Thread 나타내는 그림입니다. Thread Dump에서 각각의 Thread Thread 이름과, Thread ID, 그리고 Thread 상태와, 현재 Thread 실행하고 있는 Profram 스택을 보여줍니다.

Thread Name

쓰레드의 이름을 보여줍니다. WAS Servlet Engine 따라서 이름이 다릅니다.

Thread ID

쓰레드의 System ID 나타냅니다. 뒤에서 ID 이용해서 Thread CPU 사용율을 추적 있습니다.

Thread Status

매우 중요한 값으로 하나의 Thread 현재 상태를 나타냅니다. 일반적으로 Thread 사용되고 있지 않을때는 wait, 그리고 사용 때는 runnable 나태냅니다. 그외 IOWait synchronized등에 걸려 있을 Wait for monitor entry, MW(OS JVM별로 틀립) 등의 상태로 나타납니다.

Profram stack of thread

현재 해당 Thread 어느 Class 어느 Method 수행하고 있는지를 나타냅니다. 정보를 통해서 현재 WAS 어떤 작업을 하고 있는지를 유추 있습니다.