달력

12025  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

K사 프로젝트 시 발생했던 문제.
maxThread 의 갯수도 문제였지만 이제 생각해보면 가장 결정적인 문제는 fd limited 값이다.
솔라리스임에도 설정이 1024로 잡혀있던 걸로 기억한다. 계정마다 다를 수도 있겠지만 한 서버에 was, webserver, db 를 사용했었고 was 서버의 limited 가 작으니... thread 생성시에도 max 개수만큼 생성되지 않았으리라 생각된다.
또한 application 에서 connection close 처리를 잘못했었으니... dbconnection pool 개수도, db 세션수도 문제가 되었을 것이다.

http://cafe.naver.com/deve.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=482


안녕하십니까..
늘 좋은 자료 훔쳐만 가던 라자로 라고 합니다.. ^^;;
다들 더운 날씨에 코딩 하시느라 고생많으시죠?
점심시간도 지났으니.. 팥빙수라도 하나 사드세요.. ^^*

제가 요즘 톰캣과 사투를 벌이고 있는데요..
여기 저기 검색도 하고 자문도 구하면서..
사이트 장애분석 및 해결책과 서버의 성능을 높이기 위한 방안을 여러모로 검토중에 있습니다..

현재 웹서버가 2대, 파일 서버 1대, DB서버 1대 총 4대의 서버로 서비스 중이구요
현재 사이트 방문고객이 하루 평균 5만명 가량입니다.
우선 서버 구성은 다음과 같습니다.
Windows 2000 Server
oracle 9i
iis5.0 + tomcat4.1.29
jdk 1.4.2.03

가장 큰 문제점은 일정 시간이 지난후에
톰캣에서 다음과 같은 에러가 발생하면서 hang이 걸린다는 것이구요..
심각: All threads are busy, waiting. Please increase maxThreads or check the ser
vlet status150 150
(thread 수를 150으로 늘려봤는데도 여전하더군요..)
이상한 점은 웹서버가 2대인데 유독 한쪽 서버에서만 발생 한다는 것입니다..
똑같은 소스로 같은 서비스를 하고 있는데 말입니다..
(쿠키와 db를 이용해서 세션 클러스터링을 하고있습니다.)

그리고 apache DBCP를 사용하고 있는데..
다음과 같은 에러가 종종 발생을 하고 있습니다..
DBCP borrowObject failed: java.sql.SQLException: IO 예외 상황: Connection refuse
d(DESCRIPTION=(ERR=12518)(VSNNUM=153092352)(ERROR_STACK=(ERROR=(CODE=12518)(EMFI
=4))(ERROR=(CODE=12560)(EMFI=4))))
DBCP borrowObject failed: java.sql.SQLException: IO 예외 상황: Connection refuse
d(DESCRIPTION=(ERR=12518)(VSNNUM=153092352)(ERROR_STACK=(ERROR=(CODE=12518)(EMFI
=4))(ERROR=(CODE=12560)(EMFI=4))))


프로그램 자체에 버그가 있다면 이것을 찾는게 중요하겠지만..
혹시나 해서 레진으로 바꿔 볼까했는데..
대부분 model2 + jstl 로 짜여진 로직들이 resin 에서 돌릴려니..
조금씩 수정을 해야 하더군요.. ㅜㅜ
수많은 jsp page들을 바꿔 줄 생각하니..
차라리 톰캣을 잘 tuning 하는게 빠르겠단 생각이 들더군요

현재 jmeter + jprofiler 을 이용해서 stress test 도 진행중이지만..
뚜렷한 답은 안나오네요..

이러한 장애에 대해서 진단방법, 접근방법, 해결방법등 어떠한 형태이든지..
여하한의 조그마한 조언이라도 해주시면 감사하겠습니다.. ^^*


newoverguy  2대의 웹서버가 있는데, 한대는 iis+tomcat, 다른한대는 tomcat 이렇게 구성되어있는지요? 그리고, hang이 걸리는 서버는 iis+tomcat이 설치되어있는 서버인지 아니면 후자 인지 ? 궁금합니다. 주위분에게 조언을 구해볼려 했더니, 어떻게 구성되어 있는지 알아야 물어 볼꺼 같아서요~ 08/11 16:25 
 
 라자로  앗 우선 관심 가져 주셔서 너무나 감사합니다.. (__)
두대의 웹서버가 모두 iis+tomcat 으로 구성되어 있구요
네임 서버에서 로드 밸런싱을 하고 있습니다..
다시 한번 관심 가져주셔서 넘 감사합니다.. ^^* 08/11 18:43 
 
 아빠곰  제 생각에는 첫 번째 에러인 경우 접속 하고 있는 유저들이 150명을 초과하기 때문에 발생하는 문제인거 같아요... tomcat의 client max수를 좀 더 늘려주셔야 할 듯 하고요...


DBCP에서 나오는 에러인 경우 디비가 연결이 끊기면 저런 메시지가 나오는데, 디비가 죽지 않았다면 네트워크 상태를 함 체크해 보시면 되겠네요...
도움이 되었으면 합니다. 08/11 20:13 
 
 newoverguy  아빠곰회원님 좋은 답변감사합니다. ^^ 회원님 블로그도 둘러보았는데, 보아양채널이 좋던데요~ 보아짱ㅋ ^^ 08/11 21:53 
 
 라자로  아빠곰님 좋은 답변 감사합니다.. ^^;
