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가 없게 되서 새로운 request를 처리하지 못하게 되고, 기존에 Query로 보낸 내용도 응답을 받지 못하는 상황입니다.
그림2는 각각의 Thread의 stack dump 인데, 그 내용을 보면 ExecuteQuery를 수행한 후에 Oracle로부터 데이터를 read하기 위해 대기하는 것을 확인 할 수 있습니다. 이런 현상은 주로 DB 사용시 대용량 Query(시간이 많이 걸리는)를 보냈거나, DB에 Lock들에 의해서 발생하는 경우가 많으며, 그 외에도 Socket이나 File을 사용하는 AP의 경우 IO 문제로 인하여 발생하는 경우가 많습니다.
해결방안
이 문제의 해결 방안은 Thread Dump에서 문제가 되는 부분을 발견한 후에, 해당 소스코드나 시스템 등에 접근하여 문제를 해결해야 합니다.