EgovFramework 사용한 프로젝트 2개를 올렸을 때 에러 질문
- 작성자 :
- 오*익
- 작성일 :
- 2013-07-04 17:25:09
- 조회수 :
- 1,222
- 구분 :
- 기타
- 진행상태 :
- 완료
Q
전자정부프레임워크를 사용하여 개발한 웹 사이트와, 전자정부프레임워크를 사용하여 만든 테스트를 위한 간단한 웹사이트 두 개를 올렸습니다.
maximum 쓰레드와 힙메모리도 늘렸구요.
각 URL은
ex) a.com/a, a.com/b 이런식으로 됩니다.
a.com/a 사이트에 여러명의 유저가 접속하여 테스트를 하던 중, 사이트가 멈춰버리는 문제가 발생해서, 원인을 찾고 있습니다. a.com/a 가 멈춰있어도, a.com/b는 문제 없이 이용 가능합니다. 이게 서버 문제인지, 아니면 에러가 나서 멈춘건지 원인을 찾고 있는데, 톰캣 디버그 창에는, a.com/b를 접속할 때마다
2013-07-04 16:28:36,709 ERROR [egovframework.com.cmm.web.EgovComIndexController] No egovframework.co
m.uat.uia.web.EgovLoginController!!
위와 같은 에러 메시지가 나타납니다.
1. 위의 에러가 문제가 되는 a.com/a 에 접속할 때 나타나는 에러가 아니라, 중요하지 않다고 생각하고 있는데, 이 a.com/b 에 접속할 때 나타나는 에러 메시지가 a.com/a를 멈추게 하는 원인이 될 수 있는 것인지, 이 에러 메시지의 원인이 무엇인지 궁금합니다.
2. 추가로, a.com/a 에서 100% 에러나는 부분이 있어 일단 try catch 문을 걸어 놓은 부분이 있는데, 디버그 창을 보면 접속하는 유저마다 여기서 catch문에 걸리고, exception이 나타납니다. 어차피 예외처리를 했기 때문에 문제 없을 거라 생각헀는데, 괴도하게 많이 try catch문에 걸려 exception 을 막은 것이 원인이 될 수 있을 까요?
3. 이게 가장 의심이 됩니다.
2013. 7. 4 오후 3:21:18 org.apache.tomcat.util.net.AprEndpoint createWorkerThread
정보: Maximum number of threads (200) created for connector with address null and port 80
쓰레드를 200으로 늘리면서 문제가 생긴걸까요?
쓰레드는 많은데, try catch에서 exception에 걸려 쓰레드가 complete 되지 못하고, 또 다른 쓰레드가 돌고 하면서 leak이 발생하고, 결국 서버가 다운되는 것일까요?
조언 부탁드립니다..
maximum 쓰레드와 힙메모리도 늘렸구요.
각 URL은
ex) a.com/a, a.com/b 이런식으로 됩니다.
a.com/a 사이트에 여러명의 유저가 접속하여 테스트를 하던 중, 사이트가 멈춰버리는 문제가 발생해서, 원인을 찾고 있습니다. a.com/a 가 멈춰있어도, a.com/b는 문제 없이 이용 가능합니다. 이게 서버 문제인지, 아니면 에러가 나서 멈춘건지 원인을 찾고 있는데, 톰캣 디버그 창에는, a.com/b를 접속할 때마다
2013-07-04 16:28:36,709 ERROR [egovframework.com.cmm.web.EgovComIndexController] No egovframework.co
m.uat.uia.web.EgovLoginController!!
위와 같은 에러 메시지가 나타납니다.
1. 위의 에러가 문제가 되는 a.com/a 에 접속할 때 나타나는 에러가 아니라, 중요하지 않다고 생각하고 있는데, 이 a.com/b 에 접속할 때 나타나는 에러 메시지가 a.com/a를 멈추게 하는 원인이 될 수 있는 것인지, 이 에러 메시지의 원인이 무엇인지 궁금합니다.
2. 추가로, a.com/a 에서 100% 에러나는 부분이 있어 일단 try catch 문을 걸어 놓은 부분이 있는데, 디버그 창을 보면 접속하는 유저마다 여기서 catch문에 걸리고, exception이 나타납니다. 어차피 예외처리를 했기 때문에 문제 없을 거라 생각헀는데, 괴도하게 많이 try catch문에 걸려 exception 을 막은 것이 원인이 될 수 있을 까요?
3. 이게 가장 의심이 됩니다.
2013. 7. 4 오후 3:21:18 org.apache.tomcat.util.net.AprEndpoint createWorkerThread
정보: Maximum number of threads (200) created for connector with address null and port 80
쓰레드를 200으로 늘리면서 문제가 생긴걸까요?
쓰레드는 많은데, try catch에서 exception에 걸려 쓰레드가 complete 되지 못하고, 또 다른 쓰레드가 돌고 하면서 leak이 발생하고, 결국 서버가 다운되는 것일까요?
조언 부탁드립니다..
A
안녕하세요, 오형익님.
우선 EgovComIndexController는 공통컴포넌트에 대한 테스트용 페이지를 구성(메뉴 포함)하는 부분으로 오류 부분은 적용된 공통컴포넌트 중에 로그인 처리를 담당하는 부분(EgovLoginController)을 찾아 내부적인 처리 되는 부분입니다.
에러 로그를 찍어 주는 것도 try catch로 정보를 표시하기 위한 부분으로 실행 상에 문제가 되진 않습니다.
다만, EgovComIndexController는 테스트용으로 제공되기 때문에 "/index.do"와 같은 URL들을 실제 시스템에 맞게 수정하실 필요는 있습니다.
1. 해당 에러는 위에 설명드렸듯이 특정 기능에 대한 처리 부분을 skip하면서 정보를 표시하기 위한 것으로 멈추는 것에 대한 원인이 되지는 않을 것 같습니다.
2. try catch 자체보다는.. 어떤 exception이 발생하였고, try catch 부분에 추가적인 resource를 사용하고 catch 부분에서 release가 되지 못해 메모리 점점 모자라는 현상이 있을 수 있습니다.
이 경우는 try catch 안쪽 처리 부분에 오류가 발생하였을 때에 release 해줘야 할 부분이 있다면 finally 처리를 통해 release를 해주시면 되실 것 같습니다.
3. 이 경우는 최대로 잡으신 200 thread가 모두 실행시에 있는 경우 추가적인 클라이언트 요청을 처리하지 못한 경우입니다.
두가지 가능성으로 보자면,
특정 URL request가 정상적으로 종료되지 못하고 thread를 잡고 있는 경우와 실제 요청 자체가 많은 경우로 볼 수 있을 것 같습니다.
첫번쨰 경우는 문제가 되는 URL을 찾아 분석을 하셔야 하는데 구글링으로 "tomcat thread 확인" 등을 검색해 보시면 현재 thread로 돌고 있는 URL들을 확인하실 수 있습니다.
문제가 되는 URL에 대한 부분을 찾아 수정하셔야 할 것 같습니다.
두번째 경우는 요청 자체가 서버가 처리하기에는 많은 경우로 응용 부분으로는 해결을 어려울 것 같습니다.
아무래도 서버 사양을 높이시거나(scale up) 서버 수를 늘리시는 방법(scale out) 외에는 방법이 없을 것 같습니다.
일부 시간이 많이 드는 처리 부분에 대하여 DB tunning 등의 방법으로 처리 속도를 개선하는 것도 도움이 되실 것 같습니다.
마지막으로, tomcat thread를 200으로 늘리신 경우 DB Connection Pool 자체도 200 정도까지 늘리셨는지 확인해 보십시오.
request 자체를 200까지 받더라도 실제 DB 연결을 하지 못하고 있으면 의미가 없기 때문입니다
그럼, 즐거운 하루되십시오.
감사합니다.
우선 EgovComIndexController는 공통컴포넌트에 대한 테스트용 페이지를 구성(메뉴 포함)하는 부분으로 오류 부분은 적용된 공통컴포넌트 중에 로그인 처리를 담당하는 부분(EgovLoginController)을 찾아 내부적인 처리 되는 부분입니다.
에러 로그를 찍어 주는 것도 try catch로 정보를 표시하기 위한 부분으로 실행 상에 문제가 되진 않습니다.
다만, EgovComIndexController는 테스트용으로 제공되기 때문에 "/index.do"와 같은 URL들을 실제 시스템에 맞게 수정하실 필요는 있습니다.
1. 해당 에러는 위에 설명드렸듯이 특정 기능에 대한 처리 부분을 skip하면서 정보를 표시하기 위한 것으로 멈추는 것에 대한 원인이 되지는 않을 것 같습니다.
2. try catch 자체보다는.. 어떤 exception이 발생하였고, try catch 부분에 추가적인 resource를 사용하고 catch 부분에서 release가 되지 못해 메모리 점점 모자라는 현상이 있을 수 있습니다.
이 경우는 try catch 안쪽 처리 부분에 오류가 발생하였을 때에 release 해줘야 할 부분이 있다면 finally 처리를 통해 release를 해주시면 되실 것 같습니다.
3. 이 경우는 최대로 잡으신 200 thread가 모두 실행시에 있는 경우 추가적인 클라이언트 요청을 처리하지 못한 경우입니다.
두가지 가능성으로 보자면,
특정 URL request가 정상적으로 종료되지 못하고 thread를 잡고 있는 경우와 실제 요청 자체가 많은 경우로 볼 수 있을 것 같습니다.
첫번쨰 경우는 문제가 되는 URL을 찾아 분석을 하셔야 하는데 구글링으로 "tomcat thread 확인" 등을 검색해 보시면 현재 thread로 돌고 있는 URL들을 확인하실 수 있습니다.
문제가 되는 URL에 대한 부분을 찾아 수정하셔야 할 것 같습니다.
두번째 경우는 요청 자체가 서버가 처리하기에는 많은 경우로 응용 부분으로는 해결을 어려울 것 같습니다.
아무래도 서버 사양을 높이시거나(scale up) 서버 수를 늘리시는 방법(scale out) 외에는 방법이 없을 것 같습니다.
일부 시간이 많이 드는 처리 부분에 대하여 DB tunning 등의 방법으로 처리 속도를 개선하는 것도 도움이 되실 것 같습니다.
마지막으로, tomcat thread를 200으로 늘리신 경우 DB Connection Pool 자체도 200 정도까지 늘리셨는지 확인해 보십시오.
request 자체를 200까지 받더라도 실제 DB 연결을 하지 못하고 있으면 의미가 없기 때문입니다
그럼, 즐거운 하루되십시오.
감사합니다.