11월, 2010의 게시물 표시

MaxPermSize

MaxPermSize How do you determine a good MaxPermSize? 에서 Matt 가 OOM(OutOfMemory) 에러에 시달리는데, -Xmx 사이즈를 아무리 늘려도 해결이 안됐었나 보다. 설명에 의하면 클래스의 메타 정보는 -Xmx 로 지정되는 메모리 영역이 아닌  MaxPermSize 로 지정되는 메모리 영역에 들어간다고 한다. 헌데, 요즘, Spring, iBatis, Hibernate 같은 리플렉션을 이용해서 클래스 메타 정보를 가져다 쓰는 프레임워크들이 많아지면서, MaxPermSize 를 기본값으로 놓고 사용하면 메모리가 부족해지는 현상이 일어나나 보다(나는 아직 겪어보지 못했다). -XX:MaxPermSize=256m 위와 같이 MaxPermSize를 지정하면 된다. 근데, 댓글들을 읽어보면 256m 은 좀 오바인것 같고, OOM 오류가 발생하면 테스트를 해가면서 세팅해야 할 것 같다. 기본 값은 JVM이 -client 옵션의 경우에는 32m -server 옵션일 경우에는 64m 이라고 한다. 또한, MaxPermSize는 -Xmx 로 지정한 메모리 용량과 별도로 할당된다. 즉, -Xmx가 256m 이고, -XX:MaxPermSize가 256m 이라면, 최대 512m이 할당될 수 있다는 것이다. MaxPermSize and how it relates to the overall heap 에 MaxPermSize에 대한 더 자세한 내용이 있다. JAVA(J2SE 1.4.1) 메모리 영역 구조 도 함 읽어보자. [출처]  http://kwon37xi.egloos.com/2368729 #  by  이종화  |  2006/07/17 21:07  |  Web Server  |  트랙백  |  덧글( 0 ) 트랙백 주소 :  http://ingenuity.egloos.com/tb/2259209

Tomcat5.x Get방식 파라메타 한글 문제 해결

Tomcat5.x Get방식 파라메타 한글 문제 해결 Tomcat(버전 5.5.9) 사용시 Get 방식으로 한글이 포함된 파라미터를 전달하는 경우 제대로 인코딩을 하지 못하는 경우가 발생했다. ( post 일때는 문제 없음) 해결방법은 tomcat 설치폴더의 conf 폴더안에 server.xml 화일을 수정하면 된다.                useBodyEncodingForURI="true" (  이 속성의 역할은 body 에 설정된 setCharacterEncoding 속성값을 uri 에서도 사용하도록 설정하는 것이다. ) tomcat 4.x 버전에서는 저 속성의 기본값이 true 였으나 5.x 로 넘어오면서 기본값이 false 로 바뀌었다고 한다. <Connector port="8080" maxHttpHeaderSize="8192"               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"               enableLookups="false" redirectPort="8443" acceptCount="100"               connectionTimeout="20000" disableUploadTimeout="true"                useBodyEncodingForURI="true " />

Tomcat 5에서의 클러스터링과 로드 밸런싱, Part 2 下편

이미지
Tomcat 5에서의 클러스터링과 로드 밸런싱, Part 2 下편 클러스터 설정 "clusterapp"라고 불리는 예제 웹 어플리케이션은 클러스터 내에서 실행하기 위해 만들어졌다. 세션 복제를 최적화하기 위해 모든 인스턴스는 같은 디렉토리 구조와 컨텐츠를 가진다. 클러스터 내의 톰캣 서버 인스턴스는 세션을 전송하기 위해 IP 멀티캐스트를 사용하기 때문에, 우리는 IP 멀티캐스트가 클러스터가 설정된 머신에 사용가능한지 확인할 필요가 있다. 이것을 검증하기 위해,  Tomcat: The Definitive Guide  책에서 제공하는 MulticastNode 라는 예제 자바 프로그램을 실행하거나 또는 멀티캐스트 서버와 클라이언트 프로그램을 작성하는 법에 관해 자바 소프트 웹 사이트에서 구할 수 있는  예제 튜토리얼 을 참조하라. 클러스터 노드가 시작될 때, 클러스터 내의 다른 멤버들은 새로운 멤버가 클러스터에 추가됐다는 로그 메세지를 서버 콘솔에 보여준다. 비슷하게, 클러스터 노드가 다운될 때, 나머지 멤버들은 클러스터에서 멤버가 제거됐다는 로그 메세지를 콘솔에 보여준다. Figure 4는 클러스터 노드가 클러스터에서 제거되거나 또는 새로운 멤버가 클러스터에 추가됐을 때, 톰캣 콘솔의 로그 메세지를 보여준다. Figure 4. 클러스터에서 멤버가 추가되거나 제거됐을 때의 로그 메세지 톰캣 서버에서 클러스터링과 세션 복제를 사용하기 위해 아래의 절차를 따라라: 세션에 저장할 모든 객체는  java.io.Serializable  인터페이스를 구현해야 한다. server.xml  파일의  Cluster  요소의 주석을 제거하라.  Cluster  요소의  useDirtyFlag 와  replicationMode 는 빈도수와 세션 복제 메카니즘의 최적화를 위해 사용된다. server.xml 파일의  Valve  요소의 주석을 제거함으로써  ReplicationValve 를 활성화시켜라. 만약 세션이 웹 클라이언트에 의해 변경된다면 

