달력

42025  이전 다음

  • 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

AIX - was의 병목현상

WAS 2008. 6. 4. 19:48

1. 올리신 건 중 SIGSEGV의 유형을 보면 sun.io.ByteToCharDoubleByte.convert()에서
  sun.io.ConversionBufferFullException이 발생했습니다.
  극히 정상적인 이 메소드에서 유일하게 ConversionBufferFullException이 발생할 수
  있는 경우는 메모리가 부족할 때 일 것입니다.
  왜 메모리가 부족할 까요? 잘 돌땐 잘 도는 때, 왜 에러가 생길까요?
  가장 가능성 있는 부분은 어디신가 메모리 누수가 있기 때문일 것입니다.
  엔진의 Bug일 수도 있고, ResultSet/Statement를 close()하지 않아서일 수도 있고,
  어떤 응용어플리케이션이 GC의 대상이 되지 않는 구조의 메모리 점유를 할 수도
  있고, 가능성은 매우 다양합니다.
  아래와 유사한 기능으로 주기적으로 Free 메모리크기를 확인해 보세요

[mem.jsp]
--------------------8><---------------------------------------------------
<%@ page session="false" contentType="text/html" %>
<html><body>
<b><%= java.net.InetAddress.getLocalHost().getHostAddress() %></b>
<%= new java.util.Date() %><br><br>

<%
   Runtime rt = Runtime.getRuntime();
   long free = rt.freeMemory();
   long total = rt.totalMemory();
   out.println("Free  = <b>"+(free/1024/1024) +"</b> MB ("+free +" bytes)<br>");
   out.println("Total = <b>"+(total/1024/1024)+"</b> MB ("+total+" bytes)<br>");
%>
</body></html>
--------------------8><---------------------------------------------------

[gc.jsp]
--------------------8><--------------------------------------------------
<%@ page session="false" contentType="text/html" %>
<html><body>
<h1>WebSphere Memory Monitor(GC Version)</h1>
<%= new java.util.Date() %><br>

<%
   System.out.println(java.net.InetAddress.getLocalHost().getHostAddress()+"<br>");
   Runtime rt = Runtime.getRuntime();
   long free = rt.freeMemory();
   long total = rt.totalMemory();
   out.println("Free  = " + (free/1024/1024) + " MB (" + free + " bytes)<br>");
   out.println("Total = " + (total/1024/1024) + " MB (" + total + " bytes)<br>");
   out.println("----------------------------------------------------<br>");
   System.gc();
   rt = Runtime.getRuntime();
   free = rt.freeMemory();
   total = rt.totalMemory();
   out.println("Free  = " + (free/1024/1024) + " MB (" + free + " bytes)<br>");
   out.println("Total = " + (total/1024/1024) + " MB (" + total + " bytes)<br>");
%>
</body></html>
--------------------8><---------------------------------------------------

 어떤 곳에서 메모리 누수가 있는 지는 profiling 도구나, 혹은 다른 방법을 찾아보셔야
 할 것입니다.

2.
2.1  DB Lock 일 가능성이 있습니다. Oracle 쪽에서 확인해 보세요.

2.2 만약 그렇지 않다면, 응답이 느려질 때, 의도적으로 kill -4 <pid>, kill -3 <pid> 로
  발생시킨 javacore에서 대부분이 Statement executeQuery() 후 데이타를 기다리고 있는
  것은 극히 정상적인 상태로 보여집니다.  RS6000 B80(2-way,1GB)사양에서 Oracle과
  WebLogic을 함께 사용하고 있는데, 어쩌면 해당 SQL 쿼리 및 전체적인 성능이 낮기
  때문일 것입니다.
  topas나 vmstat로 시스템을 확인해 보세요. vmstat 의 fr,sr값들이 지속적으로 0
  이외의 수치로 나타난다거나, CPU가 100%라든가...
  oracle 프로세스가 대부분의 메모리와 CPU를 점유할 것이라는 추정은 별도 틀리지
  않을 것입니다. 이 경우라면 DB서버와 WAS서버를 분리할 시기가 온 듯 하군요.
 
  혹은 메모리나 CPU 의 bottle-neck이 아닐지라도, 웹스트레스테스트툴을 이용하여
  몇몇 주목되는 응용어플리케이션의 단위시간당 최대 처리가능건수를 구해 보세요.
  그 이상으로 호출이 발생하면, 그같이 응답이 느려지고 hang현상에 빠지는 것은
  기술적으로만 보면 당연한 현상인 것이지요.

