7/26/2015

MySQL Connection pool error : java.net.SocketException: Connection reset

서버가 안되더니 log를 보니 이런 문제가 있다. 일단 보이는 키워드는 MySQL, Connection, jdbc 알아보니 Connection pool 문제라고 한다. 

Connection pool은 DB에서 connection을 얻어 오는 부하를 줄이기 위해, pool이 connection을 가지고 있고 요청시 마다 빌려주는 형태라고 한다.

그럼 지금의 문제는 connection 이 요청보다 많거나, connection pool 에서 요청을 받아들이지 못하는 상태 둘 중 하나라고 가정하였다.

그런데 WAS가 하나는 잘붙고, 위 문제가 발생한 WAS는 붙질 않는다. java process를 잡아서 종료하려해도 계속 없다 나타났다하고, Glassfish service를 재시작하려해도 port가 사용 중이라 한다.

여기서는 두가지 접근 방법을 생각했는데,

  1. 이미 켜진 Glassfish가 제대로 작동을 하는지 확인하고 아니라면, java process를 kill하는 것이 아닌 다른 강제 종료 방법을 찾는 것
  2. MySQL 자체의 문제일 수도 있으니, log를 확인하고 다음 대처 방안을 생각 ( DB 서버 업체 쪽에서 재부팅으로 인한 문제일 수도 있다고... 정확한 이유는 모르겠지만)



이것저것 해보다 이런 문제가 났는데 감을 못잡겠어서, 일단 심플하게 2번으로 MySQL 재시작하고 WAS 2개를 다시 붙이니 잘 되었다.

이런 식으로 서버를 관리하면 안좋은 거 같은데 정확한 문제를 파악하기에는 시간이 걸릴거 같고...  기회가 있다면 확실히 해둬야겠다.