블로그 이미지
잡초 개발자의 좌충우돌 이야기 yysvip

카테고리

분류 전체보기 (211)
Java Programing (24)
Web Programing (20)
Database (36)
Tool (46)
까칠한 IT (27)
까칠한 정보 (42)
까칠한 Strory (16)
까칠한 Project (0)
Total906,248
Today3,731
Yesterday7,350

달력

« » 2018.10
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

공지사항

Thread dump의 내용은 ? (Sun 계열)

  까칠한 남자 Strory       yysvip.tistory.com       잡초 개발자 까찰한 쑤의 좌충우돌 개발 이야기

 

이번에는 Sun 계열의 Java Thread dump의 구조와 무슨 내용이 들어 있는지에 대해 알아 보겠습니다.

 

그럼 우선 Thread dump의 구조에 대해 알아 보도록 하겠습니다.

Sun 계열의 Java는 Thread dump가 표준출력(STDOUT)으로 출력된다고 말씀드렸는데요. 그럼 어떠한 형식으로 출력되는 것일까요 ?

 

다음 그림은 Thread dump의 구조입니다. 

 

 

 

위와 같은 구조의 Text 구문들이 표준출력으로 출력됩니다.

 

- Thread dump 시작 구문

Thread dump 시작 구문은 Thread dump의 시작을 알려줍니다.

구문의 구조는 "Full thread dump [수행 시간] [Java 시스템 정보]" 로 이루어 집니다.

  

1.5 버전

  

1.6 버전

 

1.5나 1.6 버전이 크게 다르진 않습니다. Sun은 Thread dump 수행시간이 나오지 않지만 HP-UX의 Java는 Thread dump 수행 시간이 출력됩니다. 참고하세요.

 

 

 

 

표준출력 로그 내용이 많은 경우 표준출력 로그 파일에서 Thread dump 내용을 찾기 위해 "Full thread dump" 구문을 찾으면 쉽게 찾을 수 있습니다.

 

- Thread stack 정보 구문

 

Thread에 대한 정보가 첫라인에 출력되고 그 뒤로 Thread에 대한 stack trace 정보가 출력되는 형식입니다.

Thread의 정보에는 Thread명, Deamon 여부, Priority, Thread 메모리 번지(TID), Native thread id (nid), Light weight thread id (LWP ID), Thread의 상태등이 출력됩니다.

이러한 Thread의 정보는 Sun계열 Java를 사용하는 Solaris, HP-UX, LInux, Window등에서 출력되는 정보는 조금씩 틀릴 수 있습니다. 또한 Java 버전에 따라도 다를 수도 있습니다.

 

그럼 Thread 정보 중 눈여겨 봐야할 Thread의 상태에 대해 설명드리겠습니다.(위에서 말씀드렸듯이 OS별로 Java 버전별로 내용이 틀릴 수 있습니다. 허나 상태 문구로 대충 짐작은 가실것 같네요)

 

다음은 Sun Java 1.5의 Thread stack과 Thread state 정보입니다.

 

 

 

<Thread 상태 정보>

 

 

다음은 Sun Java 1.6의 Thread state 정보입니다.

 

 

 

<Thread 상태 정보>

 

자, 그럼 이제 Thread stack을 해석방법에 대해 설명드리겠습니다.

여기서는 간단하게 하나의 예제에 대해서만 설명을 드리도록 하겠습니다.

워낙 고려해야할 사항들이 많아 차차 여러가지 내용들을 포스팅하도록 하겠습니다.

  

 

위의 Thread는 Thread 이름이 "webtob2-hth0 ~~~-w46" 인걸 보니 JEUS WAS의 webtob WebServer와 연계되어 있는 work thread인것 같습니다.

 

Thread의 상태는 "waiting for monitor entry" 입니다. 이 상태는 위에서 설명드렸듯이 object에 대한 lock을 대기하고 있는 상태입니다. 즉 lock이 걸려있는 상태입니다.

 

Thread 처리 절차를 확인하기 위해서는 stack을 bottom에서 top 방향으로 읽어 갑니다.

여기 샘풀에서는 stack의 처음이 jeus.servlet.engine.WebtobRequestProcessor.run() 입니다.

사용자의 요청이 webtob WebServer로 부터 들어와 work thread가 수행하고 있는 것을 알 수있습니다.

stack을 보시면 요청을 처리하다가 getSession() 부분에서 object에 대한 lock을 획득하고 계속 처리하다 SessionContainer.accessed() 에서 Hashtable object에 lock을 획득하는 중 해당 Hashtable의 object가 다른 Thread에 의해 lock 걸려 있어 lock이 반환될 때까지 대기중인 상태입니다.

 

상세한 내용은 Java 코드 내부를 확인해야 할 필요가 있습니다.

또한 object lock에 대한 내용을 알기 위해서는 동기화와 object format의 lock flag에 대한 부분을 정확히 알고 있어야 위의 Thread stack 에 대한 원인을 해결할 수 있습니다.

 

이러한 부분은 차차 포스팅 하도록 하겠습니다.

 

자! 이것으로 이번 Sun 계열의 Thread dump의 구조에 대해서 마치도록 하겠습니다.

 

Posted by yysvip

최근에 달린 댓글

최근에 받은 트랙백

글 보관함