>
> {◈ 안정적인 서블릿 환경 셋팅.....??(다시 질문)}
> {쭌...(guest), narith2@lycos.co.kr}
>
> >
> > {Re: ◈ 안정적인 서블릿 환경 셋팅.....??}
> > {정윤상(navidad), navidad@channeli.net}
> >
> > >
> > > {◈ 안정적인 서블릿 환경 셋팅.....??}
> > > {쭌...^0^(guest), narith2@lycos.co.kr}
> > >
> > > 동시 사용자가 4000명이상인 사이트를 개발하려고 합니다.
> > >
> > > 그런데 현재 solaris2.7 + apache1.3.9 + tomcat3.1을 사용하면서
> > >
> > > 테스트한 결과 사용자가 1000명도 안되어 tomcat이 죽어 버립니다.
> > >
> > > 에러 메시지는 이렇습니다....
> > >
> > > java.lang.OutOfMemoryError
> > > Endpoint ServerSocket[addr=0.0.0.0/0.0.0.0,port=0,localport=8007] shutdown
> > > due to exception: java.lang.OutOfMemoryError
> > > ----------------------------------------------------------------
> > >
> > > Stop tomcat
> > >
> > > java.net.ConnectException: ?????? ??ε?
> > > at java.net.PlainSocketImpl.socketConnect(Native Method)
> > > at java.net.PlainSocketImpl.socketConnect(Compiled Code)
> > > at java.net.PlainSocketImpl.doConnect(Compiled Code)
> > > at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:125)
> > > at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:112)
> > > at java.net.Socket.(Socket.java:269)
> > > at java.net.Socket.(Socket.java:98)
> > > at org.apache.tomcat.startup.Tomcat.stopTomcat(Compiled Code)
> > > at org.apache.tomcat.startup.Tomcat.execute(Tomcat.java:130)
> > > at org.apache.tomcat.startup.Tomcat.main(Tomcat.java:163)
> > >
> > > --------------------------------------------------------------------
> > > HANDLER THREAD PROBLEM: java.io.IOEx
> > > ception: ?????? ????
> > > java.io.IOException: ?????? ????
> > > at java.net.SocketOutputStream.socketWrite(Native Method)
> > > at java.net.SocketOutputStream.socketWrite(Compiled Code)
> > > at java.net.SocketOutputStream.write(Compiled Code)
> > > at org.apache.tomcat.service.connector.AJP12ResponseAdapter.sendStatus(C
> > > ompiled Code)
> > > at org.apache.tomcat.service.http.HttpResponseAdapter.endHeaders(Compile
> > > d Code)
> > > at org.apache.tomcat.core.BufferedServletOutputStream.sendHeaders(Compil
> > > ed Code)
> > > at org.apache.tomcat.core.BufferedServletOutputStream.reallyFlush(Compil
> > > ed Code)
> > > at org.apache.tomcat.core.ResponseImpl.finish(Compiled Code)
> > > at org.apache.tomcat.service.connector.Ajp12ConnectionHandler.processCon
> > > nection(Compiled Code)
> > > at org.apache.tomcat.service.TcpConnectionThread.run(Compiled Code)
> > > at java.lang.Thread.run(Compiled Code)
> > >
> > > ------------------------------------------------------------------
> > > java.lang.OutOfMemoryError
> > > at org.apache.tomcat.service.SimpleTcpEndpoint.processSocket(Compiled
> > > Code)
> > > at org.apache.tomcat.service.SimpleTcpEndpoint.acceptConnections(Compiled
> > > Code)
> > > at org.apache.tomcat.service.TcpListenerThread.run(Compiled Code)
> > > at java.lang.Thread.run(Compiled Code)
> > > Endpoint ServerSocket[addr=0.0.0.0/0.0.0.0,port=0,localport=8007] shutdown
> > > due to exception: java.lang.OutOfMemoryError
> > > SIGSEGV 11* segmentation violation
> > > si_signo [11]: SIGSEGV 11* segmentation violation
> > > si_errno [0]: Error 0
> > > si_code [1]: SEGV_MAPERR [addr: 0x1000024]
> > >
> > > stackbase=FE3B1D5C, stackpointer=FE3B15F4
> > >
> > > Full thread dump:
> > > ------------------------------------------------------------------------------
> > >
> > > 동시 사용자가 많아서 쓰레드의 과부하로 인한 이유인 것 같은데.....???
> > >
> > > 현재 solaris메모리는 1G자리 2대로 테스트를 했습니다.
> > >
> > > 메모리 부족 원인이기보다는 tomcat에서 이렇게 많은 동시 쓰레드를 받을 수
> > >
> > > 없는 것이 문제가 아닌가 합니다...????
> > >
> > > ◆ 그래서 무엇보다 이렇게 동시 사용자가 많은 사이트를 구축하는데...
> > >
> > > 필요한 최적의 서블릿 환경을 알고 싶습니다...(단, 서버는 바뀌지 않는 방향으로....)
> > >
> > > 그럼... 즐거운 하루되세용... 꾸벅!!
> >
> > 그런 현상이 발생하는군요.
> > 동시 사용자가 4000명이라.. 상당히 많은 수인것 같은데요..
> > 개인적으로 그정도 동시 사용자를 위한 서비스를 개발해 본 적은 없구요.
> > 다만.. 체크하실 사항들이 머가 더 있을까 생각해보다가 몇자 적습니다.
> >
> > 사용하고 계신 JDK의 버젼을 한번 확인하세요.
> > beta 혹은 RC(Release Candidate) 가 붙은 JDK는 왠만하시면..
> > 지양하시는 것이 좋을 것 같습니다.
> >
> > 참고로
> > Tomcat이 아마.. Tomcat 3.2 beta 7까지 나와있습니다.
> > (beta 꼬리표가 붙어있지만, Tomcat User Mailing List에서 3.1보다는 상당히
> > 안정적이란 소릴 많이 듣는 것 같더군요. Tomcat 4.0도 m4까지 나온것 같은데..
> > 아직은 안정화가 더 필요한 것으로 알고 있습니다.)
> >
>
> tomcat은 중소형급에서 사용한다는 말이 있어서 tomcat환경을 최대한으로 바꿔보았는데..
>
> 그래도 역시 위와같은 에러가 나더군요... 그래서 jserv로 바꿔서 테스트했는데...
>
> 그래도 역쉬....
>
> 해결방법좀 알켜주세용...
>
> ◆ 그래서 무엇보다 이렇게 동시 사용자가 많은 사이트를 구축하는데...
>
> 필요한 최적의 서블릿 환경을 알고 싶습니다...(단, 서버는 바뀌지 않는 방향으로....)
>
> 그럼... 즐거운 하루되세용... 꾸벅!!
>
>
"제 생각으로는" 여러가지 서블렛엔진들 중, tomcat 은 가장느린 performance 를
내고 있다고 생각됩니다.
Apache 와 같은 웹서버를 서블렛엔진이 있는 머신과는 별도로 운영하여 HTML/imagess 와
같은 정적인 컨텐츠와 Servlet/JSP와 같은 동적컨텐츠를 분리하는 방안이나,
현재 겪고 있는 OutOfMemoryError 의 경우는 tomcat.sh 에서 Java 의 초기힙사이즈와
최대힙사이즈를 조정함으로써(java -ms256m -mx512m ...) 일정정도 해결할 수 있겠지만,
이는 한계가 있습니다.
OutOfMemoryError 가 나는 이유야 어플리케이션 자체가 많은 메모리를 사용하는 구조이거나
프로그래머의 실수로 메모리 참조를 지속적으로 갖고 있어 메모리 누수현상이 일어나거나
하기 때문이겠지요... 1차적으로 어플리케이션으로 잘 튜닝함으로써 또한 해결을
하실 수 있을 겁니다.
그러나, 단일 Request 시 일정량의 메모리를 일시적으로 사용한다고 가정할 때, 동시에
400명(통상 동시사용자의 1/10을 Active Concurrent Request로 가정합니다.)이 요청을
하면, 그에 따른 메모리 사용량은 급격하게 늘어납니다.
자신하건데, WebSphere 나 WebLogic 과 같은 상용어플리케이션서버도 하나의 엔진으로
동시에 Active Request 400 을 모두 처리해 주기에는 해당 컨텐츠가 DB를 단순히
select 하는 매우 간단한 경우일지라도 매우 힘든 얘기입니다. 즉, TPS(초당처리건수)는
경험상 보면, 일반적인 DB 작업의 경우 하나의 엔진이 1초에 처리해 줄 수 있는 량은
하나의 DB Select만 존재하는 경우 TPS 400 정도, 여러개의 DB관련작업을 포함하는
일반적인 어플리케이션은 TPS 100-200 을 넘기 힘들고, Tmax 나, TUXEDO, CICS HOST 등과
같은 legacy 와 연동되는 경우는 20-50 을 넘기 힘듭니다.
여기에서 등장하는 것이 결국은 머신을 병렬로 연결하는 clustering 기법이지요...
한 머신에서 최대 CPU 100% 를 사용할 때까지 여러개의 인스턴스를 cloning 하고,
또, 물리적으로 서로 다른 머신을 3대 혹은 그 이상을 유지시키는 거지요....
동시사용자 4000명(현재 이 시스템에 로그인해 있는 사용자의 합: 마우스를
클릭했거나, 화면을 보고 있거나, 옆사람과 대화를 나누는 사람들까지 합하여..) 이라면
서버는 한순간에 대략 400 개의 Request 를 쉬지 않고 처리해야 하는 용량이 되고, 이는
국내 대부분 은행의 인터넷뱅킹 시스템 보다 많은 수치입니다.
Tomcat 이나, JServ, resin, JRun 과 같이 clustering Architecture 가 없는 경우는
L4 Switch 장비나 IBM eNetwork Dispatcher 와 같이 앞단에서 부하를 분산시키는
솔루션을 도입하시면 됩니다. 이 경우 물리적으로 떨어져 있는 각 머신의 Session
공유의 문제를 해결해야 하지요.
동시사용자가 4000 명이고, Active Concurrent Request 가 400 정도 된다면, 최소한
현재 사용하는 SUN 장비 메모리 2GB, 2-4 CPU 3-4 대가 필요한 용량이라 추측(!)
됩니다.
PS: hanmail.net 의 경우 접속시 URL이 튀는 패턴으로 추측건데 25대의 머신이군요...
C/S 환경에 익숙한 분들이 웹 환경을 목격(?) 했을 때 가장 먼저 느끼는 감정이
"고작 이러한 Performance 낼려고 이렇게 돈을 수억 투자했느냐?" 라는 냉담한
반응입니다. 그러나 웹이란 환경은 한달 내내 펑펑 놀다가 하루 중 몇시간 peek time
시에 견디도록 설계되어야 하는 거죠...
-------------------------------------------------------
본 문서는 자유롭게 배포/복사 할 수 있으나 반드시
이 문서의 저자에 대한 언급을 삭제하시면 안됩니다
================================================
자바서비스넷 이원영
E-mail: javaservice@hanmail.net
PCS:019-310-7324
================================================
|