TmaxSoft 기술문서

Similar documents
Webtob( 멀티도메인 ) SSL 인증서갱신설치가이드 본문서는주식회사한국기업보안에서 SSL 보안서버인증서설치를위해작성된문서로 주식회사한국기업보안의동의없이무단으로사용하실수없습니다. [ 고객센터 ] 한국기업보안. 유서트기술팀 Copyright 201

.

WebtoB.hwp

untitled

ORANGE FOR ORACLE V4.0 INSTALLATION GUIDE (Online Upgrade) ORANGE CONFIGURATION ADMIN O

<C0CCBCBCBFB52DC1A4B4EBBFF82DBCAEBBE7B3EDB9AE2D D382E687770>

Interstage4 설치가이드

목차 BUG offline replicator 에서유효하지않은로그를읽을경우비정상종료할수있다... 3 BUG 각 partition 이서로다른 tablespace 를가지고, column type 이 CLOB 이며, 해당 table 을 truncate

슬라이드 1

SSL 접속테스트 본문서에서 WebtoB 가설치된디렉토리는 [WEBTOBDIR] 로표기하겠습니다.. 윈도우계열과리눅스 / 유닉스계열모두명령은동일하므로윈도우를기준으로설명하도록하겠습니다. 1. WebtoB 설정 1.1 Test 용인증서생성 SSL 접속테스트를위해 Webto

1) 인증서만들기 ssl]# cat > // 설명 : 발급받은인증서 / 개인키파일을한파일로저장합니다. ( 저장방법 : cat [ 개인키

Interstage5 SOAP서비스 설정 가이드

1) 인증서만들기 ssl]# cat > // 설명 : 발급받은인증서 / 개인키파일을한파일로저장합니다. ( 저장방법 : cat [ 개인키

Remote UI Guide

[Brochure] KOR_TunA

초기설정 WebtoB Web Server 에서인증서를사용하기위해 CSR 을생성하는방법입니다. 1. 초기설정 - CSR 을생성하기전에다음의몇가지사항을필히확인합니다. 부팅후 Path 나환경변수를일일이설정하지않게초기설정파일을사용하여로그인시자동으로실행되도록하고있습니다. 그러나

No Slide Title

0. 들어가기 전

PowerPoint 프레젠테이션

API STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Docum

PowerPoint 프레젠테이션

Apache2 + Tomcat 5 + JK2 를 사용한 로드밸런싱과 세션 복제 클러스터링 사이트 구축

본교재는수업용으로제작된게시물입니다. 영리목적으로사용할경우저작권법제 30 조항에의거법적처벌을받을수있습니다. [ 실습 ] 스위치장비초기화 1. NVRAM 에저장되어있는 'startup-config' 파일이있다면, 삭제를실시한다. SWx>enable SWx#erase sta

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

단계

1. Windows 설치 (Client 설치 ) 원하는위치에다운받은발송클라이언트압축파일을해제합니다. Step 2. /conf/config.xml 파일수정 conf 폴더에서 config.xml 파일을텍스트에디터를이용하여 Open 합니다. config.xml 파일에서, 아

단계

SQL Developer Connect to TimesTen 유니원아이앤씨 DB 기술지원팀 2010 년 07 월 28 일 문서정보 프로젝트명 SQL Developer Connect to TimesTen 서브시스템명 버전 1.0 문서명 작성일 작성자

1217 WebTrafMon II

thesis-shk

chapter1,2.doc

Solaris Express Developer Edition

Microsoft Word - 02_WebtoB_Admin_Guide_41.doc

Intro to Servlet, EJB, JSP, WS

개요오라클과티베로에서 JDBC 를통해접속한세션을구분할수있도록 JDBC 접속시 ConnectionProperties 를통해구분자를넣어줄수있다. 하나의 Node 에다수의 WAS 가있을경우 DB 에서 Session Kill 등의동작수행시원하는 Session 을선택할수있다.

.

(SW3704) Gingerbread Source Build & Working Guide

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

Orcad Capture 9.x

PowerPoint 프레젠테이션

J2EE & Web Services iSeminar

Sena Device Server Serial/IP TM Version

Chapter 1

Secure Programming Lecture1 : Introduction

4S 1차년도 평가 발표자료

BEA_WebLogic.hwp

소개 TeraStation 을 구입해 주셔서 감사합니다! 이 사용 설명서는 TeraStation 구성 정보를 제공합니다. 제품은 계속 업데이트되므로, 이 설명서의 이미지 및 텍스트는 사용자가 보유 중인 TeraStation 에 표시 된 이미지 및 텍스트와 약간 다를 수

1. efolder 시스템구성 A. DB B. apache - mod-perl - PHP C. SphinxSearch ( 검색서비스 ) D. File Storage 2. efolder 설치순서 A. DB (MySQL) B. efolder Service - efolder

본문서는 초급자들을 대상으로 최대한 쉽게 작성하였습니다. 본문서에서는 설치방법만 기술했으며 자세한 설정방법은 검색을 통하시기 바랍니다. 1. 설치개요 워드프레스는 블로그 형태의 홈페이지를 빠르게 만들수 있게 해 주는 프로그램입니다. 다양한 기능을 하는 플러그인과 디자인

PCServerMgmt7

Spring Boot/JDBC JdbcTemplate/CRUD 예제

untitled

MySQL-Ch10

6주차.key

Oracle Database 10g: Self-Managing Database DB TSC

Eclipse 와 Firefox 를이용한 Javascript 개발 발표자 : 문경대 11 년 10 월 26 일수요일

Tmax

Chap7.PDF

Mango220 Android How to compile and Transfer image to Target


Windows 8에서 BioStar 1 설치하기

[Brochure] KOR_LENA WAS_

게시판 스팸 실시간 차단 시스템

untitled

untitled

LXR 설치 및 사용법.doc

The Self-Managing Database : Automatic Health Monitoring and Alerting

SRC PLUS 제어기 MANUAL

The Pocket Guide to TCP/IP Sockets: C Version

Analytics > Log & Crash Search > Unity ios SDK [Deprecated] Log & Crash Unity ios SDK. TOAST SDK. Log & Crash Unity SDK Log & Crash Search. Log & Cras

bn2019_2

4. 스위치재부팅을실시한다. ( 만약, Save 질문이나오면 'no' 를실시한다.) SWx#reload System configuration has been modified. Save? [yes/no]: no Proceed with reload? [confirm] (

Network seminar.key


교육2 ? 그림

untitled

SPECweb Install

Intra_DW_Ch4.PDF

Oracle hacking 작성자 : 임동현 작성일 2008 년 10 월 11 일 ~ 2008 년 10 월 19 일 신규작성 작성내용

SMB_ICMP_UDP(huichang).PDF

vm-웨어-앞부속

TTA Journal No.157_서체변경.indd

Microsoft Word - src.doc

< FC8A8C6E4C0CCC1F620B0B3B9DF20BAB8BEC8B0A1C0CCB5E5C3D6C1BE28C0FAC0DBB1C7BBE8C1A6292E687770>

Secure Programming Lecture1 : Introduction

Sena Technologies, Inc. HelloDevice Super 1.1.0

Microsoft Word - Jeus_System_Architecture.doc

PowerPoint Template

휠세미나3 ver0.4

리눅스설치가이드 3. 3Rabbitz Book 을리눅스에서설치하기위한절차는다음과같습니다. 설치에대한예시는우분투서버 기준으로진행됩니다. 1. Java Development Kit (JDK) 또는 Java Runtime Environment (JRE) 를설치합니다. 2.