PS: 자바서비스넷에 있는 글들이 도움이 될 것입니다. 비록 많은 부분에서
 WebSphere기반으로 설명되어 있지만, 동일하게 여타의 웹어플리케이션서버에서도
 적용가능하며, 문제을 찾아가는 방법론 상의 문제일 뿐입니다. 각종 글을 이용하여
 아래 사항을 항상 모니터링 하세요

(1) vmstat 의 fr,sr 값의 변화(특히 지속적으로 0 이외의 값이 나타나면 메모리부족)

(2) vmstat 의 CPU상황(90-100%가 지속적이라면 CPU부족)

(3) httpd 데몬의 개수변화
    ps -ef|grep httpd| wc -l

(4) 80 port로 ESTABLISH 된 개수 변화
    netstat -n | grep tcp4 | grep EST | \
      nawk '{ if ( index($4,"<server_ip_addres>.80")>0) {print $0;}}' | wc -l

(5) 사용자 PC로 날아가는 N/W 병목

    5-1) topas 로 보았을 때, 특정 N/W으로(en0라 가정) 전송되는 KB 수
    예를 들어 10Mbps 라인이라면 대략 700-900 KB/sec 가 최대

    NOTE: 실 전송속도는 일반적으로 라인 최대치의 60% 로 봄
    T1: 1.544 Mbps -----> 1.544 * 1024 / 8 * 0.6   = 118 KB/sec
    E1 : 2.048 Mbps ----> 2.048 * 1024 / 8 * 0.6   = 157 KB/sec
    10 Mbps  -----------> 10 * 1024 / 8 * 0.6      = 768 KB/sec
    T3 : 43.7361 Mbps --> 43.7361 * 1024 / 8 * 0.6 = 3359 KB/sec
    100Mbps ------------> 100  * 1024 / 8 * 0.6    = 7680 KB/sec

    5-2)
    혹은  80 port의 out-bound send queue에 지속적으로 쌓이는 현상이 일어나는지
    여부 확인

    netstat -n | grep tcp4 | grep EST | \
      nawk 'BEGIN{s=0;}
            { if ( index($4,"<server_ip_addres>.80")>0) { s+=$3; }} \
            END{ printf("%d", s/1024); }'

    이 수치는 80 port에서 고객의 PC로 날아가는 TCP/IP 네트웍 레벨에서 send Q에
    쌓이는지를 보는 것으로서, 이 수치가 지속적으로 0 이외의 수치, 혹은 지속적으로
    100 KB이상을 넘어서면 N/W bottle-neck을 의심해 볼 수 있음.