우선 첫번째 에러인 경우에는 동접자하고는 상관이 없습니다.
접속자가 별로 없을때도 발생하거든요.
그리고 max 쓰레도 갯수를 기본75개에서 두배인 150개로 늘려줬는데..
오히려 에러 발생 빈도는 더 높아졌답니다..
내일은 호스팅 업체에 전화해서 네트웍상태에 대해서 논의를 좀 해봐야 하겠네요.. L4, 스위치 장비에 문제가 있을지도 모르겠군요.. 08/11 22:11 
 
 비실비실  장비에서 TCP/IP 관련 셋팅이 제대로 되어 있는지, 장애가 발생했을 경우 DB의 상황은 어떤지.. 락이 걸려 있는지.. 장애가 발생 했을 경우 페이지의 수행 속도를 체크 해 봐야 합니다. 이같은 경우 대부분 어플리케이션이 잘못 짜여져 있거나 DB의 이상으로 여겨집니다. Oracle의 Thread 설정은 어떻게 되어 있는지 체크 해 보시고 Oracle이 튜닝 되어 있는 지도 확인 해봐야 하구요..
max thread 변경 해 봐야 도움이 안될듯 합니다. 08/12 09:35 
 
 비실비실  전체적인 장비의 튜닝, 오라클 튜닝 후 개선이 안된다면 어플리케이션을 검토해 봐야 겠지요.. 윈도 장비를 어떻게 튜닝 해야 할 지는 잘 모르겠습니다. 아파치 사이트에 가면 있을 지도.. 모르겠네요.. 08/12 09:39 
 
 비실비실  서비스가 잘 되다가 요즘 갑자기 문제가 생긴 건지.. 아님 최근에 오픈했는지도 궁금하네요.. 08/12 09:47 
 
 라자로  비실비실님 관심 가져주셔서 넘 감사합니다.. ^^
첫번째 질문 : TCP/IP 관련 셋팅이 제대로 되어 있는지에 대한 질문은 잘 모르겠습니다.. ㅜㅜ 호스팅 업체에 서버 관리를 해주고 있거든요.. 전화해서 확인해 보겠습니다..
두번째 질문 : 장애 발생시 DB확인해 본 결과 락이 걸린 부분은 없었습니다.
세번째 질문 : 오라클 튜닝은 현재 진행중이며.. 아직은 튜닝이 완벽히 이루어 지지 않았습니다.
네번째 질문 : 서비스 시작한지 2달 가량 되어가고 있습니다. 초반에는 잦은 update 로 톰캣을 자주 재시작 햇었으므로.. 초반에는 서비스가 잘 이루어 졌다고 단언 할 수는 없는 입장입니다..


다시한번 관심 가져 주셔서 감사합니다.. ^^;; 08/12 10:04 
 
 라자로  아 참고로.. jai 를 사용하고 있는데 이부분에 버그가 있지 않을까 하는 의심이 가고 있어서 직중적으로 stress test를 해볼 생각입니다..
장애원인과 해결 방안이 찾아지는 대로 정리해서 공유해야겠죠..
이렇게 고생하는것도 다 내공이 싸여가는 걸로 생각하면서 오늘 하루도 톰캣과 사투를 벌여볼 생각입니다.. ^^* 08/12 10:08 
 
 tmhuh  DBCP에서 DB 커넥션이 끊어지는 현상은 저도 겪어본 바가 있는데 저와 같은 경우인지는 잘 모르겠지만.. 제가 해결한 방법을 적어보겠습니다.


일단 커넥션이 끊어지는 이유는 DB 서버를 재시작하거나 하면 DBCP에서 그걸 커넥션이 끊어진 걸로 생각하고 그 이후에는 DB 서버가 살아있음에도 불구하고 계속 connection refuse 에러가 나더라구요.
그래서 톰캣 서비스를 재시작해야만 다시 DB 커넥션이 되구요.


이에 대한 해결책은 DBCP 설정 프로퍼티에 validationQuery가 있는데 이걸 select 1 from dual 과 같이 더미 쿼리로 설정해 놓으면 이 문제가 해결되더군요.. 08/12 11:10 
 
 라자로  으음.. 설정 프로퍼티에 그런게 있었군요..
tmhuh님 정보주셔서 넘 감사합니다..
역시 배워갈게 많은분인것 같다던 제 예감이 딱 들어 맞았네요..
바로 적용해 보도록 하겠습니다.. ^^* 08/12 11:40 
 
 zmzizi  예전에 코스닥에 파견나가서 일할때, 코스닥도 L4 장비를 쓰던데, L4 장비의 로드밸런싱이 다소 좀 이상했던 걸로 기억나네요... 전체 접속인원/서버수 로 분배하는 방식이 아니라 특정 ip 대역으로 나누더라구요.
그게 코스닥에서의 L4 장비 설정의 문제인지 아니면 L4 장비 로드밸런싱의 특징인지는 잘 모르겠지만, 코스닥에서도 웹서버 3대 중 특정 1대만 커넥션 풀이 나는 경우가 잦았었습니다. 비슷한 현상인듯 싶어서 말씀드립니다. 08/12 14:43 

'WAS' 카테고리의 다른 글

AIX - was의 병목현상  (0) 2008.06.04
jeus 4.0 - DATA-SOURCE 패스워드 암호화  (0) 2008.06.04
Apache 가상호스트 설정  (0) 2006.02.21
tomcat4 가상호스트 설정  (0) 2006.02.21
Posted by 알 수 없는 사용자
|