PWR PWR HDD HDD USB USB Quick Network Setup Guide xdsl/cable Modem PC DVR 1~3 1.. DVR DVR IP xdsl Cable xdsl Cable PC PC DDNS (

RHEV 2.2 인증서 만료 확인 및 갱신

혼자서일을다하는 JSP. 이젠일을 Servlet 과나눠서한다. JSP와서블릿의표현적인차이 - JSP는 <html> 내에서자바를사용할수있는수단을제공한다. - 서블릿은자바내에서 <html> 을작성할수있는수단을제공한다. - JSP나서블릿으로만웹페이지를작성하면자바와다양한코드가

Voice Portal using Oracle 9i AS Wireless

Windows Server 2012

vm-웨어-01장

슬라이드 1

Apache install guide

Cloud Friendly System Architecture

Transcription:

JEUS, WebtoB 운영지침 2014. 06. 30 2014 TmaxSoft Co., Ltd. All Rights Reserved.

Ⅰ Ⅱ JEUS WebtoB Ⅲ JEUS WebtoB 연동

Ⅰ JEUS 1. 개요및기본환경 2. JEUS 운영및관리지침 3. DB연동 4. Session Server 5. Application 추가 6. 로그및장애처리

1 개요및기본환경

소프트웨어개요 JEUS (Java Enterprise User Solution) JEUS (Java Enterprise User Solution) 는인터넷으로각광받고있는 Java 를기반으로한웹솔루션으로, 웹환경에서어플리케이션을운용하는데필요한각종서비스들을제공해주는웹어플리케이션서버입니다. JEUS 는어플리케이션을개발하고실행할수있는플랫폼역할을하면서, 트랜잭션관리, 세션유지, 부하분산등다양한기능을제공할뿐만아니라, 계층화된구조로유연성과기능확장성이우수해비즈니스로직을손쉽고효과적으로구현할수있게합니다. JEUS 소프트웨어구성도 5

JEUS process Manager 와 Container 가 java process 로실행됩니다. Java process 수 = Manager(1 개 ) + Container(n 개 ) JEUS Manager 하나의 JEUS 안에서최상위관리계층, JEUS WAS 의하위시스템과컴포넌트를광범위하게관리하기위하여작성된어플리케이션 백업과장애대책을위해서자신의 node 또는 clustering 에포함된다른 JEUS Manager 와항상통신할수있도록대기 JEUS Manager (1 개 ) WS engine Servlet engine JMS engine EJB engine Web Container(n 개 ) JEUS 의컨트롤은 JEUS Manager 를통해서이루어지며, jeusadmin tool 이나웹관리자를이용 주요컴포넌트 - Node - Naming Server - Security Manager - Resource > ja (jeusadmin 실행스크립트 ) han>pidlist node or container : han, pid : 1804 node or container : han_container1, pid : 2192 * Worker thread 개수 : 100 이하 100 개이상운영시 context switching 부하가예상되므로, 그이상필요시동일업무를제공하는 Container 를추가구성해 thread 를분배하도록권고 * Container 개수 : CPU(core) 개수 * 0.5 ~ CPU(core) 개수 * 1.5 6

디렉토리구조 (1) bin 디렉토리 JEUS 의실행, 모니터링등 JEUS 의운영에관련된스크립트파일이존재합니다. Windows 의경우에는 batch 파일로있으며, UNIX 의경우에는 shell script 파일로되어있습니다. config 디렉토리 서버설정이저장되는하위디렉터리를가지고있습니다. <nodename> 이름이 <nodename> 인설정파일이위치합니다. <nodename> 은 JEUS 가설치된서버의이름 ( 일반적으로 hostname) 이다. 만약현재 JEUS 가백업노드로작동되도록설정되었다면백업하는노드의 <nodename> 디렉터리가존재해야합니다. JEUS Manager 의설정파일은 JEUSMain.xml 이며, 이디렉터리에존재합니다. <nodename> 이 jeus 일때 "c:\jeus\config\jeus 가됩니다. lib 디렉토리 이디렉터리는운영과관련된 library 들이들어있습니다. 아래에는다음과같이 3 개의디렉터리가있습니다. - application : 개발시필요한 library 들을넣어두는디렉터리입니다. jar/zip 형태의파일을넣어도되고, package 형태로풀어놓아도됩니다. - datasource: 이디렉터리는 JDBC 나혹은각종 connector 를위한 library 를넣어두는디렉토리입니다. jar/zip 형태의파일만인식합니다. - system : 이디렉터리는 JEUS 의엔진과관련된 library 들이들어있습니다. 위의디렉터리들중개발혹은운영시필요한라이브러리들은 application/datasource 에넣어두면됩니다. System 의경우는 JEUS 에서사용하는곳이므로되도록이면다른파일들을넣지않는것이좋습니다. license 디렉토리 라이선스가들어가는디렉터리입니다. 라이선스파일은 license 입니다. 7

디렉토리구조 (2) log 디렉토리 JEUS 운영시남게되는각종로그파일이쌓이게되는디렉터리입니다. JEUS 운영환경의설정에따라내부에는디렉터리나파일들이 naming rule 에따라만들어지게됩니다. samples 디렉토리 각종예제프로그램들이목록에따라들어가있는디렉터리입니다. webhome 디렉토리 최초설치시각종샘플과같은각종 application 들이들어가있는디렉터리입니다. 하위디렉터리는다음과같은것이있습니다. - admin_home: browser 를이용해 JEUS 를제어하고자할때필요한프로그램들이들어있으며이는 JEUS 에서사용하는디렉터리이므로임의로변경하지않는것이좋습니다. - deploy_home: JEUS 설정파일에배포설정을하지않아도 deploy_home 에 J2EE 모듈이존재하면 JEUS 기동시자동배포됩니다. - app_home: JEUS 설정후어떠한설정도하지않았다면 J2EE Application 의기본디렉토리가됩니다. J2EE Application 의배포설정은 JEUSMain.xml 에서수행합니다. workspace 디렉토리 JEUS 가운영시내부적으로사용하는임시디렉터리입니다. 8

JEUS 환경구성파일 (1) JEUS 환경구성파일 JEUS 에는시스템및성능에큰영향을미치는환경파일이두개가있습니다. JEUS 의전체적인구성을정의하는 JEUSMain.xml, 그리고서블릿엔진의환경구성을정의하는 WEBMain.xml 이그것입니다. JEUSMain.xml 의위치는 $JEUS_HOME/config/`hostname`/ 에존재합니다. WEBMain.xml 의위치는 $JEUS_HOME/config/`hostname`/`hostname_servlet_engine/ 에존재합니다. JEUSMain.xml 에서설정가능한주요항목 엔진컨테이너설정 시스템로그설정 트랜잭션매니저설정 Database Resource 설정 J2EE Application 배포설정 세션서버설정 WEBMain.xml 에서설정가능한주요항목 컨텍스트그룹설정 Session TimeOut 설정및 Session 라우팅설정 Listener 설정 (Http Listener, WebtoBListener, TCP Listener 등 ) Access Log, Error Log, User Log 설정 인코딩설정 9

JEUS 환경구성파일 (2) Context 배포시사용되는 Deploy Descriptor jeus-web-dd.xml JEUS 에서일반적으로많이사용하는엔진은 servletengine (JSP, Servlet 서비스제공 ) 입니다. Servlet, JSP 를 JEUS 에배포하기위해서는 JEUSMain.xml 에 J2EE Application 배포설정을해야하며, 추가적으로 Context-Document-Root/WEB-INF/ 에 jeus-web-dd.xml 을설정해야합니다. jeus-web-dd.xml 에서설정가능한주요항목 Context-Document-Root/WEB-INF/classes 에배포된 class 들에대해 Hot-Deploy 사용여부 Servlet 들이컴파일되고실행될때참조해야할클래스패스설정 JSP 사용여부및 JSP 엔진셋팅 정적 contents file 의캐싱설정 10

2 JEUS 운영및관리지침

JEUS engine start/stop (one-step) > jboot ************************************************************** - JEUS Home : C:\TmaxSoft\JEUS6.0 - JEUS Base Port : 9736 - Added Java Option : - Java Vendor : Sun ************************************************************** C:\>"C:\Program Files\Java\jdk1.6.0_33\bin\java" -server -Xmx512m - Xbootclasspath/p:"D:\JEUS\JEUS6008\lib\system\extension.jar" -classpath "C:\TmaxSoft\JEUS6.0\lib\system\bootstrap.jar" - Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Djeus.jvm.version=hotspot - Djeus.home="C:\TmaxSoft\JEUS6.0" -Djeus.server.containerCheckAlive=false -Djeus.log.home="C:\TmaxSoft\JEUS6.0\logs" - Djeus.server.maxdowntime=120000 -Djava.naming.factory.initial=jeus.jndi.JNSContextFactory - Djava.naming.factory.url.pkgs=jeus.jndi.jns.url -Djava.library.path="C:\TmaxSoft\JEUS6.0\lib\system" -Djeus.baseport=9736 - Djava.endorsed.dirs="C:\TmaxSoft\JEUS6.0\lib\endorsed" -Djava.util.logging.manager=jeus.util.logging.JeusLogManager - Djava.util.logging.config.file="C:\TmaxSoft\JEUS6.0\bin\logging.properties" - Djeus.properties.replicate=jeus,java.util.logging,sun.rmi.dgc -Djeus.tool.webadmin.locale.language=ko -Djava.net.preferIPv4Stack=true jeus.server.jeusbootstrapper -Uadministrator -Pjeusadmin ================ JEUS LICENSE INFORMATION ================ === EDITION: Enterprise (Trial License) === NOTICE: This license restricts the number of allowed clients. === Max. Number of Clients: 5 ========================================================== [2014.02.17 13:48:21][0][b288] [han-1] [MGR-0000] JEUS Server is starting - JEUS 6.0 (Fix#8) (6.0.0.8-b288) [2014.02.17 13:48:21][0][b288] [han-1] [MGR-0001] java.specification.version=[1.6], java.runtime.version=[1.6.0_33-b03], vendor=[sun Microsystems Inc.] [2014.02.17 13:48:47][0][b288] [han-1] [MGR-0242] JeusServer one-step booting successful : [apple_container1, apple_container2] > jdown han jeusexit successful 12

Windows service 등록및해제 JEUS Usage: svcinstall <.ini file> <ID> <Password> [option] C:\TmaxSoft\JEUS6.0\bin>svcinstall jeus.ini administrator jeusadmin JEUS Windows service installer Ver. 3.1.1 Copyright (c) 2006, TmaxSoft Co., Ltd. Boot script: -Xrs -Xbootclasspath/p:C:\TmaxSoft\JEUS6.0\lib\system\extension.jar; C:\TmaxSoft\JEUS6.0\lib\system\classloader.jar -classpath "C:\TmaxSoft\JEUS6.0\lib\system\bootstrap.jar" - Djeus.boot.path=-Xrs -Djeus.jvm.version=hotspot "-Djeus.home=C:\TmaxSoft\JEUS6.0" Down script: -classpath C:\TmaxSoft\JEUS6.0\lib\system\bootstrap.jar -Djeus.home=C:\TmaxSoft\JEUS6.0 "- Djava.library.path=C:\TmaxSoft\JEUS6.0\lib\system" -Djeus.baseport=9736 JEUS Service[jeusservice-jeus] installed Usage: svcremove [service_name -list] C:\TmaxSoft\JEUS6.0\bin>svcremove jeus JEUS Windows service remover Ver. 3.1.1 Copyright (c) 2006, TmaxSoft Co., Ltd. Removing windows service 'jeus'... Successfully done. 13

JEUS 관리툴 jeusadmin JEUS 시스템관리툴 명령어설명사용법 conlist 컨테이너리스트와상태조회하기 conlist [node_name] setcon startcon/ downcon ti 컨테이너선택기능 (* JEUS6 fix2 부터사용가능 ) 컨테이너기동 / 다운 컨테이너의각종리스너및관련쓰레드풀의통계자료조회하기 setcon [index of engine container] (* index 는 conlist 의결과에서확인 ) startcon [container_name] downcon [container_name] (* container_name 은 conlist 의결과에서확인 ) ti [-con container-name] [-li listener-id] [-r] [-a] [-f thread-state] [-i sec] [-k number] [-l sec] strace 각쓰레드의 stack trace 조회하기 (* JEUS6 fix6 부터사용가능 ) strace [-con container_name] tid (* tid 는 ti 의결과에서확인 ) st dsinfo dsconinfo 웹컨테이너의 JVM 에서사용하는메모리정보, thread pool 의상태, 컨텍스트에대한요청수및처리시간 설정된데이터소스들의정보를보기위한명령 JDBC 커넥션조회하기 stat [-con container-name] [-m] [-t] [-r] [-s] [-w] [-i sec] [-k number] [-l sec] dsinfo [-con container_name] dsconinfo [-con container_name] [-i interval] [-k repeat_number] [-id the connection identifier of a connection] [-t] export_name (* JEUS6 fix5 부터 -t 옵션사용가능 ) 14

jeusadmin 콘솔사용 (1) jeusadmin 콘솔의용도 jeusadmin 콘솔툴을이용하여 JEUS 컨테이너기동 / 종료, 엔진리스트확인등 JEUS 엔진상태를조회및제어합니다. jeusadmin 콘솔의실행 jeusadmin `hostname` -Uadministrator P< 설치시입력한 JEUS 관리자비밀번호 > C:\>jeusadmin han -Uadministrator -Pjeusadmin JEUS 6.0 (Fix#8) administration tool han> jeusadmin conlist 명령 컨테이너리스트조회. 인덱스, 컨테이너명, 상태확인 han>conlist Engine container list of the node apple [1] han_container1 : READY [2] han_container2 : READY 15

jeusadmin 콘솔사용 (1) jeusadmin downcon 명령 지정된컨테이너를종료시키는데사용 han>downcon han_container1 Succeeded to shutdown han_container1. han> jeusadmin startcon 명령 지정된컨테이너를기동시키는데사용 han>downcon han_container1 Succeeded to start han_container1. han> 16

jeusadmin 콘솔사용 (3) jeusadmin ti 명령 요청을처리하는서블릿쓰레드와 EJB RMI 쓰레드정보조회 han>ti Thread information for [han_container1] container ============================================================ servlet threads for 'http1' listener ------------------------------------------------------------ tid name state elapsed uri ------------------------------------------------------------ 51 http1-w0 waiting 67939 52 http1-w1 active 2917 /loadtest/sleep.jsp 53 http1-w2 waiting 67939 54 http1-w3 waiting 67939 55 http1-w4 waiting 67939 ------------------------------------------------------------ elsapsed: elapsed time (ms) ============================================================ ============================================================= ------------------------------------------------------------- total active idle blocked recon ------------------------------------------------------------- num. of threads 5 1 4 0 0 ------------------------------------------------------------- total = active + idle, recon: reconnecting ============================================================= 17

jeusadmin 콘솔사용 (3) jeusadmin strace 명령 쓰레드의 stack trace 확인 han>ti -fa Thread information for [han_container1] container =========================================================== servlet threads for 'http1' listener ----------------------------------------------------------- tid name state elapsed uri ----------------------------------------------------------- 52 http1-w1 active 745256 /loadtest/sleep.jsp -----------------------------------------------------------... han>strace -con han_container1 52 servlet thread [tid=52] Stack trace at java.lang.thread.sleep(native Method) at jeus_jspwork._600_sleep_5fjsp._jspservice(_600_sleep_5fjsp.java:56) at jeus.servlet.jsp2.runtime.httpjspbase.service(httpjspbase.java:106) at javax.servlet.http.httpservlet.service(httpservlet.java:818) at jeus.servlet.jsp.jspservletwrapper.executeservlet(jspservletwrapper.java:171) at jeus.servlet.servlets.jspservlet.execute(jspservlet.java:366) at jeus.servlet.engine.httprequestprocessor.run(httprequestprocessor.java:278) han> 1. ti 명령을이용해지연되고있는쓰레드를조회 (-fa 옵션 ) 2. ti 명령으로조회한 tid를 strace 명령의인자로입력합니다. 18

jeusadmin 콘솔사용 (4) jeusadmin st -m 명령 현재 Container 의 JVM Memory 사용현황 han>st -m < ContainerName : han_container1 > < memory information > VM Total Memory = 117571584 Bytes VM Free Memory = 74810408 Bytes VM Total Memory VM Free Memory 해당컨테이너 JVM 의 Total heap size 해당컨테이너 JVM 의 free heap size jeusadmin st -r 명령 Context 별로들어온요청수와평균처리시간 han>st -r < ContainerName : han_container1 > < request information(mygroup/loadtest) > - total requests : 1 - total processing time : 1002653 ms - average processing time : 1002653 ms jeusadmin st -s 명령 현재유지하고있는세션객체의수 han>st -s < ContainerName : han_container1 > < (MyGroup,loadtest_loadtest) session information > - number of local sessions : 1 - session timeout(second) : 1800 Total requests Average processing time number of local sessions session timeout(second) 해당 context 에서처리한요청수 평균처리시간 해당컨텍스트그룹에서가지고있는세션의수 현재세션타임아웃값 ( 초 ) 19

jeusadmin 콘솔사용 (6) jeusadmin dsinfo 명령 지정한엔진컨테이너내에등록된모든 JDBC 데이터소스커넥션풀에대한정보를출력 han>dsinfo ============================================= Connection pool information for engine container 'han_container1' ---------------------------------------------------------------------- id jndi min max act idle disp tot wait work ---------------------------------------------------------------------- ErpDS ErpDS 10 30 1 9 0 10 true false ---------------------------------------------------------------------- disp : disposable connection, tot(total) = act(active) + idle + disp ============================================= id jndi min max act idle disp tot wait work datasource id datasource의 jndi name connection pool 생성시최초 connection 수 connection pool의최대 connection 수현재사용중인 connection 수현재사용가능한 connection 수 disposable connection으로임시로만들어진 connection을의미현재생성된총 connection 수 min~max 설정범위내에서만 connection을사용할것인지를설정한상태현재 connection pool이생성되어사용되고있는지를나타냄 20

jeusadmin 콘솔사용 (6) jeusadmin dsconinfo 명령 JDBC 데이터소스커넥션풀에대한상세정보를출력 han>conlist Engine container list of the node han [1] han_container1 : READY [2] han_container2 : READY han>setcon 1 han_container1 selected han_container1>dsconinfo -t ErpDS =============================================== Connection information list for the engine container[han_container1] ------------------------------------------------------------------------------------- id state state-time(s) use-count type thread name ------------------------------------------------------------------------------------- ErpDS-1 active 170.429 3 pooled http1-w4 [container1-55] ErpDS-2 idle 43.271 3 pooled ErpDS-3 idle 53.224 3 pooled ------------------------------------------------------------------------------------- =============================================== han_container1> han_container1>ti -fa id Thread information for [han_container1] container =============================================== state servlet threads for 'http1' listener ------------------------------------------------------------ state-time(s) tid name state elapsed uri use-count ------------------------------------------------------------ 55 http1-w4 active 176657 /loadtest/dbtest.jsp ------------------------------------------------------------... type thread name connection id connection 의상태 (active/idle) state 지속한시간 connection 사용된횟수 connection 의 type 해당 connection 을사용하고있는 thread name (* -t 옵션을사용할때만표시 ) 21

jeusadmin 콘솔사용 (6) jeusadmin 명령어반복실행 jeusadmin 내의명령어를주기적으로실행하여모니터링에활용합니다. - <command> -i 주기 ( 초 ) k 회수 - 예 ) st -m -i 2 -k 5 : st -m 명령어를 2 초간격으로 5 번수행 han>st -m -i 2 -k 5 total repeats: 5, repeat interval: 2 s [Mon Feb 17 16:57:04 KST 2014] trials = 1 < ContainerName : han_container1 > < memory information > VM Total Memory = 118030336 Bytes VM Free Memory = 92097216 Bytes [Mon Feb 17 16:57:06 KST 2014] trials = 2 < ContainerName : han_container1 > < memory information > VM Total Memory = 118030336 Bytes VM Free Memory = 92097216 Bytes [Mon Feb 17 16:57:08 KST 2014] trials = 3 < ContainerName : han_container1 > < memory information > VM Total Memory = 118030336 Bytes VM Free Memory = 92097216 Bytes 22

JEUS port 설정 (1) JEUS 에서사용하는포트 Base port JEUS Manager 의 base port Default 9736, 변경시아래환경파일을수정 기능별 port Base port 를기준으로계산 ( 다음페이지의상세설명참고 ) Container port Base port + 15 + Container ID * 10 bin/jeus.properties rem set up JEUS_BASEPORT. SET JEUS_BASEPORT=9736 config/vhost.xml <virtual-hosts xmlns="http://www.tmaxsoft.com/xml/ns/jeus"> <enable>true</enable> <host> <name>han:9736</name> <virtual-name>han</virtual-name> </host> Node name과 base port를한쌍의 identity로사용 <host> <name>han:2100</name> <virtual-name>example</virtual-name> </host> </virtual-hosts> Node name 처럼사용 - config directory 의 node directory (config/example/) - node 내의 engine container 나 engine (config/example/example_servlet_engine1/) - jeusadmin 등 node name 을사용하는모든곳에서 virtual node name 을사용하면해당하는 JEUS Manager 를지칭하게됨 23

JEUS port 설정 (2) Port name Port number Default port 목적 /usage BASEPORT BASEPORT 9736 JEUS Manager가 JNDI 서비스및운영을위해필요한기본서비스포트 COS Naming Server Port JEUS_BASE4ORT + 4 9740 COS Naming 서비스를위해사용하는포트 WebAdmin Port JEUS_BASEPORT + 8 9744 엔진컨테이너 BASEPORT ORB Port ORB SSL Port ORB SSL Mutual Authorization Port BASEPORT + 15 + ( 엔진컨테이너 ID * 10) 엔진컨테이너 BASEPORT + 1 엔진컨테이너 BASEPORT + 2 엔진컨테이너 BASEPORT + 3 HTTP 기반의관리툴인 Web Admin 에서사용하는 HTTP listener 포트 URL [ http://ipaddress:9744/webadmin ] 엔진컨테이너별기본서비스포트 IIOP IIOP SSL 포트 IIOP 상호인증포트 HTTP Port 8088 8088 EJB RMI Port JMS 엔진 Port 엔진컨테이너 BASEPORT + 7 or 엔진컨테이너 BASEPORT 9741 or 엔진컨테이너 BASEPORT EJB 를접근하기위한 RMI 포트. use-baseport 설정이있는경우 Container BASEPORT 를사용 JMS 서비스포트. oneport 설정시 Container BASEPORT 를사용 24

JEUS Logging 설정 (1) Ref: JEUS Server Guide JEUSMain.xml <node> <system-logging> <name>jeus</name> <level>fine</level> <handler> <console-handler> <name>consolehandler</name> <level>info</level> <encoding>euc-kr</encoding> </console-handler> <file-handler> <name>filehandler</name> <level>fine</level> <valid-day>1</valid-day> <buffer-size>8192</buffer-size> </file-handler> </handler> </system-logging> <engine-container> <system-logging> </engine-container> </node> JEUS manager JVM 의 jeus logger Console handler 화면으로 log message 를출력하는 handler File handler 파일로 log message 를출력하는 handler File 생성단위 <valid-day> : 날짜단위로 file 을생성 <valid-hour> : 시간단위로 file 을생성 engine-container JVM 의 jeus logger <level> 에설정할수있는값 (logging API 의 level) SEVERE, WARNING, INFO, CONFIG, FINE, FINER, FINEST 기본설정은 INFO 25

JEUS Logging 설정 (2) Ref: JEUS Web Container Guide Web Container Logging web-container 또는 context-group 의하위요소로존재 access-log 및 user-log 는 logging 설정의하위요소이며 context-group 단위로설정가능 WEBMain.xml <web-container> <logging> <context-group> <logging> <access-log> <enable>true</enable> <format> [%{yyyy.mm.dd HH:mm:ss}t] %a %m %U%q" %s %Dms </format> <handler> <file-handler> <name>filehandler</name> <valid-hour>1</valid-hour> </file-handler> </handler> </access-log> <user-log> </logging> </context-group> web-container 내의모든 context-group 에공통으로적용 해당 context-group 에만적용되며 web-container 의 logging 설정보다우선한다. Access log Web Container 에요청된 request 및그처리결과에대한 log access-log 에만사용되는설정 <enable> : access-log 기록을원치않을경우 false 설정 <format> : Log format 을지정, 설정생략시기본 format 으로기록 File handler 파일로 log message 를출력하는 handler File 생성단위 <valid-day> : 날짜단위로 file 을생성 <valid-hour> : 시간단위로 file 을생성 User log javax.servlet.servletcontext.log(string msg) 또는 javx.servlet.servletcontext.log(string msg, Throwable t) 등의 API 를사용하여 Servlet application 내에서생성되는메시지를기록하는 log 26

Character-set encoding WEBMain.xml <context-group> <group-name>mygroup</group-name> <encoding> <request-encoding> <forced>euc-kr</forced> <default>euc-kr</default> </request-encoding> <postdata-encoding> <forced>euc-kr</forced> <default>euc-kr</default> </postdata-encoding> <response-encoding> <forced>euc-kr</forced> <default>euc-kr</default> </response-encoding> </encoding> WEBMain.xml 에설정할수있는인코딩값 ISO-8859-1 (Web Container 에서기본으로사용, ISO Latin) UTF-8 (UCS 변환포맷 ) EUC-KR ( 한국어 ) EUC-JP ( 일본어 ) Request Encoding HTTP 요청헤더를위한인코딩 - HTTP 헤더 byte 배열 (HTTP URL, 질의문과쿠키포함 ) 을 Web Container 의 java.lang.string 객체로변환할때적용된다. 인코딩우선순위 1. WEBMain.xml 에정의된 "forced" 인코딩 2. 요청의 "Accept-Language" HTTP 요청필드 3. WEBMain.xml 에정의된 "default" 인코딩 4. 위의어떤것도적용되지않으면기본적으로 "ISO-8859-1" 로설정 Postdata encoding HTTP 요청의 postdata 블록을위한인코딩 Ref: JEUS Web Container Guide 인코딩우선순위 1. WEBMain.xml 에정의된 "forced" 인코딩 2. HTTP body 의 "Content-Type" 헤더필드에정의된인코딩 3. WEBMain.xml 에정의된 "default" 인코딩 4. 위의어떤것도적용되지않으면기본적으로 "ISO-8859-1" 로설정 Response encoding Web Container 로부터받은전체응답 HTTP 메시지에적용되는인코딩 - PrintWriter.println() 을 byte 배열로변환할때나 HTTP 헤더의 "Content-Type:text/html;charset=XXX" 부분의 "XXX" 값을설정하고 Web Container 의응답에어떤인코딩을사용할지결정한다. 인코딩우선순위 1. WEBMain.xml 에정의된 "forced" 인코딩 2. Servlet 에서의세팅 (Servlet 에서는 response.setcontenttype ("text/html;charset=xxx"), JSP 에서는 <%@ page contenttype="text/html;charset=xxx"%> 로프로그래머가설정한 XXX 값의인코딩 ) 3. WEBMain.xml 에정의된 "default" 인코딩 4. 위의어떤것도적용되지않으면기본적으로 "ISO-8859-1" 로설정 27

JEUS error page 설정 Option Ref: JEUS Web Container Guide han_servlet_engine1/webcommon.xml or WEB-INF/web.xml <web-app> <error-page> <error-code>403</error-code> <location>/error/403.jsp</location> </error-page> <error-page> <error-code>404</error-code> <location>/error/404.jsp</location> </error-page> </web-app> HTTP Status Code Engine 별로설정하거나 Application 별로설정 Context-path 이하의상대경로 403.jsp <%@ page contenttype="text/html;charset=euc_kr" %> <% response.setstatus(200); %> <html> <head> <title>403 Forbidden</title> </head> <body> 403 Forbidden<br> 요청하신페이지에대한접근을거부합니다. </body> </html> 403 Forbidden 에러가발생했지만에러메시지를응답하는대신안내페이지를제공하기위해 200 OK 코드를설정합니다. * HTTP Status Code 에대한설명은 WebtoB error page 설정 참고 28

3 DB 연동

JEUS JDBC 연동 (1) JEUS JDBC 연동방법 1. $JEUS_HOME/lib/datasource/ 디렉토리안에 JDBC 드라이버클래스라이브러리가있는지먼저확인합니다. JDBC 드라이버가없을경우 $ORACLE_HOME/jdbc/lib/ 의드라이버를복사합니다. 2. webadmin 을이용한 JDBC 연동 - http://<jeus 서버 IP>:9744/webadmin 접속 - JEUS 매니저리소스 -> JDBC 클릭 30

JEUS JDBC 연동 (2) - 새 JDBC 데이터소스생성클릭후생성할데이터소스를선택 31

JEUS JDBC 연동 (3) - JDBC 속성을작성해줍니다. 32

JEUS JDBC 연동 (4) 속성 - vendor: DB 벤더의이름 ( oracle, mssql, db2, sybase, tibero, others ). 현재사용하고있는 DB 의벤더이름을사용하고, 나열되지않은 DBMS 는 others 로설정하도록합니다. - export-name: JNDI 에바인딩될이름. 이이름으로데이터소스객체가바인드됩니다. - data-source-class-name : JDBC 드라이버별데이터소스클래스이름. - database-name: DB 의이름. Oracle 의경우 SID 를넣어줍니다. - password: 사용자의암호. password 를암호화해서사용할경우 {algorithm}ciphertext 형식으로씁니다. (ex. {DES}FQrLbQ/D801DL28rw==) 허용되는알고리즘정보는 - user: 사용자이름. - port-number: DB 리스너의포트번호 - server-name: DB 가운용중인서버의 DNS 이름이나 IP 주소. - connection-pool: 커넥션풀링에특화된내용을설정해줍니다. - auto-commit: 커넥션에지정될 auto commit 값을지정합니다. true, false 로지정한다. 로컬 XA 데이터소스나 XA 데이터소스의경우에는커넥션이트랜잭션에연동되어있지않을경우에만적용합니다. 33

JEUS JDBC 연동 (5) - 연결풀설정 34

JEUS JDBC 연동 (6) 연결풀설정 - min: 캐시를위한 DB 커넥션들의초기값. - max: 캐시를위한 DB 커넥션들의최대값. - step: 초기화가되고나서, 커넥션수를늘릴상황이되면, 커넥션이이값만큼증가합니다. - period: 여기설정된 period 값에한번씩커넥션수를조정합니다. 여기서조정대상이되는커넥션들은 idle 커넥션이됩니다. 만약현재커넥션이앞서지정된 min 값보다작을경우에는 idle 커넥션수를 min 값만큼늘려주게되며, 그반대의경우 idle 커넥션수를줄여 min 값에맞춰주게됩니다. 만약 idle 커넥션이없을경우에는 min 값만큼줄이는작업은하지않습니다. 단위는 msec 입니다. 원활한 DB 작업을위하여이값은충분히잡아주도록합니다. (default 30 분 ) - check-query: 어플리케이션이 getconnection 할때 JDBC 커넥션에문제가있는지체크할때사용됩니다.( 예 : SELECT 1 FROM DUAL) - check-query-period: JDBC 커넥션을일정시간마다체크하여문제가있는커넥션을닫아줍니다. 이기능을사용하려면 check-query 가반드시설정되어야합니다. 단위는 msec 입니다. 35

JEUS JDBC 연동 (7) JEUSMain.xml 36

4 Session Server

Session server 란? - 세션서버는클라이언트의세션데이터를관리하거나백업하는데사용합니다. 그중에서도특히여러웹서버들과서블릿엔진들이서로클러스터링된환경에서세션데이터를관리하고자할때유용합니다. JEUS 에서는세션데이터의관리방식에따라크게 2 가지의세션서버를제공합니다. 하나는모든세션데이터를한곳에집중하여관리하는중앙세션서버이고, 다른하나는세션데이터들을여러컨테이너로골고루분산하여관리하는분산세션서버입니다. 중앙세션서버의경우세션서버자체가 JEUS Manager 에서관리되며, 분산세션서버의경우는엔진컨테이너에서각각관리합니다. 38

session clustering( 중앙집중식 ) - 중앙세션서버는 JEUS 웹컨테이너와연결하여운영되며, 웹컨테이너에있는클라이언트의세션을라우팅하거나백업하는기능을제공합니다. 중앙집중방식 Primary Session Server In memory backup Backup Session Server 39

session clustering( 분산식 ) - 중앙집중식과는달리, 각 WebContainer 마다세션서버를가지고있음. - 백업도컨테이너단위로지정을해야함. - RING 구조 - 세션라우팅을사용하는것과동일하게동작함. 즉, 한번요청갔던 WebContainer 에게계속요청이감. - 중앙집중식보다 Manager 단의부하가덜함. - 분산식프로토콜을사용하기때문에클러스터링규모가커지더라도확장성이용이하며더나은성능을발휘함. -RING 구조라서 1->2->3->4->5->1 같은구조가되는데, 2,3 컨테이너가동시에문제발생시세션을유지할수없음. 분산방식 Session Server Session Server Session Server Session Server 40

session clustering( 중앙집중식 ) - JEUSMain.xml 설정 JEUSMain.xml 중앙세션서버의타입 <session-server> <type>primary</type> <resolution>30000</resolution> <thread-pool> <min>10</min> <max>30</max> </thread-pool> <connect-timeout>60000</connect-timeout> <read-timeout>60000</read-timeout> <passivation-to>-1</passivation-to> <removal-to>3630000</removal-to> <min-hole>2000</min-hole> <packing-rate>0.8</packing-rate> <check-to>20000</check-to> <backup-trigger>500</backup-trigger> <check-level>set</check-level> <recovery-mode>active</recovery-mode> <replicated-server>test02</replicated-server> </session-server> 백업으로지정할 session server 명 JEUSMain.xml 중앙세션서버의타입 <session-server> <type>backup</type> <resolution>30000</resolution> <thread-pool> <min>10</min> <max>30</max> </thread-pool> <connect-timeout>60000</connect-timeout> <read-timeout>60000</read-timeout> <passivation-to>-1</passivation-to> <removal-to>3630000</removal-to> <min-hole>2000</min-hole> <packing-rate>0.8</packing-rate> <check-to>20000</check-to> <backup-trigger>500</backup-trigger> 백업으로지정할 <check-level>set</check-level> session server명 <recovery-mode>active</recovery-mode> <replicated-server>test01</replicated-server> </session-server> 41

session clustering( 중앙집중식 ) - WEBMain.xml 설정 WEBMain.xml <session-config> <distributable>true</distributable> <shared>true</shared> <reload-persistent>true</reload-persistent> <url-rewriting>false</url-rewriting> <session-cookie> <jsessionid-name>jsessionid</jsessionid-name> <version>0</version> <path>/</path> <max-age>-1</max-age> <secure>false</secure> </session-cookie> </session-config> <session-server> <primary-server>test01</primary-server> <backup-server>test02</backup-server> <connect-timeout>120000</connect-timeout> <read-timeout>120000</read-timeout> </session-server> - 세션서버로부터커넥션을얻어오는타임아웃설정 - 세션서버로새로운연결이맺어질때까지기다려야하는시간값 ( 풀크기가증가할때 ) 이다. - 세션서버로부터데이터를읽어오는타임아웃설정 - 값은세션서버로부터데이터읽기를시도할때기다려야하는시간값이다. 42

session clustering 세션클러스터링설정시 Application 에서구현해야할사항 - 세션 attribute 에넣을객체클래스를작성할때 session clustering 을지원하려면반드시 java.io.serializable 을 implement 해야합니다. 그렇지않으면세션서버로해당세션객체를전달하지못함 examples/web-inf/classes/session/cart.java package sessions; import javax.servlet.http.*; public class Cart implements java.io.serializable { 생략. 43

5 Application 추가

Application 추가 (1) WebtoB 도메인또는포트를추가할때는 WebtoB 환경파일에설정 (NODE, VHOST 등 ) 'Virtual Host 도메인 / 포트추가 ' 참고 JEUS 서비스추가규모 URL 환경설정범위환경설정 URL 의 path 로요청을구분하는서비스를추가 - 기존 http://www.tmax.co.kr/mail - 추가 http://www.tmax.co.kr/board Context JEUSMain.xml <application> 추가 <database> 추가 (option) 도메인주소나서비스포트가분리되면서독립된새로운서비스를추가 (Path 구분도가능 ) - 기존 http://board.tmax.co.kr http://ip 주소 [:80] - 추가 http://board.tamx.co.kr/util http://mail.tmax.co.kr http://ip 주소 :8080 Context Group Container JEUSMain.xml <application> 추가 <database> 추가 (option) WEBMain.xml <context-group> 추가 JEUSMain.xml <engine-container> 추가 <application> 추가 <database> 추가 (option) {HostName}_servlet_engine directory 추가 Context Group 과 Container 비교 Context Group 을분리하거나 Container 를추가할경우, 둘다동일한서비스제공 Context Group 추가 : 하나의 JVM 에서실행하므로한 Group 에서장애발생시다른 Group 에도영향 Container 추가 : JVM 을하나더실행하므로 java 프로세스추가실행 Container 개수 시스템자원과업무부하를고려해 Container 개수조절 CPU 개수 - 1 일때최고성능 45

Application 추가 (2) Context 추가 JEUSMain.xml <jeus-system xmlns="http://www.tmaxsoft.com/xml/ns/jeus"> <node> <name>han</name> 기존 Container <engine-container> <name>container1</name> <engine-command> <type>servlet</type> <name>engine1</name> </engine-command> </engine-container> </node> Application 추가 <application> <name>board</name> <path>board</path> <deployment-type>component</deployment-type> <web-component/> <deployment-target> <target> <engine-container-name>han_container1</engine-container-name> <web-context-group> <name>mygroup</name> </web-context-group> </target> </deployment-target> </application> </jeus-system> han_servlet_engine1/webmain.xml <web-container xmlns="http://www.tmaxsoft.com/xml/ns/jeus"> <context-group> <group-name>mygroup</group-name> 기존 Context Group <context-group> </web-container> Context, Context Group, Container 추가할때모두동일하게생성 board/web-inf/jeus-web-dd.xml <?xml version="1.0" encoding="utf-8"?> <jeus-web-dd xmlns="http://www.tmaxsoft.com/xml/ns/jeus"> <context-path>/board</context-path> <auto-reload> <enable-reload>true</enable-reload> <check-on-demand>true</check-on-demand> </auto-reload> </jeus-web-dd> 46

Application 추가 (3) Context Group 추가 JEUSMain.xml <jeus-system xmlns="http://www.tmaxsoft.com/xml/ns/jeus"> <node> <name>han</name> 기존 Container <engine-container> <name>container1</name> <engine-command> <type>servlet</type> <name>engine1</name> </engine-command> </engine-container> </node> Application 추가 <application> <name>board</name> <path>board</path> <deployment-type>component</deployment-type> <web-component/> <deployment-target> <target> <engine-container-name>han_container1</engine-container-name> <web-context-group> <name>mygroup2</name> </web-context-group> </target> </deployment-target> </application> </jeus-system> han_servlet_engine1/webmain.xml <web-container xmlns="http://www.tmaxsoft.com/xml/ns/jeus"> <context-group> <group-name>mygroup</group-name> 기존 Context Group <context-group> <context-group> <group-name>mygroup2</group-name> <context-group> </web-container> Context Group 추가 47

Application 추가 (4) Container 추가 JEUSMain.xml <jeus-system xmlns="http://www.tmaxsoft.com/xml/ns/jeus"> <node> <name>han</name> Container 추가 <engine-container> <name>container2</name> <engine-command> <type>servlet</type> <name>engine2</name> </engine-command> </engine-container> </node> Application 추가 <application> <name>board</name> <path>board</path> <deployment-type>component</deployment-type> <web-component/> <deployment-target> <target> <engine-container-name>han_container2</engine-container-name> <web-context-group> <name>mygroup</name> </web-context-group> </target> </deployment-target> </application> </jeus-system> han_servlet_engine2/webmain.xml <web-container xmlns="http://www.tmaxsoft.com/xml/ns/jeus"> <context-group> <group-name>mygroup</group-name> <context-group> </web-container> 추가한 Container 의 Context Group Directory 생성 48

6 로그및장애처리

JEUS 로그종류와위치 JEUS 로그의종류와위치 JEUS Server Log - JEUS Server LOG 는 JEUS Manager 의동작에대한로그정보가기록되는 JEUS 에서가장중심이되는로그파일입니다. - JEUS Server LOG 의위치는 $JEUS_HOME/logs/`hostname`/ 이다. - JEUSMain.xml 에설정한단위를기준으로로그를생성합니다. ( 일변, 시간별설정가능 ) - 예 ) 일별로로그를생성할경우 $JEUS_HOME/logs/`hostname`/JeusServer_20070201.log 로생성 JEUS Access Log - Access LOG 는 JEUS 로들어오는요청에대한로그로 JEUS 서블릿엔진내부의 Worker Thread 가처리하는요청사항에대한기록입니다. - 위치는 $JEUS_HOME/logs/`hostname`/[container-name]/servlet/accesslog/[contextgroup-name] 입니다. - WEBMain.xml 에설정한단위를기준으로로그를생성합니다. ( 일별, 시간별설정가능 ) - 예 ) 일별로로그를생성할경우 $JEUS_HOME/logs/`hostname`/engs1_container/servlet/accesslog/MyGroup/access_2007020 1.log 50

JEUS 장애처리 (1) JEUS 프로세스 ID (PID) 확인 - JEUS 에는 2 종류의프로세스가존재합니다. (JEUS Manager 프로세스, 컨테이너프로세스 ) - JEUS 의엔진프로세스는다음과같이 2 가지방법으로확인할수있습니다. 51

JEUS 장애처리 (1) JEUS JAVA 덤프생성 JAVA 덤프의필요성 - JAVA 덤프는 JAVA 프로세스의현재 JAVA 프로세스의스택정보를모두담고있기때문에장애상황분석뿐만아니라 Application 분석및추적등의여러상황에서유용하게사용될수있습니다. JEUS 에서 JAVA 덤프가필요한상황 - jboot 를이용하여 JEUS 를기동하는데상당한시간 ( 수분이상 ) 이소요될때 - jeusadmin, webadmin, dbpooladmin, ejbadmin 등의 JEUS 관리콘솔툴로로그인이안되거나상당한시간이소요될때 - webadmin 의 ti 를이용하여 Thread 를모니터링하던중 Hang-Up 으로의심되는 Thread 가발견될때 - 기타 JEUS 기동중에발생하는모든이상동작분석시 덤프발생방법 - dump [container_name] 52

JEUS 장애처리 (1) JEUS JAVA 덤프확인 JEUS JAVA 프로세스에서생성한덤프는 JeusServerLog 에서확인합니다. - 예 ) vi $JEUS_HOME/logs/`hostname`/JeusServer_20110228.log 53

JEUS 덤프분석예제 (1) JEUS 덤프분석예제 상황 -Web Application 에서강제 Hang-Up 을발생시킨후 JEUS Container 에대한덤프를생성하여해당 Hang-Up 을확인합니다. JSP 코드 - 다음과같은 JSP 코드를준비합니다. 브라우저에서페이지호출 54

JEUS 덤프분석예제 (2) JEUS 덤프분석예제 이러한상황에서 jeusadmin 콘솔툴의 ti 명령어로모니터링해보면다음과같이해당페이지가실행중임을알수있습니다. test.jsp 이약 10 초동안 active 상태인것을확인할수있습니다. 55

JEUS 덤프분석예제 (3) JEUS 덤프분석예제 현재실행중인 w00 Thread 의스택을파악하기위해 dump 를생성합니다. 56

Ⅱ WebtoB 1. 개요및기본환경 2. WebtoB 운영및관리지침 3. 로그및장애처리

1 개요및기본환경

WebtoB 기능 Ref: JEUS Administration Load balancing 다양한부하조절기능 (H/W 성능또는동적부하조절 ) 최적의시스템성능과자원활용성보장 시스템의최대처리량 (throughput) 유지 Fault tolerance Cache table Cache table Cache table Caching content Caching content Caching content Memory area Data compression Cache table Caching content Web caching 별도의 caching 서버없이 WebtoB 만으로메모리 caching 제공 [ 그림 1] Web caching Log 관리 Web API Security Socket connection Socket listening Have no connection JEUS 연동 방화벽오픈설정불필요 WebtoB 가 socket listening 하고 JEUS 가 socket 연결 WebtoB Web server [ 그림 2] WebtoB-JEUS 연동구성 JEUS WAS Tibero DBMS TP-monitor Tmax 서비스호출 59

WebtoB 관리툴 wsadmin WebtoB 시스템관리툴 Command Interpreter > wsadmin --- Welcome to WebtoB Admin (Type "quit" to leave) --- $$1 han (wsadm): Ref: JEUS 소개 명령어예제설명실행예제 help 도움말 h / help / h ci / h st / h cfg wi WebtoB 시스템정보 wi ci 접속중인클라이언트웹브라우저정보 ci / ci s / ci S / ci vh / ci h si 서버정보 si st Server Process 및 Service 상태통계정보 st s / st p / st v (si 실행결과와동일 ) cfg 환경설정내용조회 cfg d / cfg n / cfg vh / cfg g / cfg v / cfg s / cfg u / cfg e history 최근실행한명령어조회 hist! 직전실행명령어다시실행! /!3 r 명령어반복실행 r / r i 5 k 10000 ci s (-i: 주기, -k: 반복횟수 ) restat 통계정보초기화 restat v html / restat a set 환경설정값동적변경 set v MyGroup sch 1 (MyGroup Server 의 sch 항목값을 1 로설정 ) logs 툴사용 logging 시작 loge 툴사용 logging 종료 loge logs wsadmin.log_20090625 logs C:\TmaxSoft\WebtoB\log\wsadmin.log_20090625 Command line 에서명령어실행 Command line 에서입력한명령어를 wsadmin 에서실행후다시 command line 으로나옴 > wsadmin -C "wi;ci -s" $$1 han (wsadm): wi... $$2 han (wsadm): ci s ADM quit for node (han) > 60

WebtoB install WebtoB 를 start 하기위해서는 license 파일과 binary type config 파일이필요합니다. (1) License 파일발급 License 파일을발급받아해당경로에업로드합니다. License 파일경로및파일명 : $WEBTOBDIR/license/license.dat Real license 제품구매계약이된후에는 TmaxSoft 영업대표또는기술지원엔지니어에게요청해발급받습니다. Demo license TmaxSoft 에서운영하는 TechNet [ http://technet.tmax.co.kr ] 에접속해로그인후발급받습니다. LOGIN > 다운로드 > 라이센스신청 > Hostname 등발급정보입력 > E-mail 전송 (2) 환경파일컴파일 WebtoB 기본환경파일로 sample.m 이제공되며, 대부분사이트에서 http.m 파일명을사용합니다. http.m 파일을 wscfl 명령어로컴파일하면 wsconfig binary 파일이생성됩니다. Config 파일경로및파일명 : $WEBTOBDIR/config/sample.m > wscfl -i http.m Current configuration: Number of client handler(hth) = 1 Supported maximum user per node = 965 Supported maximum user per handler = 965 CFL is done successfully for node(han(han)) Option > wscfl -i http_ssl.m o wsconfig_ssl > 기능테스트등임시운영을위한 config 파일생성이가능 * wscfl(web server configuration file load) : Text type 의 WebtoB 운영환경설정파일 (*.m) 에오류가없는지검사한후 binary type 파일을생성합니다. 이파일은 WebtoB engine 이사용합니다. 61

WebtoB engine start/stop > wsboot WSBOOT for node(han) is starting: Welcome to WebtoB demo system: it will expire 2009/07/06 Today: 2009/05/21 WSBOOT: WSM is starting: 05/21/09 14:43:01 WSBOOT: HTL is starting: 05/21/09 14:43:01 WSBOOT: HTH is starting: 05/21/09 14:43:01 Current WebtoB Configuration: Number of client handler(hth) = 1 Supported maximum user per node = 975 Supported maximum user per handler = 975 WSBOOT: SVR(C:/TmaxSoft/WebtoB/bin/htmls.exe) is starting: 05/21/09 14:43:01 WSBOOT: SVR(C:/TmaxSoft/WebtoB/bin/htmls.exe) is starting: 05/21/09 14:43:01 WSBOOT: SVR(C:/TmaxSoft/WebtoB/bin/cgis.exe) is starting: 05/21/09 14:43:01 WSBOOT: SVR(C:/TmaxSoft/WebtoB/bin/ssis.exe) is starting: 05/21/09 14:43:01 License expire date: 2009/07/06 (46 days remained) > wsboot f wsconfig_ssl >> 기능테스트등임시운영을위한 config 파일사용이가능 Option > wsdown Do you really want to down whole WebtoB? (y : n): y WSDOWN for node(han) is starting: WSDOWN: SERVER(html:0) downed: 05/21/09 14:42:02 WSDOWN: SERVER(html:1) downed: 05/21/09 14:42:02 WSDOWN: HTL downed: 05/21/09 14:42:02 WSDOWN: HTH downed: 05/21/09 14:42:02 WSDOWN: WSM downed: 05/21/09 14:42:02 WSDOWN: WEBTOB is down > wsdown i >> 즉시종료 Option 62

Windows service 등록및해제 WebtoB 4.1.3.0 이하 C:\TmaxSoft\WebtoB\bin>srvinstall webtob C:\TmaxSoft\WebtoB4.1.3.0 Webtob service installed C:\TmaxSoft\WebtoB\bin>srvremove Webtob service removed WebtoB 4.1.3.1 이상 C:\TmaxSoft\WebtoB\bin>webtob_service -create Webtob service installed C:\TmaxSoft\WebtoB\bin>webtob_service -delete Webtob service removed 63

2 WebtoB 운영및관리지침

WebtoB 환경파일 WebtoB 기본환경파일로 sample.m 이제공되며, 대부분사이트에서 http.m 파일명을사용합니다. http.m 파일을 wscfl 명령어로컴파일하면 wsconfig binary 파일이생성되고, WebtoB engine 이 start 하면서사용합니다. (wscfl i http.m) 환경파일구성 WebtoB 시스템전체의전반적인환경에대해정의 필수설정 *DOMAIN *NODE *SVRGROUP *SERVER 개별 Host machine에대한환경정의 Server Process의논리적인연관성에따라그룹으로관리 기본설정 *ALIAS *LOGGING *URI *EXT 서비스를하는 Server Process 정의 추가설정 *VHOST *SERVICE *DIRECTORY *DIRINDEX *AUTHENT *SSL *ACCESS *EXPIRE Domain A Domain B Node 1 Node 2 Node 3 Node 4 Node 5 Node 6 65

WebtoB port 설정 (1) Ref: WebtoB Admin Guide WebtoB 에서사용하는네트워크포트 웹서비스포트 JEUS 연동포트 RAC 포트 RAC(Remote Access Control): Multi-Node 환경에서원격 Node 를제어하기위한프로세스 (wsracd) *NODE han 웹서비스포트번호 PORT = "8080", JSVPORT = 9090 JEUS 연동포트번호 http://han.tmax.co.kr:8080 http://han.tmax.co.kr:8888 *VHOST host1 PORT = "8888" 가상호스트웹서비스포트번호 HTH 가 2 개이상실행될경우 ( 최대 8 개가능 ) JEUS 와연동하는포트개수가 HTH 개수와비례해서사용 (listen) 됩니다. 즉, 아래설정에서 JEUS 와연동하는포트는 9090, 9091 이사용됩니다. 9090 : HTH 0 사용 9091 : HTH 1 사용 *NODE han HTH = 2, JSVPORT = 9090 8080 port listen htl hth0 hth1 wsm 9090 port listen 9091 port listen 66

WebtoB port 설정 (2) Ref: WebtoB Admin Guide UNIX/Linux 에서웹서비스포트번호로 80 을사용하기위해서는 root 권한이필요합니다. root ID 에서 htl(listener) 파일의 owner 를변경 (root) 하고 setuid 를설정합니다. $ su Password: ***** # whoami root # cd {WebtoB 디렉토리 }/bin # chown root:sys htl # chmod +s htl # ls l htl -rwsr-sr-x 1 root sys 227976 2009.01.01 htl # su tmax (WebtoB 운영 ID) $ wsboot htl 을 root 권한으로실행하면서일반 ID 로관리 / 운영을하기위해서는 IPCPerm 을설정 IPC(inter-process communication): 프로세스간의내부통신 path 디렉토리에프로세스간의내부통신을위한 named-pipe 가생성됨 *NODE han PORT = "80", IPCPerm = 0777 http.m 67

Virtual Host 도메인 / 포트추가 Ref: WebtoB Admin Guide 하나의 Web Server 를이용하여마치여러대의 Web Server 가운영되고있는것과같은효과를내는기능 하나의 IP 를사용하면서도서비스를몇개의도메인이름 / 포트번호로분리하여제공 *NODE han *VHOST host1 host2 PORT = "80" HOSTNAME="mail.tmax.co.kr", HOSTALIAS="mail.tmax.com", DOCROOT="C:/TmaxSoft/WebtoB/docs/mail", NODENAME="han", PORT = "80" HOSTNAME="board.tmax.co.kr", HOSTALIAS="board.tmax.com,123.234.123.234", DOCROOT="C:/TmaxSoft/WebtoB/docs/board", NODENAME="han", PORT = "8080" Management Connection HTTP request http://mail.tmax.co.kr http://mail.tmax.com http://board.tmax.co.kr:8080 80,8080 port listen htl wsm hth mail board *SVRGROUP jsvg_mail NODENAME = "han", SvrType = JSV, VHostName = "host1" jsvg_board NODENAME = "han", SvrType = JSV, VHostName = "host2" *SERVER MyGroup SVGNAME = jsvg, MinProc = 2, MaxProc = 10, ASQCount = 1 mail SVGNAME = jsvg_mail, MinProc = 2, MaxProc = 10, ASQCount = 1 board SVGNAME = jsvg_board, MinProc = 2, MaxProc = 10, ASQCount = 1 JEUS mail, board 서비스를담당하는 Container 나 Context-Group 을추가하고 WebtoB 의해당 SERVER 와연동필요 *URI uri_home uri_board uri_exam Uri = "/", SvrType = JSV, SvrName = "mail", VHostName = "host1" Uri = "/", SvrType = JSV, SvrName = "board", VHostName = "host2" Uri = "/", SvrType = JSV, SvrName = "mail" 68

WebtoB Logging 설정 (1) Ref: WebtoB Admin Guide WebtoB log 기본경로 : $WEBTOBDIR/log 환경파일에서경로, log format 등변경가능 (NODE 절, LOGGING 절, VHOST 절 ) System log Manager process(wsm) 가 WebtoB 운영중에발생하는정보를기록 기본경로및파일명 : $WEBTOBDIR/log/syslog/syslog._ 월일년 Log 예제 WebtoB/4.1 SP 1 Fix #2 Build #0 20071108/WINDOWS_I386 New log started at Thu Jun 04 16:42:56 2009 Access log 웹클라이언트의모든요청정보를기록 기본경로및파일명 : $WEBTOBDIR/log/access.log_ 월일년 Log 예제 127.0.0.1 - - [27/May/2009:13:34:59 +0900] "GET /exploded/images/bluebtn.gif HTTP/1.1" 304 Error log 웹클라이언트의요청정보를처리하면서발생한에러정보를기록 기본경로및파일명 : $WEBTOBDIR/log/error.log_ 월일년 Log 예제 [04/Jun/2009:16:44:39 +0900] [error] [client 127.0.0.1] File does not exist: C:/TmaxSoft/WebtoB/docs/test/main.jpg 69

WebtoB Logging 설정 (2) Ref: WebtoB Admin Guide Logging 설정 LOGGING 절에서특정경로또는파일명을지정할수있습니다. *NODE han SysLogDir = "C:/TmaxSoft/WebtoB/log/syslog", LOGGING = "log1", ERRORLOG = "log2" Option *VHOST host1 LOGGING = "log3", ERRORLOG = "log4" *SVRGROUP boardjsvg LOGGING = "log5" Option Option *LOGGING log1 Format = "DEFAULT", FileName = "C:/TmaxSoft/WebtoB/log/access.log", Option = "sync,env=!image " log2 Format = "ERROR", FileName = "C:/TmaxSoft/WebtoB/log/error.log", Option = "sync" log3 Format = "DEFAULT", FileName = "D:/log/host1/access.log", Option = "sync" log4 Format = "ERROR", FileName = "D:/log/host1/error.log", Option = "sync" log5 Format = "DEFAULT", FileName = "D:/log/jsvg/board_access.log", Option = "sync!image : gif, jpg 파일에대한기록을제외시킴 Log format LOGGING 절의 Format 항목에서 log format 을지정하거나미리정의된두가지포맷 (DEFAULT, ERROR) 을사용할수있습니다. Access Log 는 DEFAULT 로설정되어있는데, DEFAULT 는 CLF Format 을준수합니다. CLF(Common Log File Format): Web Server 의원조라할수있는 NCSA 계열의 Web Server 에서사용하는파일형식으로현재대부분의 Web Server 가지원함 70

WebtoB Logging 설정 (3) Ref: WebtoB Admin Guide Common log format remotehost rfc931 authuser [date] "request" status bytes Option 127.0.0.1 - - [27/May/2009:13:28:56 +0900] "GET /index.jsp HTTP/1.1" 200 3669 Access Log 에는사용자가원하는형태의정보를얻기쉽도록특정 field 를추가할수있습니다. - %a : Remote IP 주소 - %u : 인증이된요청을하는사용자 - %t : 요청의날짜와시간 - %T : 서버가요청을처리하는데걸린시간 ( 초 ) - %D : 서버가요청을처리하는데걸린시간 (msec) - %r : HTTP 메소드를포함한요청의첫번째줄 - %h : Client IP - %H : Request Protocol (ex, HTTP/1.1) - %m : Request Method (ex, GET) - %q : Request Query (ex,?id=webtob) - %U : 요청 URL - %s : HTTP 상태코드 - %b : 전송된파일의크기 - %{Header}i : 클라이언트요청 HTTP 헤더예 ) %{Cookie}i - %v : HostName 필드에서정의된서버명 - %p : 클라이언트요청을받는 TCP 포트번호 - %d : date type 127.0.0.1 - - [04/Jun/2009:17:42:00 +0900] "GET /top2-1.gif HTTP/1.1" 200 13565 *LOGGING log1 Format = "%h %l %u %t \"%r\" %>s %b", FileName = "$WEBTOBDIR/log/custom1.log" log2 Format = "[%{%Y.%m.%d %H:%M:%S}d] %a \"%r\" %s %T", FileName = "$WEBTOBDIR/log/custom2.log" [2009.06.04 17:52:33] 127.0.0.1 "GET /top2-1.gif HTTP/1.1" 200 0 71/00

UTF-8 한국어 encoding 웹브라우저에서한국어가포함된 URL 등 HTTP req. 를 UTF-8 character-set 으로보낼경우문자가깨지면서원하는경로또는파일을찾을수없게됩니다. Request URL[http://localhost:8080/ 한국 /index.html] Access log["get /%ED%95%9C%EA%B5%AD/index.html HTTP/1.1" 200 801] 조치방법 1: 인터넷옵션에서 URL 을항상 UTF-8 로보냄 설정체크를해제 ( 도구 인터넷옵션 고급 URL 을항상 UTF-8 로보냄 ) 조치방법 2: WebtoB 의 FILTER 기능을이용해 encoding module 로문자변환 (1) TmaxSoft 기술지원엔지니어로부터 OS 종류및 kernel bit 에맞는필터소스파일을제공받으면 filter directory 를만들어업로드 $ mkdir $WEBTOBDIR/filter (2) 압축풀기 $ unzip *zip (Ex. Linux_x86_32bit.zip) [UNIX/Linux] (3) 소스코드컴파일, 라이브러리생성 $ make f mk* (Ex. mk.linux_20080801) (4) mod_utf8_20080801.so(hp-ux 는 *.sl) 파일을확인하고 WebtoB 환경설정수정후 wscfl, restart [Windows] (3) mod_utf8_20080801.dll 파일을확인하고 WebtoB 환경설정수정후 wscfl, restart *NODE han FILTER = "mod_utf8" *VHOST host1 FILTER = "mod_utf8" Option *FILTER mod_utf8 72 RealPath = "filter/mod_utf8_20080801.dll"

WebtoB error page 설정 Option Ref: WebtoB Admin Guide HTTP Response Status Code 값에따라특정웹페이지로 redirect 하는기능 HTTP 401 Unauthorized 를제외한모든 HTTP Status Code 를설정가능 *NODE han ErrorDocument = "503,404" *VHOST host1 ErrorDocument = "503,404vh" *ERRORDOCUMENT 404 Status = 404, URL = "error/404.html" 404vh Status = 404, URL = "error/notfound.html" 503 Status = 503, URL = "http://www.tmax.co.kr/error/sys_error.html" HTTP Status Code DOCROOT 이하의상대경로또는 Client 가접속가능한 URL HTTP Status Code(HTTP 1.1 : RFC 2616) 서버가요구메시지를수신하여처리한결과를알려주는세자리정수로된처리결과번호 Informational 1xx Success 2xx Redirection 3xx Client Error 4xx Server Error 5xx 100 Continue 101 Switching Protocols 200 OK 302 Found 304 Not Modified 400 Bad Request 401 Unauthorized 403 Forbidden 404 Not Found 405 Method Not Allowed 414 Request-URI Too Long 500 Internal Server Error 503 Service Unavailable 73

SERVER process 와 Thread pool(1) 서버운영에적절한프로세스수를측정하기위해 WebtoB 의 Schedule 기능을활용합니다. Schedule Handler 가웹클라이언트의요청을몇번째프로세스가처리할지스케줄링합니다. Default 는 Round Robin HTTP request hth 1 2 3 4 5 MyGroup MyGroup MyGroup MyGroup MyGroup HTTP request hth 3 4 5 1 2 MyGroup MyGroup MyGroup MyGroup MyGroup Round Robin(RR) 처음을시작으로순서대로유휴프로세스가요청을처리하고끝에도달하면다시처음으로돌아가는방식 Ex. 5 건의요청을유휴프로세스가순서대로처리 First Available(FA) 요청을받을때마다처음부터유휴프로세스를찾아요청을처리하는방식 Ex. 5 건의요청을매번처음부터유휴프로세스를찾아처리 - (1) 번요청을유휴상태인첫번째프로세스가처리 - (2) 번요청이 (1) 번처리중에도착해두번째프로세스가처리 - (1) 번처리완료후에 (3) 번요청이도착해첫번째프로세스가 (3) 번요청을처리 - (3) 번처리중, (2) 번처리완료후에 (4) 번요청이도착해두번째프로세스가처리 - (3) 번처리중, (4) 번처리중에 (5) 번요청이도착해세번째프로세스가처리 74

SERVER process 와 Thread pool(2) Schedule Schedule 기능활용순서 (1) Schedule 값을 First Available(FA) 로설정해시험운영 (2) 최대접속 / 사용량을확인한후각프로세스의처리건수 (count) 를검사 (3) 적절한프로세스수 (MinProc, MaxProc) 를결정해운영에반영 Schedule 설정방법 운영중실시간적용 (WebtoB restart 하면환경파일에설정된값으로바뀜 ) (1) Schedule 확인 $$2 han (wsadm): cfg v MyGroup SERVER(1): Name = MyGroup, Schedule(sch) = RR, # (0) (3) Schedule 확인 $$6 han (wsadm): cfg v MyGroup SERVER(1): Name = MyGroup, Schedule(sch) = FA, # (1) (2) Schedule 변경 $$5 han (wsadm): set -v MyGroup sch 1 new value (1) is set for section = SERVER, name = MyGroup, fld = sch 환경파일수정 *SERVER MyGroup SVGNAME = jsvg, MinProc = 2, MaxProc = 10, ASQCount = 1, Schedule = "FA" WebtoB restart > wscfl i http.m > wsdown -i > wsboot 75

SERVER process 와 Thread pool(3) Schedule 프로세스의처리건수비교 (1) Round Robin $$13 han (wsadm): st -p MyGroup --------------------------------------------------------------------------- svr_name svgname spr_no(pid) status count avg(rt) clid svc --------------------------------------------------------------------------- MyGroup jsvg 10( 0) RDY 21 0.0038( 0) -1-0 jengineid(han_servlet_engine1) MyGroup jsvg 11( 1) RDY 21 0.0038( 0) -1-0 jengineid(han_servlet_engine1) MyGroup jsvg 12( 2) RDY 23 0.0035( 0) -1-0 jengineid(han_servlet_engine1) MyGroup jsvg 13( 3) RDY 22 0.0023( 0) -1-0 jengineid(han_servlet_engine1) MyGroup jsvg 14( 4) RDY 21 0.0110( 0) -1-0 jengineid(han_servlet_engine1) (2) First Available $$17 han (wsadm): st -p MyGroup --------------------------------------------------------------------------- svr_name svgname spr_no(pid) status count avg(rt) clid svc --------------------------------------------------------------------------- MyGroup jsvg 10( 0) RDY 188 0.0055(0) -1-0 jengineid(han_servlet_engine1) MyGroup jsvg 11( 1) RDY 92 0.0054( 0) -1-0 jengineid(han_servlet_engine1) MyGroup jsvg 12( 2) RDY 1 0.0055( 0) -1-0 jengineid(han_servlet_engine1) MyGroup jsvg 13( 3) RDY 0 0.0000( 0) -1-0 jengineid(han_servlet_engine1) MyGroup jsvg 14( 4) RDY 0 0.0000( 0) -1-0 jengineid(han_servlet_engine1) Round Robin(RR) 처음을시작으로순서대로유휴프로세스가요청을처리했기때문에모든프로세스가유사한처리량 (count) 을보입니다. First Available(FA) 요청을받을때마다처음부터유휴프로세스를찾아요청을처리했기때문에일부프로세스에처리량 (count) 이집중됩니다. 결론두개의프로세스에집중되므로 MaxProc=2 로운영할수있습니다. 하지만실제운영환경에서는요청이폭주하는현상에대비하기위해 system resource 가허용하는범위에서그이상설정해운영하는것이바람직합니다. 76

SERVER process 와 Thread pool(4) Ref: WebtoB Admin Guide, JEUS Web Container Guide *SVRGROUP jsvg NODENAME = "han", SvrType = JSV http.m *SERVER MyGroup SVGNAME = jsvg, MinProc = 10, MaxProc = 30, ASQCount = 1, MaxQCount = 100, MaxQURL = "http://www.tmax.co.kr/maxq.html", SvrChkTime = 10 ASQCount Idle process 가없어 process 를추가생성하기전에 request queue 에저장될요청의최대개수 (0(default) 으로설정시 process 추가생성없음 ) MaxQCount, MaxQURL 클라이언트요청이많으면 queuing 되는데, Queue size 이상도착하는요청은즉시에러페이지를응답 SvrChkTime 서버의연결이정상인지검사하는주기, JEUS 로신호 (ping) 를보냄방화벽을사이에두고연결된 JEUS 와의연결을검사하는데사용 WEBMain.xml <webtob-listener> <listener-id>webtob1</listener-id> <port>9900</port> <thread-pool> <min>10</min> <max>30</max> <step>5</step> <max-wait-queue>10</max-wait-queue> <max-idle-time>300000</max-idle-time> </thread-pool> <webtob-address>localhost</webtob-address> <registration-id>mygroup</registration-id> <read-timeout>30000</read-timeout> <disable-pipe>true</disable-pipe> </webtob-listener> <step> 서비스요청을처리할 idle thread 가없어 Pool size 가증가할때생성되는 thread 개수 <max-wait-queue> Idle thread 가없어 thread 를생성하기전에 request wait queue 에저장될요청의최대개수 <max-idle-time> 추가생성했던 thread 를 Pool 에서제거하기전에 idle 상태로머물러있는최대시간 (ms.) <read-timeout> WebtoB ping 검사주기 (ms.), SvrChkTime 보다큰값을설정주기내에 ping 을받지못하면 reconnection 시도 <disable-pipe> WebtoB 와통신하는방법 (true:socket, false:pipe) Pipe 통신은 JEUS, WebtoB 가한장비에있을때만가능 <thread-pool> 100 개이상운영시 context switching 부하가예상되므로, 그이상필요시동일업무를제공하는 Container 를추가구성해 thread 를분배하도록권고 WebtoB 의 MinProc, MaxProc 값은연결 Container 들의 thread pool 의 <min>,<max> 를확인해총합으로설정 77

클라이언트접속제한 Ref: WebtoB Admin Guide WebtoB ACCESS 절 클라이언트의접속을허용또는제한하는기준을설정합니다. URI, EXT, DIRECTORY, TCPGW 절에적용가능합니다. *NODE han ServiceOrder = "uri,ext" http.m *VHOST admin ServiceOrder = "uri,ext" *ACCESS access1 Order = "deny,allow", Deny = "all" access2 Order = "allow,deny", Allow = "211.*. *.0/255.255.255.0" access3 Order = "allow,deny", Allow = "211. *. *.10,211. *. *.20" access4 Order = "deny,allow", Deny = "211. *. *.30" 특정 IP주소만제한 *URI uri_web-inf1 Uri = "/WEB-INF", SvrType = HTML, AccessName = access1 uri_web-inf2 Uri = "/board/web-inf", SvrType = HTML, AccessName = access1 uri_web-inf3 Uri = "/admin/web-inf", SvrType = HTML, AccessName = access1 uri_board Uri = "/board", SvrType = HTML, AccessName = access2 모두제한 특정네트워크대역만허용 특정 IP 주소만허용 uri_adm_img Uri = "/admin/image", SvrType = HTML, VHostName = "admin", AccessName = access3 uri_adm Uri = "/admin", SvrType = JSV, VHostName = "admin", AccessName = access3 *EXT htm MimeType = "text/html", SvrType = HTML jsp MimeType = "aplication/jsp", SvrType = JSV xml MimeType = "text/xml", SvrType = HTML, AccessName = access1 78

SSL 보안 1. 인증서발급 2. UNIX/Linux에서 https default port 443을사용하기위해서는 root 권한이필요합니다. root 권한에서 htl(listener) 파일의 owner를변경 (root) 하고 setuid를설정합니다. $ su Password: ***** # cd {WebtoB 디렉토리 }/bin # chown root:sys htl # chmod +s htl # ls l htl -rwsr-sr-x 1 root sys 227976 2009.01.01 htl 3. WebtoB 설정 *NODE han *VHOST host1 IPCPerm = 0777 PORT = "443", SSLFlag = Y, SSLName = "ssl1" *SSL ssl1 CertificateFile="C:/TmaxSoft/WebtoB/ssl/newcert.pem", CertificateKeyFile="C:/TmaxSoft/WebtoB/ssl/newcert.pem" 4. WebtoB start > wsboot WSBOOT for node(han) is starting: Enter pass phrase: 79

KeepAlive 및 Timeout Ref: WebtoB Admin Guide KeepAlive 웹서버에접속한클라이언트의연결상태를유지하는기능 (HTTP 1.1 스펙 ) 클라이언트의연결상태를유지해다시접속하는불필요한시간지연이없도록동작 불필요하게연결상태를오래점유하는것을방지하기위한설정필요 Default Y KeepAliveMax, KeepAliveTimeout 처음접속후연결상태를유지한채로처리할수있는요구의개수, 요구없이지속할수있는시간 Default 9999, 60( 초 ) Timeout 클라이언트의최대접속시간 연결에문제가생겨계속해서의미없는데이터전송이발생할때를방지하기위한설정 WebtoB 에서실행중인프로세스의처리를중단하더라도 JEUS 의 worker thread 는실행중일수있으므로 b lock 되지않도록 thread 관리환경설정권고 (Active Management 참고 ) Default 300( 초 ) *NODE 또는 *VHOST han KeepAlive = Y, KeepAliveTimeout = 60, KeepAliveMax = 0, TimeOut = 300 80

ServerTokens Ref: WebtoB Admin Guide ServerTokens HTTP 응답헤더에포함시키는웹서버정보를어떻게다룰지결정합니다. Default Minimal ServerTokens 설정 Off Prod[uctOnly] Min[imal] OS Full Custom=xxx/x.x 내용서버에관한정보를보내지않음 ex. WebtoB ex. WebtoB/4.1 ex. WebtoB/4.1 (LINUX_i386) ex. WebtoB/4.1 (LINUX_i386) ex. xxx/x.x *NODE han ServerTokens = "Min" *NODE han ServerTokens = "Off" HTTP/1.1 200 OK Date: Fri, 17 Jul 2009 04:56:02 GMT Server: WebtoB/4.1 ETag: "0-251-4a4ac508" Last-Modified: Wed, 01 Jul 2009 02:08:08 GMT Accept-Ranges: bytes Content-Length: 593 Content-Type: text/html HTTP/1.1 200 OK Date: Fri, 17 Jul 2009 04:54:11 GMT ETag: "0-251-4a4ac508" Last-Modified: Wed, 01 Jul 2009 02:08:08 GMT Accept-Ranges: bytes Content-Length: 593 Content-Type: text/html 81

3 로그및장애처리

WebtoB 로그종류와위치 83

WebtoB 장애처리 84

WebtoB 장애처리 85

WebtoB 장애처리 86

Ⅲ JEUS-WebtoB 연동

JEUS-WebtoB 연동 (1) Ref: JEUS Administration *NODE han HTH = 1, Port = "80", JSVPORT = 9900 *SVRGROUP htmlg NODENAME = "han", SvrType = HTML cgig NODENAME = "han", SvrType = CGI ssig NODENAME = "han", SvrType = SSI jsvg NODENAME = "han", SvrType = JSV http.m *SERVER html SVGNAME = htmlg, MinProc = 2, MaxProc = 3, ASQCount = 1 cgi SVGNAME = cgig, MinProc = 2, MaxProc = 2 ssi SVGNAME = ssig, MinProc = 2, MaxProc = 2 MyGroup SVGNAME = jsvg, MinProc = 3, MaxProc = 5, ASQCount = 1, SvrChkTime = 10 Management Connection HTTP request 3 1 Ping 송신주기 ( 초 ) 80 port listen htl wsm hth 2 88 Thread pool WebtoB ping for Firewall ssis cgis htmls 9900 port listen MyGroup WEBMain.xml <webtob-listener> <listener-id>webtob1</listener-id> <hth-count>1</hth-count> <port>9900</port> <registration-id>mygroup</registration-id> <thread-pool> <min>3</min> <max>5</max> <step>1</step> <max-idle-time>30000</max-idle-time> <max-wait-queue>10</max-wait-queue> </thread-pool> <webtob-address>localhost</webtob-address> <read-timeout>30000</read-timeout> <disable-pipe>true</disable-pipe> </webtob-listener> Ping 수신검사주기 (ms.) * Pool 에대한설명은 SERVER process 와 Thread pool 참고 9900 port connecting WS engine Servlet engine JMS engine EJB engine

JEUS-WebtoB 연동 (2) Ref: JEUS Administration *NODE han Port = "80", JSVPORT = 9900, ServiceOrder = "uri,ext" JEUS 연동포트번호 HTTP 요청분석우선순위 *SVRGROUP htmlg NODENAME = "han", SvrType = HTML jsvg NODENAME = "han", SvrType = JSV *SERVER MyGroup SVGNAME = jsvg, MinProc = 3, MaxProc = 5 http.m WEBMain.xml - JEUS 4.x <context> <context-name>examples</context-name> <context-path>/examples</context-path> </context> jeus-web-dd.xml - JEUS 5.x, JEUS 6.x <jeus-web-dd> <context-path>/examples</context-path> </jeus-web-dd> *URI uri_exam Uri = "/examples", SvrType = JSV, SvrName = "MyGroup" uri_cgi Uri = "/cgi-bin", SvrType = CGI *EXT htm MimeType = "text/html", SvrType = HTML jsp MimeType = "aplication/jsp", SvrType = JSV Req.: /cgi-bin Management Connection HTTP request ssis *URI: URI 의값에따라처리를담당할 SERVER 를지정 /examples, /cgi-bin 등 *EXT: Client 가요구한파일의확장자명에따라처리담당 SERVER 를지정 index.html, index.jsp 등 Req.: *.html, *.gif, *.jpg Req.: /examples 80 port listen cgis htl htmls hth 9900 port listen MyGroup wsm WS engine Servlet engine JMS engine EJB engine 89

JEUS-WebtoB 연동 (3) WebtoB 는메모리를이용한 web caching 기능을제공하므로자주요청되는 static data 에대한처리가매우빠릅니다. Static data: 서비스하는시점에내용변경이없는데이터 (html, css, jpg, gif 등 ) 하지만 JEUS 는요청을받을때마다 disk 로부터파일을읽어제공하기때문에 disk IO 로인한부하로성능이낮아, 특히파일이크거나요청이많은경우에서비스지연현상이발생할수있습니다. 따라서 static data 는 WebtoB 가처리하도록권고합니다. "uri,ext" 요청 URL 의 URI 부분이 *URI 절에등록된 URI 에있는지검사해처리담당 SERVER 를결정순서대로검사하기때문에 "/" 가마지막에위치해야함즉, 서브 path 를먼저등록 http.m *NODE han ServiceOrder = "uri,ext" *SERVER html SVGNAME = htmlg, MinProc = 2, MaxProc = 3, MyGroup SVGNAME = jsvg, MinProc = 3, MaxProc = 5, *URI uri_css Uri = "/css", SvrType = HTML uri_image Uri = "/image", SvrType = HTML uri_root Uri = "/", SvrType = JSV *EXT htm MimeType = "text/html", SvrType = HTML jsp MimeType = "aplication/jsp", SvrType = JSV "ext,uri" 요청 URL 의파일확장자가 *EXT 절에등록된것인지검사해서처리담당 SERVER 를결정하는데, *EXT 절에해당정보가없으면 *URI 절에서일치하는 URI 를검사해처리담당 SERVER 를결정 http.m *NODE han ServiceOrder = "ext,uri"... *SERVER html SVGNAME = htmlg, MinProc = 2, MaxProc = 3, MyGroup SVGNAME = jsvg, MinProc = 3, MaxProc = 5, *URI uri_dn Uri = "/download", SvrType = HTML uri_root Uri = "/", SvrType = JSV *EXT htm MimeType = "text/html", SvrType = HTML css MimeType = "text/css", SvrType = HTML jpg MimeType = "image/jpeg", SvrType = HTML gif MimeType = "image/gif", SvrType = HTML js MimeType = "aplication/x-javascript", SvrType = HTML jsp MimeType = "aplication/jsp", SvrType = JSV 90