(6) 웹서버와 WebLogic과의 소켓연결개수(가정 7001이라 가정했을 때)
    netstat -n | grep tcp4 | grep EST | \
      nawk '{ if ( index($4,"<server_ip_addres>.7001")>0) {print $0;}}' | wc -l

    혹은 lsof 라는 유틸리티를 설치하여

    was_pid=`ps -ef|grep java|grep ....WebLogic process ....| awk '{print $2}'
    lsof -p $was_pid | grep 7001 | grep EST | wc -l

    현재, 질문하신 분의 경우, WebLogic의 동시 최대 처리가능한 ExecuteThread 수는
    30개로 설정되어 있습니다. 만약, 스트레스테스트 환경이 아니라, 실 운영시에
    위 수치가 지속적으로 증가하여 30에 육박한다면 이는 hang현상을 의미하게 됩니다
    아래의 7)글을 참조하세요. 그리고, 자바서비스넷의 각종 문서에서 언급한 PPC라는
    용어를 찾아 보세요.

 (7) DB연결개수 변화(Oracle JDBC Thin: 1521 port라 가정했을 때)

    lsof -p $was_pid | grep 1521 | grep EST | wc -l

    이 수치가 DB Pool에서 설정해 둔 max 20 에 도달한다면 일단 장애가 일어나는
    것은 당연한데, 그렇다고 max 20 을 100 이나 200 으로 변경해 주는 행위는
    성능진단경험이 부족한 엔지니어가 흔히 범할 수 있는 오류중의 하나입니다.
   
    max 수치를 설정하는 가이드는 장애가 없으면서 극히 잘 서비스한 시간대에 최대로
    올라간 DB연결개수를 max로 설정하시면 됩니다.(사이트마다 다르겠지요)
   
    어떤 성능상의 이슈로 인해, 처리능력과 호출빈도의 상관관계에서 밀리기 시작하면
    DB연결개수가 증가하는 것은 일시적인 현상이 아니라 지속적인 현상으로 나타납니다.
    결국, 20이든 50인든 200 이든 "50보 100보"인 것이지요

    근본적으로 SQL를 튜닝하는 것과 같이 해당 응용어플리케이션의 성능을 높여 주어야
    합니다.

    NOTE: OCI방식이라면 잡아낼 방법이 없음...

    NOTE: 앞의 (2),(3),(4),(5),(6),(7) 정보를 로깅하는 shell script의 샘플은 아래의
    문서를 참조세요.
    99   RE: netstat & lsof 
    http://www.javaservice.net/~java/bbs/read.cgi?m=appserver&b=engine&c=r_p&n=1007110331
   

(8) 현재 실행중이 서블렛/JSP의 개수 모니터링
    requestmon 적용.

    현재실행중인 서비스 모니터링 - requestmon -
    http://www.javaservice.net/~java/bbs/read.cgi?m=appserver&b=was&c=r_p&n=982131370
    Orion 서버에 requestmon 적용하기
    http://www.javaservice.net/~java/bbs/read.cgi?m=appserver&b=orion&c=r_p&n=1009556331
    Resin2.0.4 서버에 requestmon 적용하기
    http://www.javaservice.net/~java/bbs/read.cgi?m=appserver&b=engine&c=r_p&n=1009768606


(9) 응답이 3초 이상걸린 URI 기록
    requestmon 적용

(10) 메모리 heap 변화 모니터링
    앞서의 mem.jsp, gc.jsp 참조...

(11) AIX 플렛폼의 IBM JDK 에 한하여, 현재 장애를 유발하고 있는 시점에서, 어차피
    내렸다 올려야 하는 상황이라면, 아래와 같이 현재 돌고 있는 내부의 Thread Dump를
    받는 행위는 현재의 상황을 이해하는데 매우 필수적입니다.

   1) dbxtrace.sh

     a) 현재 프로세스가 죽지 않은 상황일 때,
        # dbxtrace.sh -a <was_pid> > dbxtrace.txt

     b) "core" 파일이 방금 막 생겼을 때,
        # mv core core2
        # dbxtrace.sh -c core2 > dbxtrace.txt

    NOTE: dbxtrace.sh 에서 정확한 정보를 보려면 시스템의 fullcore 옵션이 true이어야
    합니다.

    #Please check using "lsattr -El sys0 | grep fullcore" if fullcore is   
    #"true". if not, do a "chdev -a fullcore=true -l sys0".
    #For core files:
    #    Usage:   dbxtrace.sh [executable] [core]
    #      or :   dbxtrace.sh -c corefile > dbxtrace.txt
    #    (Please make sure you use the java executable and not the java script)
    #
    #To attach to a running or hung process
    #    Usage:   dbxtrace.sh -a PID >  dbxtrace.txt
    #    Example: dbxtrace.sh -a 1234 > dbxtrace.txt

    dbxtrace.sh
    AIX Java App. SIGSEGV 진단 방법에 관한 예
    http://www.javaservice.net/~java/bbs/read.cgi?m=appserver&b=was&c=r_p&n=1000371692


   2) javacore??????.txt 의도적으로 만들기

    # kill -3 <was_pid>

    javacore 파일에는 현재 수행중의 ExecuterThread 가 무엇을 하고 있는지 확인할 수
    있습니다. ( javacore????.txt 는 IBM JDK 에 한해서 발생합니다. SUN JDK에서는
    발생하지 않습니다.)
    (javacore의 라인이 255글자를 넘어가기 때문에 vi 로는 열지 못하니 more 로 보세요)
   


NOTE:
 아직 아래 글을 읽지 않았다면, 꼭 읽어 보세요.
 [강좌]웹기반시스템하에서의 성능에 대한 이론적 고찰
 http://www.javaservice.net/~java/bbs/read.cgi?m=resource&b=consult&c=r_p&n=1008701211


================================================
  자바서비스넷 이원영
  E-mail: javaservice@hanmail.net
  PCS:011-898-7904
================================================

'WAS' 카테고리의 다른 글

jeus 4.0 - DATA-SOURCE 패스워드 암호화  (0) 2008.06.04
톰캣의 maxThreads, DBCP 장애  (0) 2006.02.24
Apache 가상호스트 설정  (0) 2006.02.21
tomcat4 가상호스트 설정  (0) 2006.02.21
Posted by 알 수 없는 사용자
|

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.


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 알 수 없는 사용자
|

Apache 가상호스트 설정

WAS 2006. 2. 21. 14:21

http://okjsp.pe.kr/lecture/lec01/vhost01.html

Apache 가상호스트 설정

kenu
2002-03-19 12:27오전

이 문서는 apache 서버에서 가상호스트를 사용해서 여러개의 도메인을 사용하도록 하는 방법을 설명합니다. 파일은 apache 의 conf 디렉토리에 있는 httpd.conf 파일만을 변경합니다. apache의 기본적인 설치는 잘 되어 있다고 가정하고 다른 도메인을 붙이는 법을 설명합니다. 또한 DNS 서버 설정에 관해서는 이 문서에서 설명하지 않겠습니다. 확장강좌는 tomcat 4.0.x 와 연동하는 강좌입니다.
강좌환경
OS:Solaris 2.8
Apache: 1.3.20
설치디렉토리: /usr/local/apache
		


주의할 점은 비단 아파치만 해당되는 것이 아닙니다만, 버전마다 환경설정하는 것이 차이가 있을 경우가 많기 때문에 가능하면 패키지에 포함된 Installation 문서를 표준으로 설치하시기 바랍니다.

Tomcat 과 연동하기 위해서는 DSO 모듈을 사용하는 mode 로 설치가 되어야 합니다. 1.3.22 버전부터는 이 모드로 설치가 되지만 1.3.21 이전 버전은 아래처럼 소스파일을 이용해서 설치를 해야됩니다. 가능하면 1.3.23 이후 버전을 다운받아서 설치하십시오. 아래 명령어를 skip 할 수 있으니까요. 아래 명령어는 unix 계열에서만 사용하는 명령어입니다. windows 의 경우 패키지에 포함된 문서를 보세요. \ 는 줄이 길어질 때 엔터를 쳐도 실행이 안되도록 하는 이음 문자입니다.
apache 컴파일 명령줄
./configure --prefix=/usr/local/apache \ 
            --enable-shared=max \
            --enable-rule=SHARED_CORE \ 
            --enable-module=so
		


conf 디렉토리에 있는 httpd.conf 파일을 열어서 아래 부분에 추가할 도메인과 그에 따른 부가적인 정보를 입력합니다.
설치경로
...
### Section 3: Virtual Hosts
#
# VirtualHost: If you want to maintain multiple domains/hostnames on your
# machine you can setup VirtualHost containers for them. Most configurations
# use only name-based virtual hosts so the server doesn't need to worry about
# IP addresses. This is indicated by the asterisks in the directives below.
#
# Please see the documentation at <URL:http://www.apache.org/docs/vhosts/>
# for further details before you try to setup virtual hosts.
#
# You may use the command line option '-S' to verify your virtual host
# configuration.

#
# Use name-based virtual hosting.
#
NameVirtualHost *

#
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for requests without a known
# server name.
#
#<VirtualHost *>
#    ServerAdmin webmaster@dummy-host.example.com
#    DocumentRoot /www/docs/dummy-host.example.com
#    ServerName dummy-host.example.com
#    ErrorLog logs/dummy-host.example.com-error_log
#    CustomLog logs/dummy-host.example.com-access_log common
#</VirtualHost>
    <VirtualHost *>
    ServerName kpanet.or.kr
    DocumentRoot /home/jakarta/kpanet402/webapps/ROOT
    ServerAlias kpanet.or.kr *.kpanet.or.kr
    </VirtualHost>

    <VirtualHost *>
    ServerName ycpa.or.kr
    DocumentRoot /home/vhost/ycpahome/ROOT
    ServerAlias ycpa.or.kr *.ycpa.or.kr
    </VirtualHost>

    <VirtualHost *>
    ServerName pharmsnet.com
    DocumentRoot /home/jakarta/pmstemp
    ServerAlias pharmsnet.com *.pharmsnet.com
    </VirtualHost>

Include /home/jakarta/kpanet402/conf/jk/mod_jk.conf
        


제가 사용하는 httpd.conf 파일의 일부입니다. httpd.conf 의 마지막 부분에 가상호스트 섹션이 있고, 이 부분에 여러개의 도메인을 세팅하면 됩니다. 위의 예에서는 kpanet.or.kr, ycpa.or.kr, pharmsnet.com 이렇게 3개의 도메인이 설정되어있습니다. 각각의 도메인마다 ROOT 디렉토리가 다르게 설정되어있습니다. 각각의 태그 안에 있는 DocumentRoot 의 값이 다름을 확인하실 수 있을 겁니다. 그리고 ServerAlias 는 2차 도메인을 포함합니다. 대표적인 것이 www.kpanet.or.kr 에서의 www 가 되겠죠. 모든 것을 통틀어 wildcard 문자인 * 으로 처리하도록 합니다. 2차 도메인마다 다르게 디렉토리를 지정하는 법은 설명하지 않겠습니다. 이에 관한 문서는 아래 링크에서 소개한 사이트를 찾아보시는 것이 더 나을 것이라 생각됩니다.

마지막줄의 Include 는 tomcat과 연동하는 모듈인 mod_jk.conf 파일의 경로를 적어놓은 것입니다. apache만으로 서비스할 경우에는 필요없습니다. 일단 이렇게 가상호스트 설정을 마쳤으면 /usr/local/apache/bin/apachectl restart 로 재시동합니다.

브라우저를 열어서 설정을 확인해보시기 바랍니다. 아래의 링크에서 더 자세한 정보를 찾아보시기 바랍니다.

관련 사이트
http://www.apache.org/docs/vhosts/
아파치 가상호스트 설정에 대한 공식문서
http://www.apache.kr.net/documents/vhost-story.html
정관진님의 아파치 가상호스트 설정에 대한 한글문서
http://www.superuser.co.kr/apache/virtualhost/page01.htm
아파치를 활용한 가상호스트 설정법
http://www.0u4u.com/linux/apache8.htm
공유포유의 가상호스트 설정법
http://www.apache.kr.net
한국 아파치 유저 그룹
http://okjsp.pe.kr/lecture/lec01/vhost02.xml
Tomcat4의 가상호스트 설정
xml-typed document
http://okjsp.pe.kr

'WAS' 카테고리의 다른 글

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

tomcat4 가상호스트 설정

WAS 2006. 2. 21. 14:21

http://okjsp.pe.kr/lecture/lec01/vhost02.html

Tomcat4 가상호스트 설정

kenu
2002-03-19 1:37오전

이 문서는 Tomcat4 의 가상호스트를 사용해서 여러개의 도메인을 사용하도록 하는 방법을 설명합니다. 파일은 Tomcat4 의 conf 디렉토리에 있는 server.xml 파일만을 변경합니다. Tomcat4 의 기본적인 설치는 잘 되어 있다고 가정하고 다른 도메인을 붙이는 법을 설명합니다. 또한 DNS 서버 설정에 관해서는 이 문서에서 설명하지 않겠습니다. 관련강좌는 apache 가상호스트 강좌입니다.
강좌환경
OS:Solaris 2.8
Tomcat: 4.0.2
설치디렉토리: /home/jakarta/kpanet402
		


역시 이 문서도 Tomcat 4.0.2 를 기준으로 작성된 문서입니다. 버전이 틀릴 경우, 패키지에 포함된 문서를 참고하시기 바랍니다. 윈도우 사용자의 경우 경로를 \ 대신 / 로 사용하셔야 합니다. 상당히 혼동되는 부분입니다만 apache나 tomcat 모두 마찬가지 입니다.

conf 디렉토리에 있는 server.xml 파일을 열어서 아래 부분에 추가할 도메인과 그에 따른 부가적인 정보를 입력합니다. 이 때 주의 할 점은 도메인마다 <Host> 태그를 사용해서 설정합니다. 다른 <Host 태그 안에 들어가거나 태그의 열고 닫는 것이 얽혀서도 안됩니다. XML 특성상 태그의 대소문자를 구분하기 때문에 host 나 HOST 를 사용해도 안됩니다.
server.xml
 ...
        <!-- Define properties for each web application.  This is only needed
             if you want to set non-default properties, or have web application
             document roots in places other than the virtual host's appBase
             directory.  -->

        <!-- Tomcat Root Context -->
        <!--
          <Context path="" docBase="ROOT" debug="0"/>
        -->

        <!-- Tomcat Manager Context -->
        <Context path="/manager" docBase="manager"
         debug="0" privileged="true"/>

        <Context path="/fapa"
                  docBase="/home/fapa/public_html"
         debug="0" reloadable="true"/>

      </Host>

      <Host name="ycpa.or.kr" debug="0"
            appBase="/home/vhost/ycpahome" unpackWARs="true">
         <Context path=""
                  docBase="ROOT"
                  reloadable="true"/>
         <Alias>www.ycpa.or.kr</Alias>
      </Host>

      <Host name="pharmsnet.com" >
         <Context path=""
                  docBase="/home/jakarta/pmstemp"
                  reloadable="true"/>
         <Alias>www.pharmsnet.com</Alias>
      </Host>

    </Engine>

 


<Host> 태그 안에 Context 가 들어가고 www 와 같은 2차 도메인들도 Alias 에서 설정할 수 있습니다. 중요한 속성 몇 가지를 설명하자면 Host 태그의 appBase 속성은 웹 어플리케이션(Context)들의 기준 디렉토리가 됩니다. Context 에 있는 docBase 가 상대경로일 경우 기준위치가 된다는 뜻이죠. 예를 들면 ycpa.or.kr 의 ROOT Context의 루트디렉토리는 /home/vhost/ycpahome/ROOT 가 됩니다. unpackWARs 의 속성값이 "true" 일 경우 appBase 에서 정한 디렉토리에 WAR 파일이 있을 경우 Tomcat 이 자동으로 이 웹 어플리케이션의 압축을 풀고 Context를 설정하게 됩니다. 자동배치(auto deployment) 라고도 합니다.

<Context> 태그에서 주의할 점은 해당 도메인의 루트 경로를 지정할 때 path="/" 과 같이 쓰지 않고, path="" 를 사용하는 것입니다. docBase 에는 상대경로, 절대경로 모두 사용할 수 있습니다. reloadable="true" 는 servlet reloading 을 할 것인가 말 것인가인데, 개발중에는 true로 설정하고, 개발 완료되었을 경우 false로 놓는 것이 속도 향상에 도움이 됩니다. <Alias> 태그는 apache의 ServerAlias 와 같은 역할을 합니다. 여러개의 Alias 를 걸어줄 경우, 태그를 나란히 여러 번 사용하면 됩니다.

각 위치마다 테스트용 jsp 파일을 넣은 다음 브라우저를 열어서 설정을 확인해보시기 바랍니다. 속성에 대한 자세한 설명은 아래의 링크에서 찾아보시기 바랍니다.

잡설: 강좌를 써가면서 점점 무미건조해짐을 느낍니다. 그만큼 여유도 없어지고, 실력도 딸리는 것 같다는 생각이 많이 듭니다. 다시 한 번 강조하지만, 적어도 이 시대 프로그래머는 영어는 기본으로 해야합니다. 한글로 된 매뉴얼이 있다면 초보 개발자들이 쉽게 입문할 수 있겠지만, 인터넷에 산재한 문서들을 한글로 바꾸는 것도 한계가 있고, 일한번역기는 쓸만하지만 영한번역기로 영문서를 볼 수도 없기 때문에 자신의 기술을 빨리 진보시키고 싶은 분들은 영어공부를 따로 하시는 것을 추천합니다. free talk은 안되더라도 영문 매뉴얼은 읽어낼 수 있을 정도면 됩니다. 아울러 소망이 있다면 제 강좌들을 영문으로 다시 제작해서 올리고 싶습니다. 국내 제일의 jsp 사이트가 아니라 www.jspinsider.com 같은 세계적인 사이트가 되고 싶으니까요. 이상 Communication 수단을 넓히자는 kenu의 잡담이었습니다.

관련 사이트
http://okjsp.pe.kr/lecture/lec01/vhost01.xml
아파치 가상호스트 설정 강좌
http://jakarta.apache.org/tomcat/tomcat-4.0-doc/config/host.html
Tomcat 4 가상호스트 설정에 대한 매뉴얼
http://jakarta.apache.org/tomcat/tomcat-3.3-doc/tomcat-ug.html
Tomcat 3.3 가상호스트 설정에 대한 매뉴얼(하단)
http://jakarta.apache.org/tomcat/tomcat-3.2-doc/uguide/tomcat_ug.html
Tomcat 3.2 가상호스트 설정에 대한 매뉴얼(하단)
xml-typed document
http://okjsp.pe.kr


3. Tomcat4 가상호스트 설정에 대한 매뉴얼
4. Tomcat 3.3 가상호스트 설정에 대한 매뉴얼
5. Tomcat 3.2 가상호스트 설정에 대한 매뉴얼

'WAS' 카테고리의 다른 글

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