Tomcat 5에서의 클러스터링과 로드 밸런싱, Part 2 上편

이미지
Tomcat 5에서의 클러스터링과 로드 밸런싱, Part 2 上편 04/14/2004 번역 허태명 이 글은 톰캣 5 서버에서 클러스터링과 로드 밸런싱에 관한 시리즈의 두번째 파트이다.  파트 1 에서 필자는 확장성과 고가용성을 위한 시스템을 디자인할 때 고려해야할 다양한 요소와 Large-scale J2EE 시스템 디자인의 개괄에 대해 얘기했다. 또한 클러스터링, 로드 밸런싱, 결함 허용, 세션 복제 능력에 대한 톰캣의 지원에 대해서도 논했다. 이번 파트에서 우리는 제시된 클러스터 설정의 아키텍쳐와 클러스터를 배치할 때(다수의 톰캣 서버 인스턴스를 운영함으로써)의 설치와 설정의 세세한 부분에 대해 다룰 것이다. 제시된 클러스터 설정 아래 목록은 제시된 톰캣 클러스터에서 필자가 달성하기 원하는 주 목적들이다: 클러스터는 고도의 확장성이 있어야 한다. 클러스터는 결함 허용을 지원해야 한다. 클러스터는 동적으로 설정가능해야 하며, 그것은 클러스터를 프로그램적(자바 코드의 변경)으로 보다는 선언적(설정 파일의 변경)으로 관리하기 쉬워야 한다는 것을 의미한다. 클러스터는 자동 클러스터 멤버 감지 기능을 제공해야만 한다. 세션 데이터를 위한 메모리 세션 상태 복제 기능을 갖고 있는 Fail-over와 로드 밸런싱 기능 플러그인/설정가능한 로드 밸런싱 정책 클러스터 멤버가 합류하거나 그룹에서 떠날 때 그룹 멤버쉽 공지 기능 멀티캐스트를 통한 메세지 전송의 손실이 없어야 한다. 클러스터링은 웹 어플리케이션과 서버에 잘 연계되어야 한다. 클러스터는 클라이언트와 서버 양쪽에 투명성을 제공해야 한다. 클라이언트 투명성은 클라이언트가 클러스터링된 서비스나 클러스터가 어떻게 설정됐는지 모른다는 의미이다. 클러스터는 각각의 서비스들 보다는 단일한 것으로써 확인되고 접근되어야 한다. 서버 투명성은 서버의 어플리케이션 코드는 그것이 클러스터 내에 있는지 몰라야 한다는 것을 의미한다. 어플리케이션 코드는 다른 클러스터 멤버와 통신할 수 없다. 클러스터링 환경을 설

Database Connection Pooling in Tomcat

from http://sukumarvaddi.wordpress.com/2010/05/28/database-connection-pooling-in-tomcat/ Database Connection Pooling in Tomcat May 28, 2010 Sukumar Vaddi Java 2 Comments     Rate This 1.  Open context.xml file, either in /conf or in META-INF folder of the web application for which you want to enable database connection pooling. If you do not have one in META-INF directory, create one and copy the contents of the context.xml in /conf. 2.  Copy the following and paste with in the element.  I have it for oracle10g database. You can modify it to suit your database. The following configuration takes care of resource leaks when you forget closing connections or result sets or so. Connection Pooling will not work for databases with out password. “Jdbc/myDB” auth= “Container” type= “javax.sql.DataSource” driverClassName= “oracle.jdbc.driver.OracleDriver” url= “ your database Connection URL  “ username= “ database user name “ password= “ database password “  maxActive= “20″  maxIdle= “10