기술지원 문의

DB 쿼리에러 때문에 resin-3.0.18 이 죽을수도있나요?
레진 초보 / 2006-09-07 16:56

질문이 좀 그렇긴한데..

 

 window2003 서버에서 resin-3.0.18 을 사용하고있는데

 여러개의 어플리 케이션을 한레진에서 운영하고 있습니다.

 

 그런데 이넘이 매일 2~3번씩죽네요.. 한 어플리케이션에서

쿼리에러 발생하는거 빼고는 다른로그는 깨끗한데

 

 이게원인이 될수도있을까요?

DB는 oracle 8i를 쓰고있습니다..

 

질문이 좀그러네요.. 하지만 답변좀부탁드릴게요 (__)--) 

[답변]DB 쿼리에러 때문에 resin-3.0.18 이 죽을수도있나요?
권용찬 / 2006-09-12 11:39

답변을 드리자면 그럴수도 있고 아닐수도 있습니다. (-.-;v)

 

좀 애매하긴 합니다만 WAS가 다운되는 현상중에 하드웨어나 OS에 문제가 없다는 가정하에 짐작 가능한 부분중에 가장 큰 문제는 JVM의 메모리관리부분입니다.

 

특히나 메모리와 관련되어 가장 큰 문제점을 발생시키는 부분은 개발된 소프트웨어 중에서도 DB와 관련된 Connection 처리부분입니다.

 

먼저 말씀 하신바와 같이 SQL문의 오류문제를 중심으로 예측해 보면  SQL쿼리의 실패 성공을 떠나서

>>쿼리 실행 후 Connection이 재사용 가능하도록 release되어야 하나 이것이 않되고 지속적으로 또는 장시간 활성화 상태로 되어 있을 경우 Connection Pool이 가득차서 더이상 처리를 못하는 상황 (DB Connection 부족)

>>또는 Connection이 쌓여서 JVM 메모리를 다 소진시킴으로써 WAS를 재구동 하게 하는 상황  등 (JVM 힙 메모리 부족)

 

상기 두가지 문제점이 가장 큰 부분을 차지 합니다.

 

두가지 문제를 좀더 살펴보면

Connection이 부족한 상황이 벌어지는 이유가 적정한 수준의 Max Connection값을 잡아 놓았는데도 불구하고 대량의 Connection을 필요로 하는경우 대부분 Application에서 사용한 Connection에 대하여 명시적인 반환처리를 하지 않음으로써 발생할 수 있으며

또는 WAS의 DB Pool에서 실제 필요한 Connection 수 보다 작게 Max Connection값을 지정했을 수있습니다.

 

후자의 경우 WAS에서 Max Connection값을 조정하면 해결 되지만 전자의 경우 Application의 대대정인 최적화 작업이 요구되는 상황이 벌어집니다.

 

또한 메모리 부족상태로 가는상황역시

최대 힙사이즈를 적정하게 설정했는데도 불필요하게 메모리가 소진되거나 GC시에도 메모리가 반환되는 못하는 상태일 경우가 있으며  또는 시스템에 물리적인 메모리가 충분함에도 불구하고 운영자가 잘 모르고 힙 사이즈를 너무 작게 잡아서 Application이 운영되기 위한 최소한의 메모리영역을 부족하게 해놓을 상황이 있을 수 있습니다.

 

후자의 경우 WAS 구동시 힙 사이즈를 조정하면 문제를 해결할 수 있으나

전자의 경우 이 역시 메모리를 불필요하게 소진시키는(객체 또는 반환되지 않는 DB Connection-그에 포함된 쿼리나 결과)부분찾아내는 노력이 필요합니다.

 

먼저 취해볼수 있는방법은

 

1. Connection 갯수를 늘여본다  30개 ~ 50개

2. 힙사이즈를 늘여본다. 물리적인 메모리가 허용하는한 1024Mbyte이상

 

상이설정을 해보고 문제가 전혀 개선되지 않을 경우에는 다른 부분을 검토해 볼 필요가 있으며

만약 상태가 조금 호전되기는 하나 유사한 문제가 계속 지속될 경우(전에는 3시간 마다 죽었는데 하고 놓고 보니 12시간 마다 죽는 등...) 아마도 Application에서 불필요하게 메모리를 소진시키는 부분이 있으므로 이는 개발팀과의 협의를 거쳐서 문제점을 해결하시는 방법이 있겠습니다.

 

이상이 알려주신 내용에서 추측가능한 부분이고 좀더 상세한 내용이 있거나 궁금하신점은 글 남겨 주시면 답변드리겠습니다.

 

즐거운 하루되세요