thread dump 3

Thread dump(Javacore) 분석 – waiting for IO response

Thread 상황 중 많이 볼 수 있는 패턴은 각각의 Thread들이 IO Response를 기다리는데 IO 작업에서 response가 느리게 와서 시스템 처리 속도가 느려지는 경우입니다. [그림 1].Thread들이 IO Wait를 할 때 시간에 따른 Thread dump 상황 [그림 2]. Thread가 DB Query Wait에 걸려있는 stack 그림1 상황은 DB에 Query를 보내고 response를 Thread들이 기다리고 있는 상황입니다. AP에서 JDBC를 통해서 Query를 보냈는데, Response가 오지 않으면 계속 기다리게 있게 되고 다른 Thread가 같은 DB로 보냈는데, Response가 오지 않고, 이런 것들이 중복돼서 결국은 사용할 수 있는 Thread가 없게 되서 새로운..

Thread dump(Javacore) 분석 – Dead Lock

Locking에 의해서 발생 할 수 있는 또 다른 문제는 dead lock 현상입니다. 두개 이상의 Thread가 서로 lock을 잡고 기다리는 “환형대기조건”이 성립되었을 때 서로 lock이 풀리지 않고 무한정 대기하는 현상을 이야기 합니다. 그림 1 을 보면 Thread1 은 methodA를 수행하고 있는데, synchronized methodB를 호출하기 전에 Thread2가 methodB가 끝나기를 기다리고 있습니다. 마찬가지로 Thread2는 Thread3가 수행하고 있는 methodC가 끝나기를 기다라고 있고, methodC 에서는 Thread1에서 수행하고 있는 methodA 가 끝나기를 기다리고 있습니다. 즉 각각의 메소드들이 서로 끝나기를 기다리고 있는 “환형 대기조건”이기 때문에 이 a..

Thread dump(Javacore) 분석 – lock connection

알다시피 Java 는 Multi Threading을 지원합니다. 이 경우 공유 영역을 보호하기 위해서 Synchronized method를 이용하는데, 우리가 흔히들 말하는 Locking이 이것입니다. 예를 들어 Thread1이 Synchronized된 Method A의 Lock을 잡고 있는 경우, 다른 쓰레드 들은 그 Method를 수행하기 위해서, 앞에서 Lock을 잡은 쓰레드가 그 Lock을 반환하기를 기다려야 한다. [그림1]. Thread간 lock을 기다리는 형태 만약에 이 Thread 1의 MethodA의 수행시간이 아주 길다면 Thread 2,3,4는 마냥 이 수행을 아주 오랜 시간 기다려야 하고, 다음 2번이 Lock을 잡는다고 해도 3,4번 Thread들은 1번과 2번 쓰레드가 끝난 시..