SlideShare a Scribd company logo
1 of 44
Download to read offline
Confidential
[오픈소스컨설팅] Tomcat 운영 메뉴얼_v1.0.docx
Last printed on 11/9/2018 12:12:00 PM
Apache Tomcat 운영 메뉴얼
Focus Area: Apache Tomcat 메뉴얼
Product/Process: Apache Tomcat 8.5.x
Prepared By:
Document Owner(s) Project/Organization Role
Jun-Young Son Senior Engineer
Project Status Report Version Control
Version Date Author Change Description
1.0 2018/11/08 Jun-Young Son Document created
[Version #] [mm/dd/yy] [Change owner]
• [Change 1]
• [Change 2]
• [Change n]
Installation Guide
Confidential Page 2 11/9/2018
TABLE OF CONTENTS
1. 본 문서의 목적............................................................................................................................. 5
1.1 Apache Tomcat 정보.................................................................................................. 5
1.2 Apache Tomcat Versions.......................................................................................... 5
2 APACHE TOMCAT 동작원리.................................................................................................. 7
2.1 Tomcat Architecture ................................................................................................. 7
2.2 Tomcat Connectors (3-Main Connectors).............................................................. 8
3 TOMCAT 구성......................................................................................................................... 8
3.1 Tomcat 표준 구성도.................................................................................................... 8
인스턴스 구성 위치 ................................................................................................ 9
3.2 WAS 구성 : Tomcat 8.5.x.......................................................................................... 9
Web Application Server ...................................................................................... 9
3.3 Tomcat Structure..................................................................................................... 10
Tomcat Component............................................................................................ 10
3.4 Tomcat 엔진 설치 ..................................................................................................... 12
Tomcat 다운로드................................................................................................. 12
Tomcat 설치........................................................................................................ 12
Tomcat 엔진 디렉토리 구조................................................................................ 13
3.5 Tomcat 설치 및 설정 .................................................................................................. 14
Tomcat Instance 디렉터리 구조 ........................................................................... 14
Tomcat 인스턴스 Concept ................................................................................... 14
Tomcat 환경변수.................................................................................................. 15
인스턴스 서비스 포트 변경................................................................................... 15
Installation Guide
Confidential Page 3 11/9/2018
4 TOMCAT 인스턴스 구성......................................................................................................... 16
4.1 Tomcat 인스턴스 생성 .............................................................................................. 16
Tomcat Template & 설정파일 복사 .................................................................. 16
Tomcat 서버 설정................................................................................................ 16
각 인스턴스 서버 설정 파일................................................................................. 17
실행 스크립트의 구성........................................................................................... 17
관리 스크립트의 구성........................................................................................... 23
5 TOMCAT DATASOURCE 설정 ............................................................................................ 25
5.1 JDBC Connection Pool 기본 설정............................................................................ 25
5.2 DataSource 설정....................................................................................................... 29
6 TOMCAT DEPLOY 설정 ....................................................................................................... 30
6.1 Application Deploy................................................................................................... 30
7 TOMCAT 운영 인프라 환경 설정........................................................................................... 31
7.1 OS Kernel Parameter 설정...................................................................................... 31
/etc/sysctl.conf................................................................................................... 31
/etc/security/limits.conf .................................................................................... 32
공통 JVM 옵션 설정............................................................................................. 32
8 TOMCAT 모니터링................................................................................................................ 33
8.1 모니터링 가이드......................................................................................................... 33
모니터링 항목....................................................................................................... 33
System Resource 체크....................................................................................... 35
Process Resource 체크...................................................................................... 36
Server Status...................................................................................................... 37
Installation Guide
Confidential Page 4 11/9/2018
Execute Status – 실행 상태................................................................................ 39
8.2 모니터링 툴 소개........................................................................................................ 41
VisualVM............................................................................................................. 41
Scouter APM....................................................................................................... 42
9 APPENDICES ........................................................................................................................ 43
9.1 Document Guidelines............................................................................................... 43
9.2 Project Migration Report Sections Omitted.......................................................... 43
Installation Guide
Confidential Page 5 11/9/2018
1. 본 문서의 목적
본 문서의 목적은 Tomcat 운영에 필요한 내용을 담은 가이드 문서입니다. 본 문서에는
Tomcat 설치 현황 및 설치 및 환경 구성에 대한 내용이 포함되어 있으며, 기타 모니터링을
위한 정보 등을 모두 포함하고 있습니다.
1.1 Apache Tomcat 정보
1996 년 6 월 제 4 회 JavaOne (당시 Sun Microsystems 주최)가 개발하고 있던,
JSWDK(JavaServer Web Development Kit)을 Apache Software Foundation 에
기증하여 시작 되었습니다.
Tomcat 은 Apache Software Foundation(ASF) 하위의 Apache Tomcat 프로젝트에서
개발 되고 있는 Sevlet/JSP Container 가 포함된 웹 애플리케이션 서버(WAS)입니다.
1.2 Apache Tomcat Versions
⚫ Servlet 버전과 Tomcat Spec
Servlet
Spec
JSP
Spec
EL
Spec
WebSocket
Spec
JASPIC
Spec
Tomcat
Version
Latest
Version
Support
Java
Version
4.0 2.3 3.0 1.1 1.1 9.0.x 9.0.12
8 and
later
3.1 2.3 3.0 1.1 1.1 8.5.x 8.5.34
7 and
later
3.1 2.3 3.0 1.1 N/A 8.0.x 8.0.53
7 and
later
3.0 2.2 2.2 1.1 N/A 7.0.x 7.0.91
6 and
later
2.5 2.1 2.1 N/A N/A 6.0.x 6.0.53
5 and
later
2.4 2.0 N/A N/A N/A 5.5.x 5.5.36
1.4 and
later
2.3 1.2 N/A N/A N/A 4.1.x 4.1.40
1.3 and
later
2.2 1.1 N/A N/A N/A 3.3.x 3.3.2
1.1 and
later
자세한 정보는 URL 을 참조하십시오 http://tomcat.apache.org/whichversion.html
Installation Guide
Confidential Page 6 11/9/2018
⚫ Apache Tomcat Version 구분
- Alpha: Spec 및 버그에서 요구되는 많은 양의 테스트되지 않았거나 누락된
기능이 포함될 수 있으며, 안정적으로 실행되지 않을 수 있습니다.
- Beta: 테스트되지 않은 기능 및 여러가지 minor 버그가 포함될 수 있습니다.
- Stable: minor 버그를 해소하였지만, 상대적으로 추가적인 버그가 포함될 수
있습니다. Stable 릴리즈는 운영환경 용도로 사용이 가능하며 안정적으로 운영이
가능합니다.
⚫ Apache Tomcat 9.x
9.x 는 최신 버전이며 Tomcat 8.x 기반으로 하여 Servlet 4.0, JSP 2.3, EL 3.0,
WebSocket 1.1 및 JASPIC 1.1 사양을 구현합니다.
- HTTP/2 에 대한 지원을 추가 (Java 9 또는 Tomcat 네이티브 라이브러리 필요)
- JSSE 커넥터(NIO 및 NIO2)와 함께 TLS 지원을 위한 OpenSSL 사용에 대한
지원을 추가
- SNI(TLS 가상 호스팅)에 대한 지원을 추가
⚫ Apache Tomcat 8.x
8.x 는 Tomcat 7.0.x 를 기반으로 하여 Servlet 3.1, JSP 2.3, EL 3.0 및 WebSocket
1.1 사양을 구현합니다.
- HTTP/2 에 대한 지원을 추가 (Tomcat 네이티브 라이브러리 필요)
- JSSE 커넥터(NIO 및 NIO2)와 함께 TLS 지원을 위한 OpenSSL 사용에 대한
지원을 추가
- SNI(TLS 가상 호스팅)에 대한 지원을 추가
⚫ Apache Tomcat 7.x
7.x 는 Tomcat 6.0.x 의 향상된 기능을 기반으로 하며 Servlet 3.0, JSP2.2, EL2.2 및
WebSocket 1.1 사양을 구현합니다.
- 웹 응용 프로그램 메모리 누수 감지 및 예방
- Manager 및 Host Manager 응용 프로그램의 향상된 보안
- 일반적인 CSRF 보호
Installation Guide
Confidential Page 7 11/9/2018
- 웹 애플리케이션에 직접 외부 컨텐츠를 포함할 수 있도록 지원
- 리팩토링(커넥터, 라이프 사이클) 및 많은 내부 코드 정리
2 Apache Tomcat 동작원리
2.1 Tomcat Architecture
⚫ Server
✓ 서버의 개념으로 Tomcat 컨테이너 자체를 나타냄
⚫ Service
✓ 서버 내에 존재하는 컴포넌트에 대한 중재자 역할을 수행하며, 엔진에 하나 혹은
그 이상의 커넥터 사용
⚫ Engine
✓ 특정 서비스를 위한 요청 처리 파이프라인을 나타냄
✓ 하나의 서비스는 여러 개의 커넥터를 가질 수 있으며, 엔진은 이러한
커넥터들로부터 모든 요청을 수신하고 처리함
⚫ Host
✓ 특정 네트워크의 이름을 Tomcat 서버에 할당
Installation Guide
Confidential Page 8 11/9/2018
✓ 하나의 엔진의 여러 개의 호스트를 가질 수 있으며, 호스트의 요소는 도메인등과
같이 네트워크 별칭을 지원
⚫ Connector
✓ 클라이언트와의 프로토콜 통신을 처리하며, HTTP 및 AJP 커넥터를 가짐
⚫ Context
✓ 웹 애플리케이션을 나타내며, 하나의 Host 는 여러 개의 Context 를 가질 수 있음
✓
참조 URL: http://tomcat.apache.org/tomcat-8.5-doc/config/server.html
2.2 Tomcat Connectors (3-Main Connectors)
⚫ HTTP
✓ Application 서버로의 direct request 를 받음
✓ Default: enabled, 8080 port
⚫ HTTPS
✓ HTTPS 를 직접 입력으로 받음, SSL keystore 필요
✓ Default: siabled, 8443 port
⚫ AJP
✓ Apache Web Server 를 통해 mod_jk 를 통해 입력 받는 커넥터
✓ Default: enabled, 8009 port
3 Tomcat 구성
3.1 Tomcat 표준 구성도
⚫ 멀티 인스턴스 구성 시 CATALINA_HOME 은 최초 설치 상태에서 변경하지 않고
CATALINA_BASE 를 파일 복사, 스크립트를 추가하여 여러 대의 인스턴스 생성 시
아래의 그림과 같은 구성으로 생성합니다.
Installation Guide
Confidential Page 9 11/9/2018
인스턴스 구성 위치
Tomcat 의 디렉토리 위치는 인스턴스 의 “/opt/was/servers/{인스턴스명}/” 디렉토리에
설치 되어 있습니다.
실제 인스턴스 구성 파일 : server.xml
장비명 설정파일명 SERVER_HOME configuration 경로
# centos10 Server.xml
/opt/was/servers/{인스
턴스명}/”
/opt/was/servers/{
인스턴스명}/”conf
3.2 WAS 구성 : Tomcat 8.5.x
Web Application Server
서버 (WAS01)
Hostname # centos10
서버 IP 192.168.15.100
응용관리계정 wasuser ( / opt/was )
엔진관리계정 wasuser ( / opt/was/ apache-tomcat-8.5.23 )
domain home 위치 /opt/was/servers
기동 /opt/was/servers/{인스턴스명}/bin/start.sh
Installation Guide
Confidential Page 10 11/9/2018
정지 /opt/was/servers/{인스턴스명}/bin/stop.sh
비상정지 /opt/was/servers/{인스턴스명}/bin/kill.sh
Log 위치 /opt/was/servers/{인스턴스명}/logs
Config File server.xml
JVM Heap Size
Xms512m Xmx512m
MetaspaceSize=256m MaxMetaspaceSize=256m
3.3 Tomcat Structure
Tomcat Component
⚫ Server: Server = Catalina Servlet Container = Tomcat Instance
JVM 안에 Singletom 으로 존재, Server 내에 포함되는 Service 들 Life Cycle 관리 담당
⚫ Context: Web Application 을 나타내는 구성요소, Spec 상 ServletContext 와 매핑.
WAS/EAR 파일이나, Exploded 된 디렉토리
Installation Guide
Confidential Page 11 11/9/2018
⚫ Listeners: Tomcat Lifecycle 이벤트 발생시 action 을 수행하는 컴포넌트. Tomcat 의
Lifecycle 을 커스터마이징하고 싶은 경우 활용 가능
⚫ Manager: HTTP 세션을 생성 관리해주는 Session manager
⚫ Logger: JULI(Java Logging Implimentation)라는 자체 구현체를 제공
⚫ Valve: 컨테이너(Engine, Host, Context)와 관련된 각각의 request 처리 pipeline(valve
chain 객체)안에 들어가 있는 컴포넌트
Installation Guide
Confidential Page 12 11/9/2018
3.4 Tomcat 엔진 설치
- Tomcat 엔진은 https://tomcat.apache.org 에서 설치하고자 하는 Tomcat 엔진
버전을 다운로드 받아 설치파일의 파일을 압축을 푸는 것으로 설치를 수행합니다.
- Tomcat Engine 8.x 설치 시 아래의 URL 을 통해 zip, tar.gz 파일을 다운로드 받을 수
있습니다.
• 다운로드 URL: https://tomcat.apache.org/download-80.cgi
Tomcat 다운로드
다운로드 URL 을 통해서 설치 파일을 다운로드 합니다.
Tomcat 설치
Installation Guide
Confidential Page 13 11/9/2018
⚫ 설치 방법은 앞서 설명했던 것과 같이 서버에 업로드를 수행한 후 압축을 풀면 설치가
됩니다.
일반적으로 엔진과 애플리케이션 위치로 구성합니다.
[wasuser@centos10 /installFile/was]$ unzip apache-tomcat-8.5.23.zip
….생략
[wasuser@centos10 /installFile/was]$ls -al
drwxr-xr-x 9 wasuser wasuser 149 Sep 28 2017 apache-tomcat-8.5.23
NOTE. 엔진 설치는 파일 업로드 시간 + 압축 해제 시간이 전부입니다.
Tomcat 엔진 디렉토리 구조
Tomcat 의 디렉토리 구조는 다음과 같습니다.
인스턴스 생성을 위한 기본 template 정보는 별도의 servers 폴더에 위치하고 있습니다.
Installation Guide
Confidential Page 14 11/9/2018
3.5 Tomcat 설치 및 설정
⚫ Tomcat 의 각 서비스별 인스턴스 생성을 위하여 ㈜오픈소스컨설팅에서 제공하는
template 파일을 복사하여 생성을 진행합니다.
Tomcat Instance 디렉터리 구조
각 도메인 디렉토리 하위 정보는 다음과 같이 구성됩니다.
디렉터리 설명
bin Tomcat 를 구동하는 명령 스크립트 디렉토리
conf Tomcat Web 서비스를 위한 설정 파일 디렉토리
lib Tomcat Engine 이 사용하는 외부 라이브러리 (.jar) 디렉토리
log Tomcat 로그 파일 디렉토리 (catalina.out)
temp Tomcat Engine 에서 사용하는 임시 파일 디렉토리
webapps Tomcat 에서 웹 애플리케이션 Deploy 디렉토리
work jsp 파일이 서블릿으로 컴파일(.class)된 디렉토리
Tomcat 인스턴스 Concept
- Tomcat Engine 은 CATALINA_HOME 을 기준으로 “lib”, “bin” 디렉토리만
사용합니다.
- 실제 서비스를 담당하는 인스턴스들은 “conf”, “logs”, “temp”, “webapps”, “work”
디렉토리를 사용합니다.
- 이와 같은 디렉토리를 분리합으로써 “멀티 인스턴스” 환경을 구성합니다.
Installation Guide
Confidential Page 15 11/9/2018
$CATALINA_HOME/bin/startup.sh 실행하면 실제로 catalina.sh 이 실행됩니다.
catalina.sh 또는 Catalina.bat 은 CATALINA_HOME 환경 변수를 통해서 “Tomcat
Engine” 디렉토리를 통해서 기동합니다.
Tomcat 환경변수
Tomcat 내의 실제 인스턴스의 속성을 정의 한 환경 변수입니다
.
• CATALINA_HOME: Tomcat Engine 홈 디렉토리
• CATALINA_BASE: 멀티 인스턴스의 홈 디렉토리
• SERVER_NAME: 멀티 인스턴스의 서버명
• PORT_OFFSET: 멀티 인스턴스에서 사용하는 계산되는 port 범위
• COMP_USER: 인스턴스를 조작하기 위한 사용자 계정
• LOG_BASE: 멀티 인스턴스의 로그 디렉토리 지정
인스턴스 서비스 포트 변경
각 인스턴스 별로 server.xml 을 수정합니다.
Installation Guide
Confidential Page 16 11/9/2018
변경 이유는 동일한 포트를 사용하면서 서버를 기동하려 할 때, Port 충돌로 인해 서버
기동이 되지 않습니다. 인스턴스에서 지정한 port offset(env.sh) 과 default port 를 더하기
연산을 하여 인스턴스 내에 offset 연산으로 인해 포트 충돌에 대한 문제점을 해결할 수
있습니다.
- Shutdown Port
<Server port="${shutdown.port}" shutdown="SHUTDOWN">
- http port
<Connector port="${http.port}" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="${ssl.port}" />
- ajp port
<Connector port="${ajp.port}" protocol="AJP/1.3" redirectPort="${ssl.port}" />
4 Tomcat 인스턴스 구성
4.1 Tomcat 인스턴스 생성
Tomcat 인스턴스 설치는 Naming Rule 에 따라 /opt/was/{업무도메인}/{업무명} 라는
디렉토리를 사용하도록 합니다.
Tomcat Template & 설정파일 복사
㈜오픈소스컨설팅에서 제공하는 스크립트는 CATALINA_BASE/bin 디렉토리에
저장하고 $CATALINA_HOME/conf 파일을 기본 설정 파일을 복사하여 설치할
인스턴스에 복사합니다.
cp –fR /opt/was/apache-tomcat-8.5.23/conf /opt/was/server/{인스턴스명}/conf
Tomcat 서버 설정
노드명 서비스명 인스턴스명 Port offset Shutdown http ajp
Installation Guide
Confidential Page 17 11/9/2018
# centos
10
test test-svr-11 100 8105 8180 8109
각 인스턴스 서버 설정 파일
노드명 configuration 경로 configuration 파일명
# centos
10
/opt/was/servers/{인스턴스명}/conf server.xml
실행 스크립트의 구성
Setenv (환경설정, java 옵션 적용)
서비스에 해당하는 모든 설정이 env.sh 를 통해서 이루어지며 JVM 옵션 등은
env.sh 파일만 조작하시면 됩니다.(JVM 옵션, JNDI 포트 포함)
env.sh
#!/bin/bash
#************************ Warning **********************************
#* *
#* This configuration is property of OPEN SOURCE CONSULTING, INC. *
#* Don't distribute this to other project. *
#* *
#* Contact jchoi@osci.kr(http://www.osci.kr) *
#*******************************************************************
# This is tomcat env.sh for iosp by Open Source Consulting, Inc
export DATE=`date +%Y%m%d_%H%M%S`
#####################################
## Set Tomcat base env #####
#####################################
export JAVA_HOME=/usr/java/jdk1.8.0_152
export SERVER_NAME=tomcat8_11
export CATALINA_HOME=/opt/was/apache-tomcat-8.5.23
Installation Guide
Confidential Page 18 11/9/2018
export CATALINA_BASE=/opt/was/servers/${SERVER_NAME}
export PORT_OFFSET=100
export COMP_USER=wasuser
#####################################
##### Set Log env #####
#####################################
export LOG_BASE=${CATALINA_BASE}/logs
export LOG_DIR=${LOG_BASE}/log
export GC_LOG_DIR=${LOG_BASE}/gclog
export HEAP_DUMP_DIR=${LOG_BASE}/heaplog
#########################################
## Set Port Configuration ######
#########################################
# Default Ports are as below #
# HTTP_PORT : 8080 #
# SSL_PORT : 8443 #
# SHUTDOWN_PORT : 8005 #
#########################################
export HTTP_PORT=$(expr 8080 + $PORT_OFFSET)
export AJP_PORT=$(expr 8009 + $PORT_OFFSET)
export SSL_PORT=$(expr 8443 + $PORT_OFFSET)
export SHUTDOWN_PORT=$(expr 8005 + $PORT_OFFSET)
if [ "x$JAVA_OPTS" = "x" ]; then
# JVM Options : Memory
JAVA_OPTS="$JAVA_OPTS -Xms512m -Xmx512m"
JAVA_OPTS="$JAVA_OPTS -XX:MetaspaceSize=256m -
XX:MaxMetaspaceSize=256m"
JAVA_OPTS="$JAVA_OPTS -XX:+UseG1GC"
JAVA_OPTS="$JAVA_OPTS -XX:+UnlockDiagnosticVMOptions"
Installation Guide
Confidential Page 19 11/9/2018
JAVA_OPTS="$JAVA_OPTS -XX:+G1SummarizeConcMark"
JAVA_OPTS="$JAVA_OPTS -XX:InitiatingHeapOccupancyPercent=35"
JAVA_OPTS="-server"
JAVA_OPTS="$JAVA_OPTS -Dserver=$SERVER_NAME"
JAVA_OPTS="$JAVA_OPTS -Dhttp.port=$HTTP_PORT"
JAVA_OPTS="$JAVA_OPTS -Dajp.port=$AJP_PORT"
JAVA_OPTS="$JAVA_OPTS -Dssl.port=$SSL_PORT"
JAVA_OPTS="$JAVA_OPTS -Dshutdown.port=$SHUTDOWN_PORT"
JAVA_OPTS="$JAVA_OPTS -Djava.library.path=$CATALINA_HOME/lib/"
JAVA_OPTS="$JAVA_OPTS -verbose:gc"
JAVA_OPTS="$JAVA_OPTS -Xloggc:${GC_LOG_DIR}/gc.log"
JAVA_OPTS="$JAVA_OPTS -XX:+PrintGCDetails"
JAVA_OPTS="$JAVA_OPTS -XX:+PrintGCTimeStamps"
JAVA_OPTS="$JAVA_OPTS -XX:+HeapDumpOnOutOfMemoryError"
JAVA_OPTS="$JAVA_OPTS -
XX:HeapDumpPath=${HEAP_DUMP_DIR}/java_pid.hprof"
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote"
CATALINA_OPTS="$CATALINA_OPTS -
Dcom.sun.management.jmxremote.port=8086"
CATALINA_OPTS="$CATALINA_OPTS -
Dcom.sun.management.jmxremote.ssl=false"
CATALINA_OPTS="$CATALINA_OPTS -
Dcom.sun.management.jmxremote.authenticate=false"
CATALINA_OPTS="$CATALINA_OPTS -
Djava.rmi.server.hostname=192.168.15.100"
JAVA_OPTS="$JAVA_OPTS -Djava.net.preferIPv4Stack=true"
JAVA_OPTS="$JAVA_OPTS -Dsun.rmi.dgc.client.gcInterval=3600000"
JAVA_OPTS="$JAVA_OPTS -Dsun.rmi.dgc.server.gcInterval=3600000"
JAVA_OPTS="$JAVA_OPTS -Dsun.lang.ClassLoader.allowArraySyntax=true "
Installation Guide
Confidential Page 20 11/9/2018
JAVA_OPTS="$JAVA_OPTS -Djava.awt.headless=true"
JAVA_OPTS="$JAVA_OPTS -Djava.net.preferIPv4Stack=true"
JAVA_OPTS="$JAVA_OPTS -Djava.security.egd=file:/dev/./urandom"
# JAVA_OPTS="$JAVA_OPTS -
Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager"
fi
#####################################
## Athena Dolly Clustering ###
#####################################
#export JAVA_OPTS="$JAVA_OPTS -Ddolly.properties=/opt/dolly-agent-
new/dolly.properties"
#export JAVA_OPTS="$JAVA_OPTS -javaagent:/opt/dolly-agent-new/lib/core-1.0.0-
SNAPSHOT.jar"
#####################################
## Set Scouter Tomcat Agent ###
#####################################
#export JAVA_OPTS="$JAVA_OPTS -
javaagent:/opt/apm/scouter/agent.java/scouter.agent.jar"
#export JAVA_OPTS="$JAVA_OPTS -
Dscouter.config=/opt/apm/scouter/agent.java/conf/${SERVER_NAME}.conf"
export JAVA_OPTS
echo "================================================"
echo "JAVA_HOME=$JAVA_HOME"
echo "CATALINA_HOME=$CATALINA_HOME"
echo "SERVER_HOME=$CATALINA_BASE"
echo "HTTP_PORT=$HTTP_PORT"
echo "SSL_PORT=$SSL_PORT"
echo "AJP_PORT=$AJP_PORT"
echo "SHUTDOWN_PORT=$SHUTDOWN_PORT"
Installation Guide
Confidential Page 21 11/9/2018
echo "================================================"
start (인스턴스 기동)
start.sh 는 Java Processer 를 구동 시킬 때 사용하며 로그파일의 백업
옵션등을 설정할 수 있습니다.
start.sh
#!/bin/bash
. ./env.sh
DATE=`date +%Y%m%d%H%M%S`
# Process Check ---------------------------------------
PID=`ps -ef | grep java | grep "=$SERVER_NAME" | awk '{print $2}'`
echo $PID
if [ e$PID != "e" ]
then
echo "Tomcat ($SERVER_NAME) is already RUNNING..."
exit;
fi
# WAS User Check----------------------------------------
UNAME=`id -u -n`
if [ e$UNAME != "e$COMP_USER" ]
then
echo "$COMP_USER USER to start this SERVER! - $SERVER_NAME..."
exit;
fi
# Make LOG Directory------------------------------------
if [ ! -d "${LOG_DIR}" ];
then
Installation Guide
Confidential Page 22 11/9/2018
mkdir -p ${LOG_DIR}
fi
if [ ! -d "${GC_LOG_DIR}" ];
then
mkdir -p ${GC_LOG_DIR}
fi
if [ ! -d "${HEAP_DUMP_DIR}" ];
then
mkdir -p ${HEAP_DUMP_DIR}
fi
# Make Temp Directory------------------------------------
if [ ! -d $CATALINA_BASE/temp ]
then
echo "temp directory is not exist. create temp directory."
mkdir -p $CATALINA_BASE/temp
fi
# -------------------------------------------------------
nohup $CATALINA_HOME/bin/catalina.sh run >> ${LOG_DIR}/$SERVER_NAME.out
2>&1 &
# ------------------------------------------------------
if [ e$1 = "enotail" ]
then
echo "Starting... $SERVER_NAME"
exit;
fi
# -----------------------------------------------------
sleep 1
Installation Guide
Confidential Page 23 11/9/2018
$CATALINA_BASE/bin/tail.sh
shutdown (요청 처리 후 종료)
stop.sh 파일은 JAVA Processer 를 종료할 때 사용합니다.
stop.sh
#!/bin/sh
. ./env.sh
$CATALINA_HOME/bin/shutdown.sh
kill (강제 종료)
kill.sh 파일은 kill -9 명령으로 즉시 종료할 때 사용합니다.
Linux OS 의 경우는 다음의 script 를 이용합니다.
kill.sh
#!/bin/bash
. ./env.sh
ps -ef | grep java | grep "server=$SERVER_NAME" | awk {'print "kill -9 " $2'}
| sh -x
관리 스크립트의 구성
Thread dump (장애 시 dump 파일 생성)
dump.sh 파일은 인스턴스가 느려지거나, JVM 의 현재 상황을 보려고 Thread Dump 를
얻으려고 할 때 사용하는 스크립트입니다.
Installation Guide
Confidential Page 24 11/9/2018
dump.sh
#!/bin/sh
. ./env.sh
for count in 1 2 3 4 5; do
echo "Thread Dump : $count"
for i in `ps -ef | grep java | grep "SERVER=$SERVER_NAME " | awk '{print
$2}'`;do
echo "+kill -3 $i"
kill -3 $i
echo "sleep 1 sec"
sleep 1
done
echo "done"
sleep 3
done
Process status (tomcat process 확인)
status.sh 스크립트는 프로세스가 동작 중인지 체크하기 위한 스크립트입니다.
status.sh
#!/bin/sh
. ./env.sh
ps -ef | grep java | grep "SERVER=$SERVER_NAME "
Installation Guide
Confidential Page 25 11/9/2018
tail.sh
tail.sh 는 nohup 로그를 보기 위한 스크립트입니다.
tail.sh
#!/bin/sh
. ./env.sh
tail -f $DOMAIN_BASE/$SERVER_NAME/log/server.log
5 Tomcat DataSource 설정
⚫ Tomcat 은 Database Connection Pool 로 Commons DBCP 와 Tomcat JDBC Pool 의
2 가지 Pool 을 제공
Common DBCP: org.apache.tomcat.dbcp. dbcp.BasicDataSourceFactory (default)
- org.apache.common -> org.apache.tomcat. 패키지 변경
Tomcat JDBC: org.apache.tomcat.jdbc.pool.DataSourceFactory
⚫ DBCP 는 Apache Commons 프로젝트가 제공하는, Database Connection Pool 로
오픈 소스 Database Connection Pool 을 가장 많이 알려져 있고, 많이 사용하고
있습니다.
⚫ Tomcat JDBC 는 Apoache Tomcat 프로젝트가 독립적으로 개발한 Database
Connection Pool 입니다.
5.1 JDBC Connection Pool 기본 설정
공통 DB 접속 설정
구분 설명 비고
username
DB 연결을 위해 JDBC 드라이버에 전달되는 사용자
이름
password
DB 연결을 위해 JDBC 드라이버에 전달되는 사용자
패스워드
Installation Guide
Confidential Page 26 11/9/2018
url DB 연결을 위해 JDBC 드라이버에 전달되는 URL
driverclassname
JDBC 드라이버의 FQCN (Fully Qualified Class
Name)
connectionProperties
DB 연결을 위해 JDBC 드라이버에 전달되는 연결
Properties
항목 설명 기본값
defaultAutoCommit Connection 의 AutoCommit true
defaultReadOnly Connection 기본 ReadOnly 상태 dirver
defaultTransactionsolation
Connections 의 기본 Transactionsolation 상태
-READ_COMMITTED
-READ_UNCOMMITTED
-REPEATABLE_READ
-SERIALIZABLE
defaultCatalog Connection 의 defaultCatalog dirver
cacheState
Connection 이 사용될 때 이후 모든 쓰기에서
readOnly 와 autoCommit 설정을 캐시
true
defaultQueryTimeout
Null 이 아닌 경우 Connection 에서 사용할 쿼리
시간을 제한
null
enableAutoCommitOnReturn
Connection 이 반환될 때
Connection.setAutoCommit(true)인지 체크되고
해당 값으로 설정
true
rollbackOnReturn Connection 반환될 때 rollback 수행 true
⚫ Common JDBC Connection 설정
항목 설명 기본값
Initialsize Pool 이 시작될 때 생성되는 초기 Connection 수 0
maxTotal Pool 에서 동시에 할당할 수 있는 최대 연결 수 8
Maxidle Pool 에서 최대 idle Connection 수 8
Minidle Pool 에서 최소 idle Connection 수 0
maxWaitMillis Connection 을 얻기 위해 대기 시간 무제한
⚫ Tomcat JDBC Connection 설정
Installation Guide
Confidential Page 27 11/9/2018
항목 설명 기본값
Initialsize Pool 이 시작될 때 생성되는 초기 Connection 수 10
maxActive Pool 에서 동시에 할당할 수 있는 최대 연결 수 100
Maxidle Pool 에서 최대 idle Connection 수 100
Minidle Pool 에서 최소 idle Connection 수 10
maxWaitMillis Connection 을 얻기 위해 대기 시간 무제한
⚫ JDBC Connection Validation 설정
항목 설명 기본값
validationQuery Connection 유효성 확인을 위한 SQL Query
testOnBorrow
Pool 에서 Connection 을 전달하기 전에 유효성을
검증. 검증에 실패했을 경우, 해당 연결을 삭제하고,
새롭게 Pool 에서 Connection 시도
testOnReturn
Pool 에 Connection 을 반환하기 전에 Connection
유효성을 검증
testWileidle
Idle 상태의 Connection 에 대한 유효성을 검증
검증에 실패할 경우 해당 Connection 을 파기함
이기능은 Evictor 를 이용하기 때문에 Evictor 를
활성화 해야됨(timeBetweenEvictionRunsMillis 설정
참조)
initSQL Connection 을 만들 때 실행되는 SQL Query
validationClassName
Validation Class 명을 지정.
이 속성을 지정 시 vaildationQuery 에 의한 검증 대신,
Validator Class 에 의한 연결의 검증이 이루어짐
(org.apache.tomcat.jdbc.pool.Validator 인터페이스
구현 필요)
validationInterval Vaildation 의 실행 간격 지정 30 초
logValidationErrors Validation 중 오류 발생시, 로그 출력할지에 대한 설정 false
⚫ PoolCleaner 설정(Evictor)
항목 설명 기본값
Installation Guide
Confidential Page 28 11/9/2018
timeBetweenEvictionRunsMilles Idle 상태의 Connection 을 Check 하는 간격 5 초
minEvictableIdleTimeMillis Idle Connection 의 생존 기간 60 초
⚫ Connection Leak 검출 설정 (removeAbandoned)
항목 설명 기본값
removeAbandoned Connection 누수 감지 설정 사용 여부 false
removeAbandonedTimeout Connection 누수로 판단하기까지의 시간 60 초
logAbandoned
Connection 누수를 감지했을 때,
Connection 을 Close 하지 않은
애플리케이션의 Stuck Thread 를 로그로
출력 여부의 설정
False
suspectTimeout
Conection 누수의 의심에 대한 판단
할때까지의 시간
suspectTimeout 시간을 초과한
Connection 에 대해 경고 로그 및 JMX 에
통지를 수행
0
AbandonWhenPercentageFull
누수된 Connection 을 파기할 비율을 설정
0~100 사이로 설정하며, 이 설정을 초과한
누수 Connection 을 파기
RemoveAbandonedTimeout 가 초과한
Connection 은 모두 파기
0
⚫ DataSource 설정 샘플
<?xml version='1.0' encoding='utf-8'?>
<Context>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<Resource name="jdbc/OracleDS"
auth="Container"
type="javax.sql.DataSource"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
testWhileIdle="true"
testOnBorrow="false"
testOnReturn="false"
validationQuery="SELECT 1 FROM DUAL"
validationInterval="30000"
timeBetweenEvictionRunsMillis="30000"
maxActive="10"
maxIdle="5"
maxWait="10000"
Installation Guide
Confidential Page 29 11/9/2018
initialSize="5"
removeAbandonedTimeout="60"
removeAbandoned="true"
logAbandoned="true"
minEvictableIdleTimeMillis="30000"
jmxEnabled="false"
jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.Connection
State;org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer"
username="scott"
password="jan01jan"
driverClassName="oracle.jdbc.OracleDriver"
poolPreparedStatements="true"
url="jdbc:oracle:thin:@192.168.10.100
</Context>
5.2 DataSource 설정
⚫ Global Resource Level
- DataSource Pool Global Level 공유
✓ Global Resource(server.xml) + Resource Link(application-context.xml)
✓ Server: ${CATALINA_HOME}/conf/server.xml
<Server port="${port.shutdown}"
shutdown="ARGO_INSTANCE_SHUTDOWN">
<GlobalNamingResources>
<Resource name="jdbc/argo" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://10.0.1.88:3306/oom"
username="root“ password="uCO5FkZ3NfgDo/LWB0l+0A=="
……
/>
</GlobalNamingResources>
</Server>
⚫ Context Level
- DataSource Pool 해당 Context 별 생성됨
- Global Context (context.xml)
✓ 모든 Application 에서 사용 가능
✓ Context(1) : ${CATALINA_HOME}/conf/context.xml
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Context>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<ResourceLink global="jdbc/argo" name="jdbc/argo"
type="javax.sql.DataSource"/>
Installation Guide
Confidential Page 30 11/9/2018
</Context>
- Application Context (application-context.xml)
✓ 해당 Application 에서만 사용 가능
✓ Context(2) :
${CATALINA_HOME}/conf/Catalina/localhost/${CONTEXT_NAME}.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Context docBase="/sorc001/argo/application/sample-simpleweb" path="/"
reloadable="false">
<ResourceLink global="jdbc/argo" name="jdbc/argo"
type="javax.sql.DataSource"/>
</Context>
6 Tomcat Deploy 설정
6.1 Application Deploy
Tomcat 인스턴스는 $CATALINA_BASE/webapps 또는 다른 경로일 경우 server.xml 에
context 를 지정하여 deploy 설정이 가능합니다.
⚫ Deploy Type
✓ Archive File Type
✓ Exploded Structure
⚫ Web Archive
✓ Catalina.base/webapps 디렉토리에 .war 파일을 복사하여 디플로이
⚫ Exploded
✓ Catalina.base/webapps 디렉토리에 exploded 형태의 디렉토리 구조를 사용
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="false">
<Context path="" docBase="/opt/was/apps/test.war" reloadable="false"/>
</Host>
항목 설명 기본값
path 컨텍스트 경로에 대한 설정
docBase 애플리케이션 document 경로 설정
reloadable 클래스 변경시 마다 자동 reload
Installation Guide
Confidential Page 31 11/9/2018
7 Tomcat 운영 인프라 환경 설정
7.1 OS Kernel Parameter 설정
/etc/sysctl.conf
리눅스 OS 시스템에서 기본 default 설정에서 몇가지 설정을 변경 하게 되면 빠른 장애 감지
효과 등이 있으므로 튜닝 요소가 됩니다.
해당 설정은 다음의 /etc/sysctl.conf 파일에 추가하여 설정을 할 수 있습니다.
항목 설명 기본값 권장값
net.ipv4.neigh.default.unres_qlen Increase TCP 6 100
net.ipv4.tcp_keepalive_time Drop Keep-alive time 7200 30
net.ipv4.tcp_fin_timeout
Drop it so lack of FIN times
out quicker
60 10
net.core.netdev_max_backlog
Increase number of
incoming connections
backlog
1000 2500
net.ipv4.tcp_retries1
How many times to retry
killing an alive TCP
connection
3 2
net.ipv4.tcp_retries2
How many times to retry
killing an alive TCP
connection
15 3
net.ipv4.ip_local_port_ran Increase Local port range
32768
60999
1024
65000
net.core.rmem_max Max TCP receive Buffer 25165824 16777216
net.core.rmem_default Default TCP receive Buffer 8388608 16777216
net.core.wmem_max Max TCP Send Buffer 25165824 16777216
net.core.wmem_default Default TCP send Buffer 212992 16777216
Installation Guide
Confidential Page 32 11/9/2018
net.ipv4.tcp_window_scali
ng
Enable really big(>65kb)
TCP window
scaling
0 1
net.ipv4.tcp_timestamps Turn off timestamp 1 0
net.ipv4.tcp_sack Turn off tcpsack 1 0
net.ipv4.tcp_orphan_retrie
s
유저파일 핸들에 할당되지
않은 연결에
몇 번 재시도할지
7 0
vm.swappiness Swap 사용량결정 10 1
/etc/security/limits.conf
Open files 및 native stack 관련해서 limits 설정을 변경합니다. ( ulimit -a)
asmanager soft nofile 8192
asmanager hard nofile 65535
asmanager soft nproc 8192
asmanager hard nproc 65535
공통 JVM 옵션 설정
항목 설명 값
client/server
-client : JVM hotspot 의 client 모드로 사용,
client 모드는 Application 시작 시간과 메모리 사용량을
최소로 수행 -
server
-server : 컴파일 등 최적화를 수행하여 최적의 성능으로
수행
Xms 초기 메모리 크기
1024
M
Xmx 최대 메모리 크기 1024
M
-XX:+PrintGCDetails
Garbage Collection 시 조금 더 상세한 항목의 로그 출력을
위한 설정
-XX:+ UseG1GC - G1GC를 사용하기 위한 설정
Installation Guide
Confidential Page 33 11/9/2018
-
XX:+HeapDumpOnOu
tOfMemoryError
JVM 에서 OutOfMemory 에러가 발생할 경우 Heap
Memory Dump 를 생성할지 여부를 결정
-XX:HeapDumpPath Heap Memory 생성시 생성 위치
-Xloggc
GC 로그를 별도의 파일로 저장하기 위한 옵션
Memory 사용 추이를 확인할 수 있음.
-
Dcom.sun.managemen
t.jmxremote
-
Dcom.sun.managemen
t.jmxremote.port=1501
1
-
Dcom.sun.managemen
t.jmxremote.authentica
te=false
-
Dcom.sun.manageme
nt.jmxremote.ssl=false
JMX : Java Management Extention 활성화 내용으로
서버의 모니터링을 위한 설정
8 Tomcat 모니터링
8.1 모니터링 가이드
모니터링 항목
대항목 중항목 세부항목 설명 모니터링 결과
OS
System
Resource Usage
CPU 사용량 CPU 전체 사용량 양호
Memory 사용량 Memory 전체 사용량 양호
운영환경
서버 상태
Process
Resource Usage
Process CPU 과부하
사용
프로세스 CPU 사용률 양호
Disk Usage 설치 디스크의 사용량 양호
Server Status Server Status Server Life Cycle 양호
실행 상태
Execute Status Thread status
실행 쓰레드 및
idle thread status
양호
Garbage
Collection
Full GC Duration Full GC 처리 상태 양호
Installation Guide
Confidential Page 34 11/9/2018
Heap Memory
Heap Memory Init 힙메모리 초기값 양호
Heap Memory Max 힙메모리 최대값 설정 양호
Perm Area Max Size MaxPermSize 의 설정 양호
JDBC
커넥션풀
Configuration
JDBC url
jdbc connection meta
data URL
양호
JDBC driver name jdbc driver class name 양호
Monitorming Connections 사용중인 커넥션 개수 양호
로그 분석 ServerLog
Critical Message 부팅 Critical 에러 양호
Too many open files 파일 오픈 개수 초과 양호
OutOfMemoryError 힙메모리 부족 양호
Installation Guide
Confidential Page 35 11/9/2018
System Resource 체크
cpu 사용량
사용서비스 되어지는 CPU 의 사용량 체크를 위하여 다음의 명령어를 통해 모니터링을
진행합니다.
vmstat 1 100
항목 설명
us : user cpu usage
sy : system cpu usage
id : cpu idle usage
정상 여부 확인 : id 60% 이상일 경우 양호, id 30% 미만인 경우 위험
$ vmstat 1 100
procs -----------memory---------- ---swap-- -----io---- --
system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 853424 69016 4648 29128 0 0 13 8 8 4 0 0 99 0 0
0 0 853424 69008 4648 29128 0 0 0 0 113 242 0 0 100 0 0
0 0 853424 69008 4648 29128 0 0 0 0 75 211 0 0 100 0 0
0 0 853424 69008 4648 29128 0 0 0 0 106 254 0 0 100 0 0
0 0 853424 69008 4648 29128 0 0 0 0 73 208 0 0 100 0 0
0 0 853424 69008 4648 29128 0 0 0 0 118 263 0 0 100 0 0
0 0 853424 69008 4648 29128 0 0 0 0 78 203 0 0 100 0 0
0 0 853424 69008 4648 29128 0 0 0 0 95 244 0 0 100 0 0
0 0 853424 69008 4648 29128 0 0 0 0 89 219 0 0 100 0 0
0 0 853424 69008 4648 29128 0 0 0 0 85 237 0 0 100 0 0
0 0 853424 69008 4648 29128 0 0 0 0 93 221 0 0 100 0 0
0 0 853424 69008 4648 29128 0 0 0 0 109 244 1 0 100 0 0
Installation Guide
Confidential Page 36 11/9/2018
Memory 사용량
사용서비스 되어지는 Memory 사용량 체크를 위하여 다음의 명령어를 통해 모니터링을
진행합니다.
free -m
항목 설명
total : 전체 메모리 용량
used : 메모리 사용량
free : 여유 메모리 공간
shared : 공유메모리 사용량
buffers : 버퍼 메모리 공간
cached : 캐쉬메모리 사용량
정상 여부 확인 : free 최소 여유공간이 전체 메모리 대비 최소 10% 이상일 경우
$ free -m
total used free shared buffers cached
Mem: 1877 1810 66 0 0 30
-/+ buffers/cache: 1779 98
Swap: 4031 831 3200
Process Resource 체크
프로세스 과부하 cpu 여부 확인
서비스 되어지는 process 의 CPU 사용량이 과부하 인지 여부를 체크합니다.
top
항목 설명
top 명령을 통해서 해당 프로세스의 현재 CPU 정보를 확인합니다.
정상 여부 확인 : 프로세스당 CPU 사용이 많은지 여부를 확인합니다.
$ top
top - 03:14:41 up 14 days, 12:59, 4 users, load average: 0.19, 0.13, 0.09
Installation Guide
Confidential Page 37 11/9/2018
Tasks: 336 total, 1 running, 335 sleeping, 0 stopped, 0 zombie
Cpu(s): 3.7%us, 3.5%sy, 0.0%ni, 92.1%id, 0.7%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 16271536k total, 15962368k used, 309168k free, 697304k buffers
Swap: 16777208k total, 529588k used, 16247620k free, 6697584k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
27150 wasuser 20 0 3016276 102456 14680 S 0.3 2.6 1:55.56 /usr/java/jdk1.8.0_152/bin/java -
Djava.util.logging.config.file=/opt/+
32607 wasuser 20 0 2411612 349528 18928 S 0.3 9.0 64:52.97 /usr/java/jdk1.7.0_80/bin/java -
D[Standalone] -XX:+UseCompressedOops +
1 root 20 0 191108 3044 1952 S 0.0 0.1 9:22.88 /usr/lib/systemd/systemd --switched-root -
-system --deserialize 21
Disk Usage
서비스 되어지는 Disk 사용량을 파악하여 여유 공간을 확인합니다.
df -h
정상 여부 확인 : 서비스 사용 영역 및 root 파일 시스템의 사용율이 80% 인 경우
위험으로 간주합니다.
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_rhevmtest-lv_root
26G 23G 1.9G 93% /
tmpfs 939M 72K 939M 1% /dev/shm
/dev/vda1 485M 38M 422M 9% /boot
Server Status
Service Process 정상 여부 확인
현재 서버 상태에 대해서 모니터링을 합니다.
ps –ef | grep ${processName}
Installation Guide
Confidential Page 38 11/9/2018
ex) ps –ef | grep java | grep SERVER_NAME
항목 설명
ps 명령을 통해서 해당 프로세스의 현재 동작 여부를 확인합니다.
정상 여부 확인 : 프로세스 목록에 해당 내용이 있어야만 합니다.
$ ps -ef|grep java|grep SERVER_NAME
wasuser 27150 1 65 21:26 pts/2 00:00:09 /usr/java/jdk1.8.0_152/bin/java -
Djava.util.logging.config.file=/opt/was/servers/tomcat8_11/conf/logging.properties -
java.util.logging.manager=org.apache.juli.ClassLoaderLogManager -server -Dserver=tomcat8_11 -
Dhttp.port=8180 -Dajp.port=8109 -Dssl.port=8543 -Dshutdown.port=8105 -
Djava.library.path=/opt/was/apache-tomcat-8.5.23/lib/ -verbose:gc -
Xloggc:/opt/was/servers/tomcat8_11/logs/gclog/gc.log -XX:+PrintGCDetails -
XX:+PrintGCTimeStamps -XX:+HeapDumpOnOutOfMemoryError -
XX:HeapDumpPath=/opt/was/servers/tomcat8_11/logs/heaplog/java_pid.hprof -
Djava.net.preferIPv4Stack=true -Dsun.rmi.dgc.client.gcInterval=3600000 -
Dsun.rmi.dgc.server.gcInterval=3600000 -Dsun.lang.ClassLoader.allowArraySyntax=true -
Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -Djava.security.egd=file:/dev/./urandom -
Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
-classpath /opt/was/apache-tomcat-8.5.23/bin/bootstrap.jar:/opt/was/apache-tomcat-
8.5.23/bin/tomcat-juli.jar -Dcatalina.base=/opt/was/servers/tomcat8_11 -
Dcatalina.home=/opt/was/apache-tomcat-8.5.23 -
Djava.io.tmpdir=/opt/was/servers/tomcat8_11/temp org.apache.catalina.startup.Bootstrap start
Port Listen 정상 여부 확인
netstat –an | grep ${servicePort}
ex) netstat –an | grep 8180
항목 설명
netstat 명령을 통해서 해당 프로세스의 현재 Network 동작 여부를 확인합니다.
정상 여부 확인 : Port 목록에 해당 서비스에서 사용되는 포트가 LISTEN 항목으로 되어
있어야 합니다.
Installation Guide
Confidential Page 39 11/9/2018
$ netstat -an | grep 8180
tcp 0 0 0.0.0.0:8180 0.0.0.0:* LISTEN 27150/java
로그 파일 사이즈 체크
서비스 되어지는 해당 process 의 server 로그 및 기타 gc, nohup 로그등의 사용량을
체크합니다.
du –csh *log
정상 여부 확인 : 서비스 사용 로그 파일이 최대 2G 이내여야 합니다.
$ du –csh *
20K catalina.2018-05-03.log
20K catalina.2018-07-03.log
136K catalina.2018-07-10.log
36K catalina.2018-07-19.log
12K catalina.2018-11-08.log
224K total
Execute Status – 실행 상태
Garbage Collection 로그를 통한 서비스 정상 여부
서버 기동시 verbosegc 옵션을 통하여 gc 모니터링을 통한 서비스 정상 여부를
확인합니다.
tail
ex) tail -f gc.log.20140513
항목 설명
tail 명령을 통해서 현재 verbosegc 로그를 확인하여 지속적인 Full GC 여부를
모니터링합니다.
정상 여부 확인 : 2~5 지속적인 Full GC 로그가 보인다면 비정상으로 판단
Installation Guide
Confidential Page 40 11/9/2018
단 GC 와 GC 사이의 간격이 넓다면 정상으로 간주한다.
$ tail -f gc.log.20140401143142
182.278: [GC [PSYoungGen: 195658K->12765K(270336K)] 405054K->234073K(969728K),
0.0317180 secs] [Times: user=0.06 sys=0.01, real=0.04 secs]
194.332: [GC [PSYoungGen: 201693K->12224K(268288K)] 423001K->245396K(967680K),
0.0428970 secs] [Times: user=0.07 sys=0.01, real=0.04 secs]
352.075: [GC [PSYoungGen: 257408K->15776K(302080K)] 628028K->402092K(1001472K),
0.0556460 secs] [Times: user=0.10 sys=0.00, real=0.06 secs]
498.763: [GC [PSYoungGen: 75588K->288K(299520K)] 461905K->402244K(998912K), 0.0359840
secs] [Times: user=0.04 sys=0.01, real=0.04 secs]
498.799: [Full GC [PSYoungGen: 288K->0K(299520K)] [ParOldGen: 401956K-
>347983K(699392K)] 402244K->347983K(998912K) [PSPermGen: 72985K->70633K(143872K)],
1.4463740 secs] [Times: user=2.71 sys=0.00, real=1.44 secs]
508.691: [GC [PSYoungGen: 3035K->64K(302080K)] 351018K->348047K(1001472K), 0.0066010
secs] [Times: user=0.01 sys=0.00, real=0.00 secs]
508.697: [Full GC [PSYoungGen: 64K->0K(302080K)] [ParOldGen: 347983K->340430K(699392K)]
348047K->340430K(1001472K) [PSPermGen: 70636K->70636K(162304K)], 0.5912480 secs]
[Times: user=1.13 sys=0.00, real=0.59 secs]
509.497: [GC [PSYoungGen: 1345K->64K(302080K)] 341775K->340494K(1001472K), 0.0111840
secs] [Times: user=0.01 sys=0.00, real=0.01 secs]
509.509: [Full GC [PSYoungGen: 64K->0K(302080K)] [ParOldGen: 340430K->340427K(699392K)]
340494K->340427K(1001472K) [PSPermGen: 70637K->70637K(156160K)], 0.8215780 secs]
[Times: user=1.40 sys=0.00, real=0.83 secs]
510.331: [GC [PSYoungGen: 189K->96K(303616K)] 340616K->340523K(1003008K), 0.0101970
secs] [Times: user=0.01 sys=0.00, real=0.01 secs]
510.341: [Full GC [PSYoungGen: 96K->0K(303616K)] [ParOldGen: 340427K->340463K(699392K)]
340523K->340463K(1003008K) [PSPermGen: 70637K->70637K(148480K)], 0.
Heap Memory 설정 확인
서비스 Tomcat 의 Heap Memory 설정 상태를 모니터링을 합니다.
ps –ef | grep ${processName}
ex) ps –ef | grep java | grep SERVER_NAME
Installation Guide
Confidential Page 41 11/9/2018
항목 설명
ps 명령을 통해서 해당 프로세스의 현재 동작 여부를 확인합니다.
정상 여부 확인 : 프로세스 목록 내용에서 Heap Memory 설정값이 적정값 ( min:max
1G <= 2G) 으로 설정이 되어 있는지 확인합니다.
$ ps –ef | grep java | grep SERVER_NAME
wasuser 27150 1 65 21:26 pts/2 00:00:09 /usr/java/jdk1.8.0_152/bin/java -
Djava.util.logging.config.file=/opt/was/servers/tomcat8_11/conf/logging.properties -
java.util.logging.manager=org.apache.juli.ClassLoaderLogManager -server -Dserver=tomcat8_11 -
Dhttp.port=8180 -Dajp.port=8109 -Dssl.port=8543 -Dshutdown.port=8105 -
Djava.library.path=/opt/was/apache-tomcat-8.5.23/lib/ -verbose:gc -
Xloggc:/opt/was/servers/tomcat8_11/logs/gclog/gc.log -XX:+PrintGCDetails -
XX:+PrintGCTimeStamps -XX:+HeapDumpOnOutOfMemoryError -
XX:HeapDumpPath=/opt/was/servers/tomcat8_11/logs/heaplog/java_pid.hprof -
Djava.net.preferIPv4Stack=true -Dsun.rmi.dgc.client.gcInterval=3600000 -
Dsun.rmi.dgc.server.gcInterval=3600000 -Dsun.lang.ClassLoader.allowArraySyntax=true -
Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -Djava.security.egd=file:/dev/./urandom -
Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
-classpath /opt/was/apache-tomcat-8.5.23/bin/bootstrap.jar:/opt/was/apache-tomcat-
8.5.23/bin/tomcat-juli.jar -Dcatalina.base=/opt/was/servers/tomcat8_11 -
Dcatalina.home=/opt/was/apache-tomcat-8.5.23 -
Djava.io.tmpdir=/opt/was/servers/tomcat8_11/temp org.apache.catalina.startup.Bootstrap start
8.2 모니터링 툴 소개
VisualVM
⚫ JVM 전반에 대해 모니터링을 제공하는 툴
⚫ JVM 에 포함 ($JAVA_HOME/bin/jvisualvm)되어 있으며, 공식 홈페이지에서도 다운로드
가능
⚫ 제공기능
✓ Display local and remote Java applications
✓ Display Application Configuration and runtime environment
✓ Monitor application threads, application performance and memory consumption
✓ Take and display thread dumps
✓ Take and browse heap dumps
Installation Guide
Confidential Page 42 11/9/2018
Scouter APM
⚫ 오픈소스 Application Performance Managerment 으로 Java, WAS 에 대한 모니터링
⚫ J2EE 시스템 운영 상태 모니터링을 위한 각종 데이터를 모니터링
⚫ WAS 단위 인스턴스 사용자 정의형 통합 대시보드 구성 환경 지원
⚫ Hardware, OS, Application, JVM 모니터링 가능
Installation Guide
Confidential Page 43 11/9/2018
9 APPENDICES
9.1 Document Guidelines
http://tomcat.apache.org/tomcat-8.5-doc/index.html
9.2 Project Migration Report Sections Omitted
N/A
Installation Guide
Confidential Page 44 11/9/2018

More Related Content

What's hot

[오픈소스컨설팅]스카우터엑스 소개
[오픈소스컨설팅]스카우터엑스 소개[오픈소스컨설팅]스카우터엑스 소개
[오픈소스컨설팅]스카우터엑스 소개Open Source Consulting
 
[OpenStack Days Korea 2016] Track1 - Monasca를 이용한 Cloud 모니터링
[OpenStack Days Korea 2016] Track1 - Monasca를 이용한 Cloud 모니터링[OpenStack Days Korea 2016] Track1 - Monasca를 이용한 Cloud 모니터링
[OpenStack Days Korea 2016] Track1 - Monasca를 이용한 Cloud 모니터링OpenStack Korea Community
 
[2018] 오픈스택 5년 운영의 경험
[2018] 오픈스택 5년 운영의 경험[2018] 오픈스택 5년 운영의 경험
[2018] 오픈스택 5년 운영의 경험NHN FORWARD
 
[오픈소스컨설팅] 쿠버네티스와 쿠버네티스 on 오픈스택 비교 및 구축 방법
[오픈소스컨설팅] 쿠버네티스와 쿠버네티스 on 오픈스택 비교  및 구축 방법[오픈소스컨설팅] 쿠버네티스와 쿠버네티스 on 오픈스택 비교  및 구축 방법
[오픈소스컨설팅] 쿠버네티스와 쿠버네티스 on 오픈스택 비교 및 구축 방법Open Source Consulting
 
Open source APM Scouter로 모니터링 잘 하기
Open source APM Scouter로 모니터링 잘 하기Open source APM Scouter로 모니터링 잘 하기
Open source APM Scouter로 모니터링 잘 하기GunHee Lee
 
Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례
Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례
Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례Jemin Huh
 
[OpenInfra Days Korea 2018] (Track 1) TACO (SKT All Container OpenStack): Clo...
[OpenInfra Days Korea 2018] (Track 1) TACO (SKT All Container OpenStack): Clo...[OpenInfra Days Korea 2018] (Track 1) TACO (SKT All Container OpenStack): Clo...
[OpenInfra Days Korea 2018] (Track 1) TACO (SKT All Container OpenStack): Clo...OpenStack Korea Community
 
Tomcat and apache httpd training
Tomcat and apache httpd trainingTomcat and apache httpd training
Tomcat and apache httpd trainingFranck SIMON
 
스프링 부트와 로깅
스프링 부트와 로깅스프링 부트와 로깅
스프링 부트와 로깅Keesun Baik
 
지금 핫한 Real-time In-memory Stream Processing 이야기
지금 핫한 Real-time In-memory Stream Processing 이야기지금 핫한 Real-time In-memory Stream Processing 이야기
지금 핫한 Real-time In-memory Stream Processing 이야기Ted Won
 
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축Ji-Woong Choi
 
[오픈소스컨설팅]오픈스택에 대하여
[오픈소스컨설팅]오픈스택에 대하여[오픈소스컨설팅]오픈스택에 대하여
[오픈소스컨설팅]오픈스택에 대하여Ji-Woong Choi
 
Open source apm scouter를 통한 관제 관리 jadecross 정환열 수석
Open source apm scouter를 통한 관제  관리 jadecross 정환열 수석Open source apm scouter를 통한 관제  관리 jadecross 정환열 수석
Open source apm scouter를 통한 관제 관리 jadecross 정환열 수석uEngine Solutions
 
Performance Testing using Loadrunner
Performance Testingusing LoadrunnerPerformance Testingusing Loadrunner
Performance Testing using Loadrunnerhmfive
 
Jenkins를 활용한 Openshift CI/CD 구성
Jenkins를 활용한 Openshift CI/CD 구성 Jenkins를 활용한 Openshift CI/CD 구성
Jenkins를 활용한 Openshift CI/CD 구성 rockplace
 
Spring Native and Spring AOT
Spring Native and Spring AOTSpring Native and Spring AOT
Spring Native and Spring AOTVMware Tanzu
 

What's hot (20)

[오픈소스컨설팅]스카우터엑스 소개
[오픈소스컨설팅]스카우터엑스 소개[오픈소스컨설팅]스카우터엑스 소개
[오픈소스컨설팅]스카우터엑스 소개
 
[OpenStack Days Korea 2016] Track1 - Monasca를 이용한 Cloud 모니터링
[OpenStack Days Korea 2016] Track1 - Monasca를 이용한 Cloud 모니터링[OpenStack Days Korea 2016] Track1 - Monasca를 이용한 Cloud 모니터링
[OpenStack Days Korea 2016] Track1 - Monasca를 이용한 Cloud 모니터링
 
[2018] 오픈스택 5년 운영의 경험
[2018] 오픈스택 5년 운영의 경험[2018] 오픈스택 5년 운영의 경험
[2018] 오픈스택 5년 운영의 경험
 
[오픈소스컨설팅] 쿠버네티스와 쿠버네티스 on 오픈스택 비교 및 구축 방법
[오픈소스컨설팅] 쿠버네티스와 쿠버네티스 on 오픈스택 비교  및 구축 방법[오픈소스컨설팅] 쿠버네티스와 쿠버네티스 on 오픈스택 비교  및 구축 방법
[오픈소스컨설팅] 쿠버네티스와 쿠버네티스 on 오픈스택 비교 및 구축 방법
 
Open source APM Scouter로 모니터링 잘 하기
Open source APM Scouter로 모니터링 잘 하기Open source APM Scouter로 모니터링 잘 하기
Open source APM Scouter로 모니터링 잘 하기
 
Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례
Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례
Spring boot 를 적용한 전사모니터링 시스템 backend 개발 사례
 
KAFKA 3.1.0.pdf
KAFKA 3.1.0.pdfKAFKA 3.1.0.pdf
KAFKA 3.1.0.pdf
 
[OpenInfra Days Korea 2018] (Track 1) TACO (SKT All Container OpenStack): Clo...
[OpenInfra Days Korea 2018] (Track 1) TACO (SKT All Container OpenStack): Clo...[OpenInfra Days Korea 2018] (Track 1) TACO (SKT All Container OpenStack): Clo...
[OpenInfra Days Korea 2018] (Track 1) TACO (SKT All Container OpenStack): Clo...
 
Tomcat and apache httpd training
Tomcat and apache httpd trainingTomcat and apache httpd training
Tomcat and apache httpd training
 
스프링 부트와 로깅
스프링 부트와 로깅스프링 부트와 로깅
스프링 부트와 로깅
 
지금 핫한 Real-time In-memory Stream Processing 이야기
지금 핫한 Real-time In-memory Stream Processing 이야기지금 핫한 Real-time In-memory Stream Processing 이야기
지금 핫한 Real-time In-memory Stream Processing 이야기
 
Maven tutorial
Maven tutorialMaven tutorial
Maven tutorial
 
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
 
Community Openstack 구축 사례
Community Openstack 구축 사례Community Openstack 구축 사례
Community Openstack 구축 사례
 
[오픈소스컨설팅]오픈스택에 대하여
[오픈소스컨설팅]오픈스택에 대하여[오픈소스컨설팅]오픈스택에 대하여
[오픈소스컨설팅]오픈스택에 대하여
 
Open source apm scouter를 통한 관제 관리 jadecross 정환열 수석
Open source apm scouter를 통한 관제  관리 jadecross 정환열 수석Open source apm scouter를 통한 관제  관리 jadecross 정환열 수석
Open source apm scouter를 통한 관제 관리 jadecross 정환열 수석
 
Performance Testing using Loadrunner
Performance Testingusing LoadrunnerPerformance Testingusing Loadrunner
Performance Testing using Loadrunner
 
Jenkins를 활용한 Openshift CI/CD 구성
Jenkins를 활용한 Openshift CI/CD 구성 Jenkins를 활용한 Openshift CI/CD 구성
Jenkins를 활용한 Openshift CI/CD 구성
 
Spring Native and Spring AOT
Spring Native and Spring AOTSpring Native and Spring AOT
Spring Native and Spring AOT
 
Load testing with J meter
Load testing with J meterLoad testing with J meter
Load testing with J meter
 

Similar to [오픈소스컨설팅] 아파치톰캣 운영가이드 v1.3

Apache Tomcat ( 아파치 톰캣 ) 설치 가이드
Apache Tomcat ( 아파치 톰캣 ) 설치 가이드Apache Tomcat ( 아파치 톰캣 ) 설치 가이드
Apache Tomcat ( 아파치 톰캣 ) 설치 가이드Opennaru, inc.
 
Tomcat monitoring using_javamelody
Tomcat monitoring using_javamelodyTomcat monitoring using_javamelody
Tomcat monitoring using_javamelody중선 곽
 
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기Ted Won
 
How to build a web server on Linux.
How to build a web server on Linux.How to build a web server on Linux.
How to build a web server on Linux.은석 김은석
 
[오픈소스컨설팅]Nginx 1.2.7 설치가이드__v1
[오픈소스컨설팅]Nginx 1.2.7 설치가이드__v1[오픈소스컨설팅]Nginx 1.2.7 설치가이드__v1
[오픈소스컨설팅]Nginx 1.2.7 설치가이드__v1Ji-Woong Choi
 
Kafka monitoring using Prometheus and Grafana
Kafka monitoring using Prometheus and GrafanaKafka monitoring using Prometheus and Grafana
Kafka monitoring using Prometheus and Grafanawonyong hwang
 
Kubernetes on Premise Practical Guide
Kubernetes on Premise Practical GuideKubernetes on Premise Practical Guide
Kubernetes on Premise Practical GuideChan Shik Lim
 
Apache httpd ( 아파치 웹서버 ) 설치 가이드
Apache httpd ( 아파치 웹서버 ) 설치 가이드Apache httpd ( 아파치 웹서버 ) 설치 가이드
Apache httpd ( 아파치 웹서버 ) 설치 가이드Opennaru, inc.
 
JBoss Web Server ( JBoss 웹서버 ) 설치 가이드
JBoss Web Server ( JBoss 웹서버 ) 설치 가이드JBoss Web Server ( JBoss 웹서버 ) 설치 가이드
JBoss Web Server ( JBoss 웹서버 ) 설치 가이드Opennaru, inc.
 
oVirt installation guide_v4.3
oVirt installation guide_v4.3oVirt installation guide_v4.3
oVirt installation guide_v4.3CheolHee Han
 
PCF Installation Guide
PCF Installation GuidePCF Installation Guide
PCF Installation Guideseungdon Choi
 
Oracle linux8 solaris_new_features-suk kim
Oracle linux8 solaris_new_features-suk kimOracle linux8 solaris_new_features-suk kim
Oracle linux8 solaris_new_features-suk kimsuk kim
 
Confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS
Confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOSConfd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS
Confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS충섭 김
 
[오픈소스컨설팅] Atlassian webinar 기본 트러블슈팅(1 of 2)
[오픈소스컨설팅] Atlassian webinar 기본 트러블슈팅(1 of 2)[오픈소스컨설팅] Atlassian webinar 기본 트러블슈팅(1 of 2)
[오픈소스컨설팅] Atlassian webinar 기본 트러블슈팅(1 of 2)Osc Osc
 
Mcollective orchestration tool 소개
Mcollective orchestration tool 소개Mcollective orchestration tool 소개
Mcollective orchestration tool 소개태준 문
 

Similar to [오픈소스컨설팅] 아파치톰캣 운영가이드 v1.3 (20)

Oracle History #8
Oracle History #8Oracle History #8
Oracle History #8
 
Apache Tomcat ( 아파치 톰캣 ) 설치 가이드
Apache Tomcat ( 아파치 톰캣 ) 설치 가이드Apache Tomcat ( 아파치 톰캣 ) 설치 가이드
Apache Tomcat ( 아파치 톰캣 ) 설치 가이드
 
Tomcat monitoring using_javamelody
Tomcat monitoring using_javamelodyTomcat monitoring using_javamelody
Tomcat monitoring using_javamelody
 
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
 
How to build a web server on Linux.
How to build a web server on Linux.How to build a web server on Linux.
How to build a web server on Linux.
 
Kafka slideshare
Kafka   slideshareKafka   slideshare
Kafka slideshare
 
[오픈소스컨설팅]Nginx 1.2.7 설치가이드__v1
[오픈소스컨설팅]Nginx 1.2.7 설치가이드__v1[오픈소스컨설팅]Nginx 1.2.7 설치가이드__v1
[오픈소스컨설팅]Nginx 1.2.7 설치가이드__v1
 
Kafka monitoring using Prometheus and Grafana
Kafka monitoring using Prometheus and GrafanaKafka monitoring using Prometheus and Grafana
Kafka monitoring using Prometheus and Grafana
 
Kubernetes
KubernetesKubernetes
Kubernetes
 
Kubernetes on Premise Practical Guide
Kubernetes on Premise Practical GuideKubernetes on Premise Practical Guide
Kubernetes on Premise Practical Guide
 
Apache httpd ( 아파치 웹서버 ) 설치 가이드
Apache httpd ( 아파치 웹서버 ) 설치 가이드Apache httpd ( 아파치 웹서버 ) 설치 가이드
Apache httpd ( 아파치 웹서버 ) 설치 가이드
 
Spring boot actuator
Spring boot   actuatorSpring boot   actuator
Spring boot actuator
 
JBoss Web Server ( JBoss 웹서버 ) 설치 가이드
JBoss Web Server ( JBoss 웹서버 ) 설치 가이드JBoss Web Server ( JBoss 웹서버 ) 설치 가이드
JBoss Web Server ( JBoss 웹서버 ) 설치 가이드
 
oVirt installation guide_v4.3
oVirt installation guide_v4.3oVirt installation guide_v4.3
oVirt installation guide_v4.3
 
PCF Installation Guide
PCF Installation GuidePCF Installation Guide
PCF Installation Guide
 
Oracle linux8 solaris_new_features-suk kim
Oracle linux8 solaris_new_features-suk kimOracle linux8 solaris_new_features-suk kim
Oracle linux8 solaris_new_features-suk kim
 
Confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS
Confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOSConfd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS
Confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS
 
[오픈소스컨설팅] Atlassian webinar 기본 트러블슈팅(1 of 2)
[오픈소스컨설팅] Atlassian webinar 기본 트러블슈팅(1 of 2)[오픈소스컨설팅] Atlassian webinar 기본 트러블슈팅(1 of 2)
[오픈소스컨설팅] Atlassian webinar 기본 트러블슈팅(1 of 2)
 
Servlet3
Servlet3Servlet3
Servlet3
 
Mcollective orchestration tool 소개
Mcollective orchestration tool 소개Mcollective orchestration tool 소개
Mcollective orchestration tool 소개
 

More from Ji-Woong Choi

[오픈소스컨설팅] 오픈소스 기반 솔루션 방향성 잡기
[오픈소스컨설팅] 오픈소스 기반 솔루션 방향성 잡기[오픈소스컨설팅] 오픈소스 기반 솔루션 방향성 잡기
[오픈소스컨설팅] 오픈소스 기반 솔루션 방향성 잡기Ji-Woong Choi
 
[오픈소스컨설팅] 프로메테우스 모니터링 살펴보고 구성하기
[오픈소스컨설팅] 프로메테우스 모니터링 살펴보고 구성하기[오픈소스컨설팅] 프로메테우스 모니터링 살펴보고 구성하기
[오픈소스컨설팅] 프로메테우스 모니터링 살펴보고 구성하기Ji-Woong Choi
 
[오픈소스컨설팅] Ansible을 활용한 운영 자동화 교육
[오픈소스컨설팅] Ansible을 활용한 운영 자동화 교육[오픈소스컨설팅] Ansible을 활용한 운영 자동화 교육
[오픈소스컨설팅] Ansible을 활용한 운영 자동화 교육Ji-Woong Choi
 
[오픈소스컨설팅] 2019년 클라우드 생존전략
[오픈소스컨설팅] 2019년 클라우드 생존전략[오픈소스컨설팅] 2019년 클라우드 생존전략
[오픈소스컨설팅] 2019년 클라우드 생존전략Ji-Woong Choi
 
[오픈소스컨설팅] AWS re:Invent 2018 기계학습(ML)부분 후기
[오픈소스컨설팅] AWS re:Invent 2018 기계학습(ML)부분 후기[오픈소스컨설팅] AWS re:Invent 2018 기계학습(ML)부분 후기
[오픈소스컨설팅] AWS re:Invent 2018 기계학습(ML)부분 후기Ji-Woong Choi
 
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3Ji-Woong Choi
 
[오픈소스컨설팅]ELK기반 장애예방시스템_구성_2016.12
[오픈소스컨설팅]ELK기반 장애예방시스템_구성_2016.12[오픈소스컨설팅]ELK기반 장애예방시스템_구성_2016.12
[오픈소스컨설팅]ELK기반 장애예방시스템_구성_2016.12Ji-Woong Choi
 
[오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트
[오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트[오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트
[오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트Ji-Woong Choi
 
[오픈소스컨설팅]클라우드기반U2L마이그레이션 전략 및 고려사항
[오픈소스컨설팅]클라우드기반U2L마이그레이션 전략 및 고려사항[오픈소스컨설팅]클라우드기반U2L마이그레이션 전략 및 고려사항
[오픈소스컨설팅]클라우드기반U2L마이그레이션 전략 및 고려사항Ji-Woong Choi
 
OpenStack Summit 2017 참석후기
OpenStack Summit 2017 참석후기OpenStack Summit 2017 참석후기
OpenStack Summit 2017 참석후기Ji-Woong Choi
 
[오픈소스컨설팅] Red Hat ReaR (relax and-recover) Quick Guide
[오픈소스컨설팅] Red Hat ReaR (relax and-recover) Quick Guide[오픈소스컨설팅] Red Hat ReaR (relax and-recover) Quick Guide
[오픈소스컨설팅] Red Hat ReaR (relax and-recover) Quick GuideJi-Woong Choi
 
[오픈소스컨설팅]Docker on Kubernetes v1
[오픈소스컨설팅]Docker on Kubernetes v1[오픈소스컨설팅]Docker on Kubernetes v1
[오픈소스컨설팅]Docker on Kubernetes v1Ji-Woong Choi
 
[오픈소스컨설팅] Open Stack Ceph, Neutron, HA, Multi-Region
[오픈소스컨설팅] Open Stack Ceph, Neutron, HA, Multi-Region[오픈소스컨설팅] Open Stack Ceph, Neutron, HA, Multi-Region
[오픈소스컨설팅] Open Stack Ceph, Neutron, HA, Multi-RegionJi-Woong Choi
 
Docker Setting for Static IP allocation
Docker Setting for Static IP allocationDocker Setting for Static IP allocation
Docker Setting for Static IP allocationJi-Woong Choi
 
Scouter와 influx db – grafana 연동 가이드
Scouter와 influx db – grafana 연동 가이드Scouter와 influx db – grafana 연동 가이드
Scouter와 influx db – grafana 연동 가이드Ji-Woong Choi
 
[오픈소스컨설팅]Atlassian JIRA Quick Guide
[오픈소스컨설팅]Atlassian JIRA Quick Guide[오픈소스컨설팅]Atlassian JIRA Quick Guide
[오픈소스컨설팅]Atlassian JIRA Quick GuideJi-Woong Choi
 
[오픈소스컨설팅]레드햇계열리눅스7 운영자가이드 - 기초편
[오픈소스컨설팅]레드햇계열리눅스7 운영자가이드 - 기초편[오픈소스컨설팅]레드햇계열리눅스7 운영자가이드 - 기초편
[오픈소스컨설팅]레드햇계열리눅스7 운영자가이드 - 기초편Ji-Woong Choi
 
[오픈소스컨설팅]systemd on RHEL7
[오픈소스컨설팅]systemd on RHEL7[오픈소스컨설팅]systemd on RHEL7
[오픈소스컨설팅]systemd on RHEL7Ji-Woong Choi
 
클라우드 컴퓨팅 기반 기술과 오픈스택(Kvm) 기반 Provisioning
클라우드 컴퓨팅 기반 기술과 오픈스택(Kvm) 기반 Provisioning 클라우드 컴퓨팅 기반 기술과 오픈스택(Kvm) 기반 Provisioning
클라우드 컴퓨팅 기반 기술과 오픈스택(Kvm) 기반 Provisioning Ji-Woong Choi
 
[오픈소스컨설팅 뉴스레터] 2016년 1분기
[오픈소스컨설팅 뉴스레터] 2016년 1분기[오픈소스컨설팅 뉴스레터] 2016년 1분기
[오픈소스컨설팅 뉴스레터] 2016년 1분기Ji-Woong Choi
 

More from Ji-Woong Choi (20)

[오픈소스컨설팅] 오픈소스 기반 솔루션 방향성 잡기
[오픈소스컨설팅] 오픈소스 기반 솔루션 방향성 잡기[오픈소스컨설팅] 오픈소스 기반 솔루션 방향성 잡기
[오픈소스컨설팅] 오픈소스 기반 솔루션 방향성 잡기
 
[오픈소스컨설팅] 프로메테우스 모니터링 살펴보고 구성하기
[오픈소스컨설팅] 프로메테우스 모니터링 살펴보고 구성하기[오픈소스컨설팅] 프로메테우스 모니터링 살펴보고 구성하기
[오픈소스컨설팅] 프로메테우스 모니터링 살펴보고 구성하기
 
[오픈소스컨설팅] Ansible을 활용한 운영 자동화 교육
[오픈소스컨설팅] Ansible을 활용한 운영 자동화 교육[오픈소스컨설팅] Ansible을 활용한 운영 자동화 교육
[오픈소스컨설팅] Ansible을 활용한 운영 자동화 교육
 
[오픈소스컨설팅] 2019년 클라우드 생존전략
[오픈소스컨설팅] 2019년 클라우드 생존전략[오픈소스컨설팅] 2019년 클라우드 생존전략
[오픈소스컨설팅] 2019년 클라우드 생존전략
 
[오픈소스컨설팅] AWS re:Invent 2018 기계학습(ML)부분 후기
[오픈소스컨설팅] AWS re:Invent 2018 기계학습(ML)부분 후기[오픈소스컨설팅] AWS re:Invent 2018 기계학습(ML)부분 후기
[오픈소스컨설팅] AWS re:Invent 2018 기계학습(ML)부분 후기
 
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
 
[오픈소스컨설팅]ELK기반 장애예방시스템_구성_2016.12
[오픈소스컨설팅]ELK기반 장애예방시스템_구성_2016.12[오픈소스컨설팅]ELK기반 장애예방시스템_구성_2016.12
[오픈소스컨설팅]ELK기반 장애예방시스템_구성_2016.12
 
[오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트
[오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트[오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트
[오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트
 
[오픈소스컨설팅]클라우드기반U2L마이그레이션 전략 및 고려사항
[오픈소스컨설팅]클라우드기반U2L마이그레이션 전략 및 고려사항[오픈소스컨설팅]클라우드기반U2L마이그레이션 전략 및 고려사항
[오픈소스컨설팅]클라우드기반U2L마이그레이션 전략 및 고려사항
 
OpenStack Summit 2017 참석후기
OpenStack Summit 2017 참석후기OpenStack Summit 2017 참석후기
OpenStack Summit 2017 참석후기
 
[오픈소스컨설팅] Red Hat ReaR (relax and-recover) Quick Guide
[오픈소스컨설팅] Red Hat ReaR (relax and-recover) Quick Guide[오픈소스컨설팅] Red Hat ReaR (relax and-recover) Quick Guide
[오픈소스컨설팅] Red Hat ReaR (relax and-recover) Quick Guide
 
[오픈소스컨설팅]Docker on Kubernetes v1
[오픈소스컨설팅]Docker on Kubernetes v1[오픈소스컨설팅]Docker on Kubernetes v1
[오픈소스컨설팅]Docker on Kubernetes v1
 
[오픈소스컨설팅] Open Stack Ceph, Neutron, HA, Multi-Region
[오픈소스컨설팅] Open Stack Ceph, Neutron, HA, Multi-Region[오픈소스컨설팅] Open Stack Ceph, Neutron, HA, Multi-Region
[오픈소스컨설팅] Open Stack Ceph, Neutron, HA, Multi-Region
 
Docker Setting for Static IP allocation
Docker Setting for Static IP allocationDocker Setting for Static IP allocation
Docker Setting for Static IP allocation
 
Scouter와 influx db – grafana 연동 가이드
Scouter와 influx db – grafana 연동 가이드Scouter와 influx db – grafana 연동 가이드
Scouter와 influx db – grafana 연동 가이드
 
[오픈소스컨설팅]Atlassian JIRA Quick Guide
[오픈소스컨설팅]Atlassian JIRA Quick Guide[오픈소스컨설팅]Atlassian JIRA Quick Guide
[오픈소스컨설팅]Atlassian JIRA Quick Guide
 
[오픈소스컨설팅]레드햇계열리눅스7 운영자가이드 - 기초편
[오픈소스컨설팅]레드햇계열리눅스7 운영자가이드 - 기초편[오픈소스컨설팅]레드햇계열리눅스7 운영자가이드 - 기초편
[오픈소스컨설팅]레드햇계열리눅스7 운영자가이드 - 기초편
 
[오픈소스컨설팅]systemd on RHEL7
[오픈소스컨설팅]systemd on RHEL7[오픈소스컨설팅]systemd on RHEL7
[오픈소스컨설팅]systemd on RHEL7
 
클라우드 컴퓨팅 기반 기술과 오픈스택(Kvm) 기반 Provisioning
클라우드 컴퓨팅 기반 기술과 오픈스택(Kvm) 기반 Provisioning 클라우드 컴퓨팅 기반 기술과 오픈스택(Kvm) 기반 Provisioning
클라우드 컴퓨팅 기반 기술과 오픈스택(Kvm) 기반 Provisioning
 
[오픈소스컨설팅 뉴스레터] 2016년 1분기
[오픈소스컨설팅 뉴스레터] 2016년 1분기[오픈소스컨설팅 뉴스레터] 2016년 1분기
[오픈소스컨설팅 뉴스레터] 2016년 1분기
 

[오픈소스컨설팅] 아파치톰캣 운영가이드 v1.3

  • 1. Confidential [오픈소스컨설팅] Tomcat 운영 메뉴얼_v1.0.docx Last printed on 11/9/2018 12:12:00 PM Apache Tomcat 운영 메뉴얼 Focus Area: Apache Tomcat 메뉴얼 Product/Process: Apache Tomcat 8.5.x Prepared By: Document Owner(s) Project/Organization Role Jun-Young Son Senior Engineer Project Status Report Version Control Version Date Author Change Description 1.0 2018/11/08 Jun-Young Son Document created [Version #] [mm/dd/yy] [Change owner] • [Change 1] • [Change 2] • [Change n]
  • 2. Installation Guide Confidential Page 2 11/9/2018 TABLE OF CONTENTS 1. 본 문서의 목적............................................................................................................................. 5 1.1 Apache Tomcat 정보.................................................................................................. 5 1.2 Apache Tomcat Versions.......................................................................................... 5 2 APACHE TOMCAT 동작원리.................................................................................................. 7 2.1 Tomcat Architecture ................................................................................................. 7 2.2 Tomcat Connectors (3-Main Connectors).............................................................. 8 3 TOMCAT 구성......................................................................................................................... 8 3.1 Tomcat 표준 구성도.................................................................................................... 8 인스턴스 구성 위치 ................................................................................................ 9 3.2 WAS 구성 : Tomcat 8.5.x.......................................................................................... 9 Web Application Server ...................................................................................... 9 3.3 Tomcat Structure..................................................................................................... 10 Tomcat Component............................................................................................ 10 3.4 Tomcat 엔진 설치 ..................................................................................................... 12 Tomcat 다운로드................................................................................................. 12 Tomcat 설치........................................................................................................ 12 Tomcat 엔진 디렉토리 구조................................................................................ 13 3.5 Tomcat 설치 및 설정 .................................................................................................. 14 Tomcat Instance 디렉터리 구조 ........................................................................... 14 Tomcat 인스턴스 Concept ................................................................................... 14 Tomcat 환경변수.................................................................................................. 15 인스턴스 서비스 포트 변경................................................................................... 15
  • 3. Installation Guide Confidential Page 3 11/9/2018 4 TOMCAT 인스턴스 구성......................................................................................................... 16 4.1 Tomcat 인스턴스 생성 .............................................................................................. 16 Tomcat Template & 설정파일 복사 .................................................................. 16 Tomcat 서버 설정................................................................................................ 16 각 인스턴스 서버 설정 파일................................................................................. 17 실행 스크립트의 구성........................................................................................... 17 관리 스크립트의 구성........................................................................................... 23 5 TOMCAT DATASOURCE 설정 ............................................................................................ 25 5.1 JDBC Connection Pool 기본 설정............................................................................ 25 5.2 DataSource 설정....................................................................................................... 29 6 TOMCAT DEPLOY 설정 ....................................................................................................... 30 6.1 Application Deploy................................................................................................... 30 7 TOMCAT 운영 인프라 환경 설정........................................................................................... 31 7.1 OS Kernel Parameter 설정...................................................................................... 31 /etc/sysctl.conf................................................................................................... 31 /etc/security/limits.conf .................................................................................... 32 공통 JVM 옵션 설정............................................................................................. 32 8 TOMCAT 모니터링................................................................................................................ 33 8.1 모니터링 가이드......................................................................................................... 33 모니터링 항목....................................................................................................... 33 System Resource 체크....................................................................................... 35 Process Resource 체크...................................................................................... 36 Server Status...................................................................................................... 37
  • 4. Installation Guide Confidential Page 4 11/9/2018 Execute Status – 실행 상태................................................................................ 39 8.2 모니터링 툴 소개........................................................................................................ 41 VisualVM............................................................................................................. 41 Scouter APM....................................................................................................... 42 9 APPENDICES ........................................................................................................................ 43 9.1 Document Guidelines............................................................................................... 43 9.2 Project Migration Report Sections Omitted.......................................................... 43
  • 5. Installation Guide Confidential Page 5 11/9/2018 1. 본 문서의 목적 본 문서의 목적은 Tomcat 운영에 필요한 내용을 담은 가이드 문서입니다. 본 문서에는 Tomcat 설치 현황 및 설치 및 환경 구성에 대한 내용이 포함되어 있으며, 기타 모니터링을 위한 정보 등을 모두 포함하고 있습니다. 1.1 Apache Tomcat 정보 1996 년 6 월 제 4 회 JavaOne (당시 Sun Microsystems 주최)가 개발하고 있던, JSWDK(JavaServer Web Development Kit)을 Apache Software Foundation 에 기증하여 시작 되었습니다. Tomcat 은 Apache Software Foundation(ASF) 하위의 Apache Tomcat 프로젝트에서 개발 되고 있는 Sevlet/JSP Container 가 포함된 웹 애플리케이션 서버(WAS)입니다. 1.2 Apache Tomcat Versions ⚫ Servlet 버전과 Tomcat Spec Servlet Spec JSP Spec EL Spec WebSocket Spec JASPIC Spec Tomcat Version Latest Version Support Java Version 4.0 2.3 3.0 1.1 1.1 9.0.x 9.0.12 8 and later 3.1 2.3 3.0 1.1 1.1 8.5.x 8.5.34 7 and later 3.1 2.3 3.0 1.1 N/A 8.0.x 8.0.53 7 and later 3.0 2.2 2.2 1.1 N/A 7.0.x 7.0.91 6 and later 2.5 2.1 2.1 N/A N/A 6.0.x 6.0.53 5 and later 2.4 2.0 N/A N/A N/A 5.5.x 5.5.36 1.4 and later 2.3 1.2 N/A N/A N/A 4.1.x 4.1.40 1.3 and later 2.2 1.1 N/A N/A N/A 3.3.x 3.3.2 1.1 and later 자세한 정보는 URL 을 참조하십시오 http://tomcat.apache.org/whichversion.html
  • 6. Installation Guide Confidential Page 6 11/9/2018 ⚫ Apache Tomcat Version 구분 - Alpha: Spec 및 버그에서 요구되는 많은 양의 테스트되지 않았거나 누락된 기능이 포함될 수 있으며, 안정적으로 실행되지 않을 수 있습니다. - Beta: 테스트되지 않은 기능 및 여러가지 minor 버그가 포함될 수 있습니다. - Stable: minor 버그를 해소하였지만, 상대적으로 추가적인 버그가 포함될 수 있습니다. Stable 릴리즈는 운영환경 용도로 사용이 가능하며 안정적으로 운영이 가능합니다. ⚫ Apache Tomcat 9.x 9.x 는 최신 버전이며 Tomcat 8.x 기반으로 하여 Servlet 4.0, JSP 2.3, EL 3.0, WebSocket 1.1 및 JASPIC 1.1 사양을 구현합니다. - HTTP/2 에 대한 지원을 추가 (Java 9 또는 Tomcat 네이티브 라이브러리 필요) - JSSE 커넥터(NIO 및 NIO2)와 함께 TLS 지원을 위한 OpenSSL 사용에 대한 지원을 추가 - SNI(TLS 가상 호스팅)에 대한 지원을 추가 ⚫ Apache Tomcat 8.x 8.x 는 Tomcat 7.0.x 를 기반으로 하여 Servlet 3.1, JSP 2.3, EL 3.0 및 WebSocket 1.1 사양을 구현합니다. - HTTP/2 에 대한 지원을 추가 (Tomcat 네이티브 라이브러리 필요) - JSSE 커넥터(NIO 및 NIO2)와 함께 TLS 지원을 위한 OpenSSL 사용에 대한 지원을 추가 - SNI(TLS 가상 호스팅)에 대한 지원을 추가 ⚫ Apache Tomcat 7.x 7.x 는 Tomcat 6.0.x 의 향상된 기능을 기반으로 하며 Servlet 3.0, JSP2.2, EL2.2 및 WebSocket 1.1 사양을 구현합니다. - 웹 응용 프로그램 메모리 누수 감지 및 예방 - Manager 및 Host Manager 응용 프로그램의 향상된 보안 - 일반적인 CSRF 보호
  • 7. Installation Guide Confidential Page 7 11/9/2018 - 웹 애플리케이션에 직접 외부 컨텐츠를 포함할 수 있도록 지원 - 리팩토링(커넥터, 라이프 사이클) 및 많은 내부 코드 정리 2 Apache Tomcat 동작원리 2.1 Tomcat Architecture ⚫ Server ✓ 서버의 개념으로 Tomcat 컨테이너 자체를 나타냄 ⚫ Service ✓ 서버 내에 존재하는 컴포넌트에 대한 중재자 역할을 수행하며, 엔진에 하나 혹은 그 이상의 커넥터 사용 ⚫ Engine ✓ 특정 서비스를 위한 요청 처리 파이프라인을 나타냄 ✓ 하나의 서비스는 여러 개의 커넥터를 가질 수 있으며, 엔진은 이러한 커넥터들로부터 모든 요청을 수신하고 처리함 ⚫ Host ✓ 특정 네트워크의 이름을 Tomcat 서버에 할당
  • 8. Installation Guide Confidential Page 8 11/9/2018 ✓ 하나의 엔진의 여러 개의 호스트를 가질 수 있으며, 호스트의 요소는 도메인등과 같이 네트워크 별칭을 지원 ⚫ Connector ✓ 클라이언트와의 프로토콜 통신을 처리하며, HTTP 및 AJP 커넥터를 가짐 ⚫ Context ✓ 웹 애플리케이션을 나타내며, 하나의 Host 는 여러 개의 Context 를 가질 수 있음 ✓ 참조 URL: http://tomcat.apache.org/tomcat-8.5-doc/config/server.html 2.2 Tomcat Connectors (3-Main Connectors) ⚫ HTTP ✓ Application 서버로의 direct request 를 받음 ✓ Default: enabled, 8080 port ⚫ HTTPS ✓ HTTPS 를 직접 입력으로 받음, SSL keystore 필요 ✓ Default: siabled, 8443 port ⚫ AJP ✓ Apache Web Server 를 통해 mod_jk 를 통해 입력 받는 커넥터 ✓ Default: enabled, 8009 port 3 Tomcat 구성 3.1 Tomcat 표준 구성도 ⚫ 멀티 인스턴스 구성 시 CATALINA_HOME 은 최초 설치 상태에서 변경하지 않고 CATALINA_BASE 를 파일 복사, 스크립트를 추가하여 여러 대의 인스턴스 생성 시 아래의 그림과 같은 구성으로 생성합니다.
  • 9. Installation Guide Confidential Page 9 11/9/2018 인스턴스 구성 위치 Tomcat 의 디렉토리 위치는 인스턴스 의 “/opt/was/servers/{인스턴스명}/” 디렉토리에 설치 되어 있습니다. 실제 인스턴스 구성 파일 : server.xml 장비명 설정파일명 SERVER_HOME configuration 경로 # centos10 Server.xml /opt/was/servers/{인스 턴스명}/” /opt/was/servers/{ 인스턴스명}/”conf 3.2 WAS 구성 : Tomcat 8.5.x Web Application Server 서버 (WAS01) Hostname # centos10 서버 IP 192.168.15.100 응용관리계정 wasuser ( / opt/was ) 엔진관리계정 wasuser ( / opt/was/ apache-tomcat-8.5.23 ) domain home 위치 /opt/was/servers 기동 /opt/was/servers/{인스턴스명}/bin/start.sh
  • 10. Installation Guide Confidential Page 10 11/9/2018 정지 /opt/was/servers/{인스턴스명}/bin/stop.sh 비상정지 /opt/was/servers/{인스턴스명}/bin/kill.sh Log 위치 /opt/was/servers/{인스턴스명}/logs Config File server.xml JVM Heap Size Xms512m Xmx512m MetaspaceSize=256m MaxMetaspaceSize=256m 3.3 Tomcat Structure Tomcat Component ⚫ Server: Server = Catalina Servlet Container = Tomcat Instance JVM 안에 Singletom 으로 존재, Server 내에 포함되는 Service 들 Life Cycle 관리 담당 ⚫ Context: Web Application 을 나타내는 구성요소, Spec 상 ServletContext 와 매핑. WAS/EAR 파일이나, Exploded 된 디렉토리
  • 11. Installation Guide Confidential Page 11 11/9/2018 ⚫ Listeners: Tomcat Lifecycle 이벤트 발생시 action 을 수행하는 컴포넌트. Tomcat 의 Lifecycle 을 커스터마이징하고 싶은 경우 활용 가능 ⚫ Manager: HTTP 세션을 생성 관리해주는 Session manager ⚫ Logger: JULI(Java Logging Implimentation)라는 자체 구현체를 제공 ⚫ Valve: 컨테이너(Engine, Host, Context)와 관련된 각각의 request 처리 pipeline(valve chain 객체)안에 들어가 있는 컴포넌트
  • 12. Installation Guide Confidential Page 12 11/9/2018 3.4 Tomcat 엔진 설치 - Tomcat 엔진은 https://tomcat.apache.org 에서 설치하고자 하는 Tomcat 엔진 버전을 다운로드 받아 설치파일의 파일을 압축을 푸는 것으로 설치를 수행합니다. - Tomcat Engine 8.x 설치 시 아래의 URL 을 통해 zip, tar.gz 파일을 다운로드 받을 수 있습니다. • 다운로드 URL: https://tomcat.apache.org/download-80.cgi Tomcat 다운로드 다운로드 URL 을 통해서 설치 파일을 다운로드 합니다. Tomcat 설치
  • 13. Installation Guide Confidential Page 13 11/9/2018 ⚫ 설치 방법은 앞서 설명했던 것과 같이 서버에 업로드를 수행한 후 압축을 풀면 설치가 됩니다. 일반적으로 엔진과 애플리케이션 위치로 구성합니다. [wasuser@centos10 /installFile/was]$ unzip apache-tomcat-8.5.23.zip ….생략 [wasuser@centos10 /installFile/was]$ls -al drwxr-xr-x 9 wasuser wasuser 149 Sep 28 2017 apache-tomcat-8.5.23 NOTE. 엔진 설치는 파일 업로드 시간 + 압축 해제 시간이 전부입니다. Tomcat 엔진 디렉토리 구조 Tomcat 의 디렉토리 구조는 다음과 같습니다. 인스턴스 생성을 위한 기본 template 정보는 별도의 servers 폴더에 위치하고 있습니다.
  • 14. Installation Guide Confidential Page 14 11/9/2018 3.5 Tomcat 설치 및 설정 ⚫ Tomcat 의 각 서비스별 인스턴스 생성을 위하여 ㈜오픈소스컨설팅에서 제공하는 template 파일을 복사하여 생성을 진행합니다. Tomcat Instance 디렉터리 구조 각 도메인 디렉토리 하위 정보는 다음과 같이 구성됩니다. 디렉터리 설명 bin Tomcat 를 구동하는 명령 스크립트 디렉토리 conf Tomcat Web 서비스를 위한 설정 파일 디렉토리 lib Tomcat Engine 이 사용하는 외부 라이브러리 (.jar) 디렉토리 log Tomcat 로그 파일 디렉토리 (catalina.out) temp Tomcat Engine 에서 사용하는 임시 파일 디렉토리 webapps Tomcat 에서 웹 애플리케이션 Deploy 디렉토리 work jsp 파일이 서블릿으로 컴파일(.class)된 디렉토리 Tomcat 인스턴스 Concept - Tomcat Engine 은 CATALINA_HOME 을 기준으로 “lib”, “bin” 디렉토리만 사용합니다. - 실제 서비스를 담당하는 인스턴스들은 “conf”, “logs”, “temp”, “webapps”, “work” 디렉토리를 사용합니다. - 이와 같은 디렉토리를 분리합으로써 “멀티 인스턴스” 환경을 구성합니다.
  • 15. Installation Guide Confidential Page 15 11/9/2018 $CATALINA_HOME/bin/startup.sh 실행하면 실제로 catalina.sh 이 실행됩니다. catalina.sh 또는 Catalina.bat 은 CATALINA_HOME 환경 변수를 통해서 “Tomcat Engine” 디렉토리를 통해서 기동합니다. Tomcat 환경변수 Tomcat 내의 실제 인스턴스의 속성을 정의 한 환경 변수입니다 . • CATALINA_HOME: Tomcat Engine 홈 디렉토리 • CATALINA_BASE: 멀티 인스턴스의 홈 디렉토리 • SERVER_NAME: 멀티 인스턴스의 서버명 • PORT_OFFSET: 멀티 인스턴스에서 사용하는 계산되는 port 범위 • COMP_USER: 인스턴스를 조작하기 위한 사용자 계정 • LOG_BASE: 멀티 인스턴스의 로그 디렉토리 지정 인스턴스 서비스 포트 변경 각 인스턴스 별로 server.xml 을 수정합니다.
  • 16. Installation Guide Confidential Page 16 11/9/2018 변경 이유는 동일한 포트를 사용하면서 서버를 기동하려 할 때, Port 충돌로 인해 서버 기동이 되지 않습니다. 인스턴스에서 지정한 port offset(env.sh) 과 default port 를 더하기 연산을 하여 인스턴스 내에 offset 연산으로 인해 포트 충돌에 대한 문제점을 해결할 수 있습니다. - Shutdown Port <Server port="${shutdown.port}" shutdown="SHUTDOWN"> - http port <Connector port="${http.port}" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="${ssl.port}" /> - ajp port <Connector port="${ajp.port}" protocol="AJP/1.3" redirectPort="${ssl.port}" /> 4 Tomcat 인스턴스 구성 4.1 Tomcat 인스턴스 생성 Tomcat 인스턴스 설치는 Naming Rule 에 따라 /opt/was/{업무도메인}/{업무명} 라는 디렉토리를 사용하도록 합니다. Tomcat Template & 설정파일 복사 ㈜오픈소스컨설팅에서 제공하는 스크립트는 CATALINA_BASE/bin 디렉토리에 저장하고 $CATALINA_HOME/conf 파일을 기본 설정 파일을 복사하여 설치할 인스턴스에 복사합니다. cp –fR /opt/was/apache-tomcat-8.5.23/conf /opt/was/server/{인스턴스명}/conf Tomcat 서버 설정 노드명 서비스명 인스턴스명 Port offset Shutdown http ajp
  • 17. Installation Guide Confidential Page 17 11/9/2018 # centos 10 test test-svr-11 100 8105 8180 8109 각 인스턴스 서버 설정 파일 노드명 configuration 경로 configuration 파일명 # centos 10 /opt/was/servers/{인스턴스명}/conf server.xml 실행 스크립트의 구성 Setenv (환경설정, java 옵션 적용) 서비스에 해당하는 모든 설정이 env.sh 를 통해서 이루어지며 JVM 옵션 등은 env.sh 파일만 조작하시면 됩니다.(JVM 옵션, JNDI 포트 포함) env.sh #!/bin/bash #************************ Warning ********************************** #* * #* This configuration is property of OPEN SOURCE CONSULTING, INC. * #* Don't distribute this to other project. * #* * #* Contact jchoi@osci.kr(http://www.osci.kr) * #******************************************************************* # This is tomcat env.sh for iosp by Open Source Consulting, Inc export DATE=`date +%Y%m%d_%H%M%S` ##################################### ## Set Tomcat base env ##### ##################################### export JAVA_HOME=/usr/java/jdk1.8.0_152 export SERVER_NAME=tomcat8_11 export CATALINA_HOME=/opt/was/apache-tomcat-8.5.23
  • 18. Installation Guide Confidential Page 18 11/9/2018 export CATALINA_BASE=/opt/was/servers/${SERVER_NAME} export PORT_OFFSET=100 export COMP_USER=wasuser ##################################### ##### Set Log env ##### ##################################### export LOG_BASE=${CATALINA_BASE}/logs export LOG_DIR=${LOG_BASE}/log export GC_LOG_DIR=${LOG_BASE}/gclog export HEAP_DUMP_DIR=${LOG_BASE}/heaplog ######################################### ## Set Port Configuration ###### ######################################### # Default Ports are as below # # HTTP_PORT : 8080 # # SSL_PORT : 8443 # # SHUTDOWN_PORT : 8005 # ######################################### export HTTP_PORT=$(expr 8080 + $PORT_OFFSET) export AJP_PORT=$(expr 8009 + $PORT_OFFSET) export SSL_PORT=$(expr 8443 + $PORT_OFFSET) export SHUTDOWN_PORT=$(expr 8005 + $PORT_OFFSET) if [ "x$JAVA_OPTS" = "x" ]; then # JVM Options : Memory JAVA_OPTS="$JAVA_OPTS -Xms512m -Xmx512m" JAVA_OPTS="$JAVA_OPTS -XX:MetaspaceSize=256m - XX:MaxMetaspaceSize=256m" JAVA_OPTS="$JAVA_OPTS -XX:+UseG1GC" JAVA_OPTS="$JAVA_OPTS -XX:+UnlockDiagnosticVMOptions"
  • 19. Installation Guide Confidential Page 19 11/9/2018 JAVA_OPTS="$JAVA_OPTS -XX:+G1SummarizeConcMark" JAVA_OPTS="$JAVA_OPTS -XX:InitiatingHeapOccupancyPercent=35" JAVA_OPTS="-server" JAVA_OPTS="$JAVA_OPTS -Dserver=$SERVER_NAME" JAVA_OPTS="$JAVA_OPTS -Dhttp.port=$HTTP_PORT" JAVA_OPTS="$JAVA_OPTS -Dajp.port=$AJP_PORT" JAVA_OPTS="$JAVA_OPTS -Dssl.port=$SSL_PORT" JAVA_OPTS="$JAVA_OPTS -Dshutdown.port=$SHUTDOWN_PORT" JAVA_OPTS="$JAVA_OPTS -Djava.library.path=$CATALINA_HOME/lib/" JAVA_OPTS="$JAVA_OPTS -verbose:gc" JAVA_OPTS="$JAVA_OPTS -Xloggc:${GC_LOG_DIR}/gc.log" JAVA_OPTS="$JAVA_OPTS -XX:+PrintGCDetails" JAVA_OPTS="$JAVA_OPTS -XX:+PrintGCTimeStamps" JAVA_OPTS="$JAVA_OPTS -XX:+HeapDumpOnOutOfMemoryError" JAVA_OPTS="$JAVA_OPTS - XX:HeapDumpPath=${HEAP_DUMP_DIR}/java_pid.hprof" CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote" CATALINA_OPTS="$CATALINA_OPTS - Dcom.sun.management.jmxremote.port=8086" CATALINA_OPTS="$CATALINA_OPTS - Dcom.sun.management.jmxremote.ssl=false" CATALINA_OPTS="$CATALINA_OPTS - Dcom.sun.management.jmxremote.authenticate=false" CATALINA_OPTS="$CATALINA_OPTS - Djava.rmi.server.hostname=192.168.15.100" JAVA_OPTS="$JAVA_OPTS -Djava.net.preferIPv4Stack=true" JAVA_OPTS="$JAVA_OPTS -Dsun.rmi.dgc.client.gcInterval=3600000" JAVA_OPTS="$JAVA_OPTS -Dsun.rmi.dgc.server.gcInterval=3600000" JAVA_OPTS="$JAVA_OPTS -Dsun.lang.ClassLoader.allowArraySyntax=true "
  • 20. Installation Guide Confidential Page 20 11/9/2018 JAVA_OPTS="$JAVA_OPTS -Djava.awt.headless=true" JAVA_OPTS="$JAVA_OPTS -Djava.net.preferIPv4Stack=true" JAVA_OPTS="$JAVA_OPTS -Djava.security.egd=file:/dev/./urandom" # JAVA_OPTS="$JAVA_OPTS - Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager" fi ##################################### ## Athena Dolly Clustering ### ##################################### #export JAVA_OPTS="$JAVA_OPTS -Ddolly.properties=/opt/dolly-agent- new/dolly.properties" #export JAVA_OPTS="$JAVA_OPTS -javaagent:/opt/dolly-agent-new/lib/core-1.0.0- SNAPSHOT.jar" ##################################### ## Set Scouter Tomcat Agent ### ##################################### #export JAVA_OPTS="$JAVA_OPTS - javaagent:/opt/apm/scouter/agent.java/scouter.agent.jar" #export JAVA_OPTS="$JAVA_OPTS - Dscouter.config=/opt/apm/scouter/agent.java/conf/${SERVER_NAME}.conf" export JAVA_OPTS echo "================================================" echo "JAVA_HOME=$JAVA_HOME" echo "CATALINA_HOME=$CATALINA_HOME" echo "SERVER_HOME=$CATALINA_BASE" echo "HTTP_PORT=$HTTP_PORT" echo "SSL_PORT=$SSL_PORT" echo "AJP_PORT=$AJP_PORT" echo "SHUTDOWN_PORT=$SHUTDOWN_PORT"
  • 21. Installation Guide Confidential Page 21 11/9/2018 echo "================================================" start (인스턴스 기동) start.sh 는 Java Processer 를 구동 시킬 때 사용하며 로그파일의 백업 옵션등을 설정할 수 있습니다. start.sh #!/bin/bash . ./env.sh DATE=`date +%Y%m%d%H%M%S` # Process Check --------------------------------------- PID=`ps -ef | grep java | grep "=$SERVER_NAME" | awk '{print $2}'` echo $PID if [ e$PID != "e" ] then echo "Tomcat ($SERVER_NAME) is already RUNNING..." exit; fi # WAS User Check---------------------------------------- UNAME=`id -u -n` if [ e$UNAME != "e$COMP_USER" ] then echo "$COMP_USER USER to start this SERVER! - $SERVER_NAME..." exit; fi # Make LOG Directory------------------------------------ if [ ! -d "${LOG_DIR}" ]; then
  • 22. Installation Guide Confidential Page 22 11/9/2018 mkdir -p ${LOG_DIR} fi if [ ! -d "${GC_LOG_DIR}" ]; then mkdir -p ${GC_LOG_DIR} fi if [ ! -d "${HEAP_DUMP_DIR}" ]; then mkdir -p ${HEAP_DUMP_DIR} fi # Make Temp Directory------------------------------------ if [ ! -d $CATALINA_BASE/temp ] then echo "temp directory is not exist. create temp directory." mkdir -p $CATALINA_BASE/temp fi # ------------------------------------------------------- nohup $CATALINA_HOME/bin/catalina.sh run >> ${LOG_DIR}/$SERVER_NAME.out 2>&1 & # ------------------------------------------------------ if [ e$1 = "enotail" ] then echo "Starting... $SERVER_NAME" exit; fi # ----------------------------------------------------- sleep 1
  • 23. Installation Guide Confidential Page 23 11/9/2018 $CATALINA_BASE/bin/tail.sh shutdown (요청 처리 후 종료) stop.sh 파일은 JAVA Processer 를 종료할 때 사용합니다. stop.sh #!/bin/sh . ./env.sh $CATALINA_HOME/bin/shutdown.sh kill (강제 종료) kill.sh 파일은 kill -9 명령으로 즉시 종료할 때 사용합니다. Linux OS 의 경우는 다음의 script 를 이용합니다. kill.sh #!/bin/bash . ./env.sh ps -ef | grep java | grep "server=$SERVER_NAME" | awk {'print "kill -9 " $2'} | sh -x 관리 스크립트의 구성 Thread dump (장애 시 dump 파일 생성) dump.sh 파일은 인스턴스가 느려지거나, JVM 의 현재 상황을 보려고 Thread Dump 를 얻으려고 할 때 사용하는 스크립트입니다.
  • 24. Installation Guide Confidential Page 24 11/9/2018 dump.sh #!/bin/sh . ./env.sh for count in 1 2 3 4 5; do echo "Thread Dump : $count" for i in `ps -ef | grep java | grep "SERVER=$SERVER_NAME " | awk '{print $2}'`;do echo "+kill -3 $i" kill -3 $i echo "sleep 1 sec" sleep 1 done echo "done" sleep 3 done Process status (tomcat process 확인) status.sh 스크립트는 프로세스가 동작 중인지 체크하기 위한 스크립트입니다. status.sh #!/bin/sh . ./env.sh ps -ef | grep java | grep "SERVER=$SERVER_NAME "
  • 25. Installation Guide Confidential Page 25 11/9/2018 tail.sh tail.sh 는 nohup 로그를 보기 위한 스크립트입니다. tail.sh #!/bin/sh . ./env.sh tail -f $DOMAIN_BASE/$SERVER_NAME/log/server.log 5 Tomcat DataSource 설정 ⚫ Tomcat 은 Database Connection Pool 로 Commons DBCP 와 Tomcat JDBC Pool 의 2 가지 Pool 을 제공 Common DBCP: org.apache.tomcat.dbcp. dbcp.BasicDataSourceFactory (default) - org.apache.common -> org.apache.tomcat. 패키지 변경 Tomcat JDBC: org.apache.tomcat.jdbc.pool.DataSourceFactory ⚫ DBCP 는 Apache Commons 프로젝트가 제공하는, Database Connection Pool 로 오픈 소스 Database Connection Pool 을 가장 많이 알려져 있고, 많이 사용하고 있습니다. ⚫ Tomcat JDBC 는 Apoache Tomcat 프로젝트가 독립적으로 개발한 Database Connection Pool 입니다. 5.1 JDBC Connection Pool 기본 설정 공통 DB 접속 설정 구분 설명 비고 username DB 연결을 위해 JDBC 드라이버에 전달되는 사용자 이름 password DB 연결을 위해 JDBC 드라이버에 전달되는 사용자 패스워드
  • 26. Installation Guide Confidential Page 26 11/9/2018 url DB 연결을 위해 JDBC 드라이버에 전달되는 URL driverclassname JDBC 드라이버의 FQCN (Fully Qualified Class Name) connectionProperties DB 연결을 위해 JDBC 드라이버에 전달되는 연결 Properties 항목 설명 기본값 defaultAutoCommit Connection 의 AutoCommit true defaultReadOnly Connection 기본 ReadOnly 상태 dirver defaultTransactionsolation Connections 의 기본 Transactionsolation 상태 -READ_COMMITTED -READ_UNCOMMITTED -REPEATABLE_READ -SERIALIZABLE defaultCatalog Connection 의 defaultCatalog dirver cacheState Connection 이 사용될 때 이후 모든 쓰기에서 readOnly 와 autoCommit 설정을 캐시 true defaultQueryTimeout Null 이 아닌 경우 Connection 에서 사용할 쿼리 시간을 제한 null enableAutoCommitOnReturn Connection 이 반환될 때 Connection.setAutoCommit(true)인지 체크되고 해당 값으로 설정 true rollbackOnReturn Connection 반환될 때 rollback 수행 true ⚫ Common JDBC Connection 설정 항목 설명 기본값 Initialsize Pool 이 시작될 때 생성되는 초기 Connection 수 0 maxTotal Pool 에서 동시에 할당할 수 있는 최대 연결 수 8 Maxidle Pool 에서 최대 idle Connection 수 8 Minidle Pool 에서 최소 idle Connection 수 0 maxWaitMillis Connection 을 얻기 위해 대기 시간 무제한 ⚫ Tomcat JDBC Connection 설정
  • 27. Installation Guide Confidential Page 27 11/9/2018 항목 설명 기본값 Initialsize Pool 이 시작될 때 생성되는 초기 Connection 수 10 maxActive Pool 에서 동시에 할당할 수 있는 최대 연결 수 100 Maxidle Pool 에서 최대 idle Connection 수 100 Minidle Pool 에서 최소 idle Connection 수 10 maxWaitMillis Connection 을 얻기 위해 대기 시간 무제한 ⚫ JDBC Connection Validation 설정 항목 설명 기본값 validationQuery Connection 유효성 확인을 위한 SQL Query testOnBorrow Pool 에서 Connection 을 전달하기 전에 유효성을 검증. 검증에 실패했을 경우, 해당 연결을 삭제하고, 새롭게 Pool 에서 Connection 시도 testOnReturn Pool 에 Connection 을 반환하기 전에 Connection 유효성을 검증 testWileidle Idle 상태의 Connection 에 대한 유효성을 검증 검증에 실패할 경우 해당 Connection 을 파기함 이기능은 Evictor 를 이용하기 때문에 Evictor 를 활성화 해야됨(timeBetweenEvictionRunsMillis 설정 참조) initSQL Connection 을 만들 때 실행되는 SQL Query validationClassName Validation Class 명을 지정. 이 속성을 지정 시 vaildationQuery 에 의한 검증 대신, Validator Class 에 의한 연결의 검증이 이루어짐 (org.apache.tomcat.jdbc.pool.Validator 인터페이스 구현 필요) validationInterval Vaildation 의 실행 간격 지정 30 초 logValidationErrors Validation 중 오류 발생시, 로그 출력할지에 대한 설정 false ⚫ PoolCleaner 설정(Evictor) 항목 설명 기본값
  • 28. Installation Guide Confidential Page 28 11/9/2018 timeBetweenEvictionRunsMilles Idle 상태의 Connection 을 Check 하는 간격 5 초 minEvictableIdleTimeMillis Idle Connection 의 생존 기간 60 초 ⚫ Connection Leak 검출 설정 (removeAbandoned) 항목 설명 기본값 removeAbandoned Connection 누수 감지 설정 사용 여부 false removeAbandonedTimeout Connection 누수로 판단하기까지의 시간 60 초 logAbandoned Connection 누수를 감지했을 때, Connection 을 Close 하지 않은 애플리케이션의 Stuck Thread 를 로그로 출력 여부의 설정 False suspectTimeout Conection 누수의 의심에 대한 판단 할때까지의 시간 suspectTimeout 시간을 초과한 Connection 에 대해 경고 로그 및 JMX 에 통지를 수행 0 AbandonWhenPercentageFull 누수된 Connection 을 파기할 비율을 설정 0~100 사이로 설정하며, 이 설정을 초과한 누수 Connection 을 파기 RemoveAbandonedTimeout 가 초과한 Connection 은 모두 파기 0 ⚫ DataSource 설정 샘플 <?xml version='1.0' encoding='utf-8'?> <Context> <WatchedResource>WEB-INF/web.xml</WatchedResource> <Resource name="jdbc/OracleDS" auth="Container" type="javax.sql.DataSource" factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" testWhileIdle="true" testOnBorrow="false" testOnReturn="false" validationQuery="SELECT 1 FROM DUAL" validationInterval="30000" timeBetweenEvictionRunsMillis="30000" maxActive="10" maxIdle="5" maxWait="10000"
  • 29. Installation Guide Confidential Page 29 11/9/2018 initialSize="5" removeAbandonedTimeout="60" removeAbandoned="true" logAbandoned="true" minEvictableIdleTimeMillis="30000" jmxEnabled="false" jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.Connection State;org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer" username="scott" password="jan01jan" driverClassName="oracle.jdbc.OracleDriver" poolPreparedStatements="true" url="jdbc:oracle:thin:@192.168.10.100 </Context> 5.2 DataSource 설정 ⚫ Global Resource Level - DataSource Pool Global Level 공유 ✓ Global Resource(server.xml) + Resource Link(application-context.xml) ✓ Server: ${CATALINA_HOME}/conf/server.xml <Server port="${port.shutdown}" shutdown="ARGO_INSTANCE_SHUTDOWN"> <GlobalNamingResources> <Resource name="jdbc/argo" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://10.0.1.88:3306/oom" username="root“ password="uCO5FkZ3NfgDo/LWB0l+0A==" …… /> </GlobalNamingResources> </Server> ⚫ Context Level - DataSource Pool 해당 Context 별 생성됨 - Global Context (context.xml) ✓ 모든 Application 에서 사용 가능 ✓ Context(1) : ${CATALINA_HOME}/conf/context.xml <?xml version="1.0" encoding="utf-8" standalone="no"?> <Context> <WatchedResource>WEB-INF/web.xml</WatchedResource> <ResourceLink global="jdbc/argo" name="jdbc/argo" type="javax.sql.DataSource"/>
  • 30. Installation Guide Confidential Page 30 11/9/2018 </Context> - Application Context (application-context.xml) ✓ 해당 Application 에서만 사용 가능 ✓ Context(2) : ${CATALINA_HOME}/conf/Catalina/localhost/${CONTEXT_NAME}.xml <?xml version="1.0" encoding="UTF-8" standalone="no"?> <Context docBase="/sorc001/argo/application/sample-simpleweb" path="/" reloadable="false"> <ResourceLink global="jdbc/argo" name="jdbc/argo" type="javax.sql.DataSource"/> </Context> 6 Tomcat Deploy 설정 6.1 Application Deploy Tomcat 인스턴스는 $CATALINA_BASE/webapps 또는 다른 경로일 경우 server.xml 에 context 를 지정하여 deploy 설정이 가능합니다. ⚫ Deploy Type ✓ Archive File Type ✓ Exploded Structure ⚫ Web Archive ✓ Catalina.base/webapps 디렉토리에 .war 파일을 복사하여 디플로이 ⚫ Exploded ✓ Catalina.base/webapps 디렉토리에 exploded 형태의 디렉토리 구조를 사용 <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="false"> <Context path="" docBase="/opt/was/apps/test.war" reloadable="false"/> </Host> 항목 설명 기본값 path 컨텍스트 경로에 대한 설정 docBase 애플리케이션 document 경로 설정 reloadable 클래스 변경시 마다 자동 reload
  • 31. Installation Guide Confidential Page 31 11/9/2018 7 Tomcat 운영 인프라 환경 설정 7.1 OS Kernel Parameter 설정 /etc/sysctl.conf 리눅스 OS 시스템에서 기본 default 설정에서 몇가지 설정을 변경 하게 되면 빠른 장애 감지 효과 등이 있으므로 튜닝 요소가 됩니다. 해당 설정은 다음의 /etc/sysctl.conf 파일에 추가하여 설정을 할 수 있습니다. 항목 설명 기본값 권장값 net.ipv4.neigh.default.unres_qlen Increase TCP 6 100 net.ipv4.tcp_keepalive_time Drop Keep-alive time 7200 30 net.ipv4.tcp_fin_timeout Drop it so lack of FIN times out quicker 60 10 net.core.netdev_max_backlog Increase number of incoming connections backlog 1000 2500 net.ipv4.tcp_retries1 How many times to retry killing an alive TCP connection 3 2 net.ipv4.tcp_retries2 How many times to retry killing an alive TCP connection 15 3 net.ipv4.ip_local_port_ran Increase Local port range 32768 60999 1024 65000 net.core.rmem_max Max TCP receive Buffer 25165824 16777216 net.core.rmem_default Default TCP receive Buffer 8388608 16777216 net.core.wmem_max Max TCP Send Buffer 25165824 16777216 net.core.wmem_default Default TCP send Buffer 212992 16777216
  • 32. Installation Guide Confidential Page 32 11/9/2018 net.ipv4.tcp_window_scali ng Enable really big(>65kb) TCP window scaling 0 1 net.ipv4.tcp_timestamps Turn off timestamp 1 0 net.ipv4.tcp_sack Turn off tcpsack 1 0 net.ipv4.tcp_orphan_retrie s 유저파일 핸들에 할당되지 않은 연결에 몇 번 재시도할지 7 0 vm.swappiness Swap 사용량결정 10 1 /etc/security/limits.conf Open files 및 native stack 관련해서 limits 설정을 변경합니다. ( ulimit -a) asmanager soft nofile 8192 asmanager hard nofile 65535 asmanager soft nproc 8192 asmanager hard nproc 65535 공통 JVM 옵션 설정 항목 설명 값 client/server -client : JVM hotspot 의 client 모드로 사용, client 모드는 Application 시작 시간과 메모리 사용량을 최소로 수행 - server -server : 컴파일 등 최적화를 수행하여 최적의 성능으로 수행 Xms 초기 메모리 크기 1024 M Xmx 최대 메모리 크기 1024 M -XX:+PrintGCDetails Garbage Collection 시 조금 더 상세한 항목의 로그 출력을 위한 설정 -XX:+ UseG1GC - G1GC를 사용하기 위한 설정
  • 33. Installation Guide Confidential Page 33 11/9/2018 - XX:+HeapDumpOnOu tOfMemoryError JVM 에서 OutOfMemory 에러가 발생할 경우 Heap Memory Dump 를 생성할지 여부를 결정 -XX:HeapDumpPath Heap Memory 생성시 생성 위치 -Xloggc GC 로그를 별도의 파일로 저장하기 위한 옵션 Memory 사용 추이를 확인할 수 있음. - Dcom.sun.managemen t.jmxremote - Dcom.sun.managemen t.jmxremote.port=1501 1 - Dcom.sun.managemen t.jmxremote.authentica te=false - Dcom.sun.manageme nt.jmxremote.ssl=false JMX : Java Management Extention 활성화 내용으로 서버의 모니터링을 위한 설정 8 Tomcat 모니터링 8.1 모니터링 가이드 모니터링 항목 대항목 중항목 세부항목 설명 모니터링 결과 OS System Resource Usage CPU 사용량 CPU 전체 사용량 양호 Memory 사용량 Memory 전체 사용량 양호 운영환경 서버 상태 Process Resource Usage Process CPU 과부하 사용 프로세스 CPU 사용률 양호 Disk Usage 설치 디스크의 사용량 양호 Server Status Server Status Server Life Cycle 양호 실행 상태 Execute Status Thread status 실행 쓰레드 및 idle thread status 양호 Garbage Collection Full GC Duration Full GC 처리 상태 양호
  • 34. Installation Guide Confidential Page 34 11/9/2018 Heap Memory Heap Memory Init 힙메모리 초기값 양호 Heap Memory Max 힙메모리 최대값 설정 양호 Perm Area Max Size MaxPermSize 의 설정 양호 JDBC 커넥션풀 Configuration JDBC url jdbc connection meta data URL 양호 JDBC driver name jdbc driver class name 양호 Monitorming Connections 사용중인 커넥션 개수 양호 로그 분석 ServerLog Critical Message 부팅 Critical 에러 양호 Too many open files 파일 오픈 개수 초과 양호 OutOfMemoryError 힙메모리 부족 양호
  • 35. Installation Guide Confidential Page 35 11/9/2018 System Resource 체크 cpu 사용량 사용서비스 되어지는 CPU 의 사용량 체크를 위하여 다음의 명령어를 통해 모니터링을 진행합니다. vmstat 1 100 항목 설명 us : user cpu usage sy : system cpu usage id : cpu idle usage 정상 여부 확인 : id 60% 이상일 경우 양호, id 30% 미만인 경우 위험 $ vmstat 1 100 procs -----------memory---------- ---swap-- -----io---- -- system-- -----cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 853424 69016 4648 29128 0 0 13 8 8 4 0 0 99 0 0 0 0 853424 69008 4648 29128 0 0 0 0 113 242 0 0 100 0 0 0 0 853424 69008 4648 29128 0 0 0 0 75 211 0 0 100 0 0 0 0 853424 69008 4648 29128 0 0 0 0 106 254 0 0 100 0 0 0 0 853424 69008 4648 29128 0 0 0 0 73 208 0 0 100 0 0 0 0 853424 69008 4648 29128 0 0 0 0 118 263 0 0 100 0 0 0 0 853424 69008 4648 29128 0 0 0 0 78 203 0 0 100 0 0 0 0 853424 69008 4648 29128 0 0 0 0 95 244 0 0 100 0 0 0 0 853424 69008 4648 29128 0 0 0 0 89 219 0 0 100 0 0 0 0 853424 69008 4648 29128 0 0 0 0 85 237 0 0 100 0 0 0 0 853424 69008 4648 29128 0 0 0 0 93 221 0 0 100 0 0 0 0 853424 69008 4648 29128 0 0 0 0 109 244 1 0 100 0 0
  • 36. Installation Guide Confidential Page 36 11/9/2018 Memory 사용량 사용서비스 되어지는 Memory 사용량 체크를 위하여 다음의 명령어를 통해 모니터링을 진행합니다. free -m 항목 설명 total : 전체 메모리 용량 used : 메모리 사용량 free : 여유 메모리 공간 shared : 공유메모리 사용량 buffers : 버퍼 메모리 공간 cached : 캐쉬메모리 사용량 정상 여부 확인 : free 최소 여유공간이 전체 메모리 대비 최소 10% 이상일 경우 $ free -m total used free shared buffers cached Mem: 1877 1810 66 0 0 30 -/+ buffers/cache: 1779 98 Swap: 4031 831 3200 Process Resource 체크 프로세스 과부하 cpu 여부 확인 서비스 되어지는 process 의 CPU 사용량이 과부하 인지 여부를 체크합니다. top 항목 설명 top 명령을 통해서 해당 프로세스의 현재 CPU 정보를 확인합니다. 정상 여부 확인 : 프로세스당 CPU 사용이 많은지 여부를 확인합니다. $ top top - 03:14:41 up 14 days, 12:59, 4 users, load average: 0.19, 0.13, 0.09
  • 37. Installation Guide Confidential Page 37 11/9/2018 Tasks: 336 total, 1 running, 335 sleeping, 0 stopped, 0 zombie Cpu(s): 3.7%us, 3.5%sy, 0.0%ni, 92.1%id, 0.7%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 16271536k total, 15962368k used, 309168k free, 697304k buffers Swap: 16777208k total, 529588k used, 16247620k free, 6697584k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 27150 wasuser 20 0 3016276 102456 14680 S 0.3 2.6 1:55.56 /usr/java/jdk1.8.0_152/bin/java - Djava.util.logging.config.file=/opt/+ 32607 wasuser 20 0 2411612 349528 18928 S 0.3 9.0 64:52.97 /usr/java/jdk1.7.0_80/bin/java - D[Standalone] -XX:+UseCompressedOops + 1 root 20 0 191108 3044 1952 S 0.0 0.1 9:22.88 /usr/lib/systemd/systemd --switched-root - -system --deserialize 21 Disk Usage 서비스 되어지는 Disk 사용량을 파악하여 여유 공간을 확인합니다. df -h 정상 여부 확인 : 서비스 사용 영역 및 root 파일 시스템의 사용율이 80% 인 경우 위험으로 간주합니다. $ df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_rhevmtest-lv_root 26G 23G 1.9G 93% / tmpfs 939M 72K 939M 1% /dev/shm /dev/vda1 485M 38M 422M 9% /boot Server Status Service Process 정상 여부 확인 현재 서버 상태에 대해서 모니터링을 합니다. ps –ef | grep ${processName}
  • 38. Installation Guide Confidential Page 38 11/9/2018 ex) ps –ef | grep java | grep SERVER_NAME 항목 설명 ps 명령을 통해서 해당 프로세스의 현재 동작 여부를 확인합니다. 정상 여부 확인 : 프로세스 목록에 해당 내용이 있어야만 합니다. $ ps -ef|grep java|grep SERVER_NAME wasuser 27150 1 65 21:26 pts/2 00:00:09 /usr/java/jdk1.8.0_152/bin/java - Djava.util.logging.config.file=/opt/was/servers/tomcat8_11/conf/logging.properties - java.util.logging.manager=org.apache.juli.ClassLoaderLogManager -server -Dserver=tomcat8_11 - Dhttp.port=8180 -Dajp.port=8109 -Dssl.port=8543 -Dshutdown.port=8105 - Djava.library.path=/opt/was/apache-tomcat-8.5.23/lib/ -verbose:gc - Xloggc:/opt/was/servers/tomcat8_11/logs/gclog/gc.log -XX:+PrintGCDetails - XX:+PrintGCTimeStamps -XX:+HeapDumpOnOutOfMemoryError - XX:HeapDumpPath=/opt/was/servers/tomcat8_11/logs/heaplog/java_pid.hprof - Djava.net.preferIPv4Stack=true -Dsun.rmi.dgc.client.gcInterval=3600000 - Dsun.rmi.dgc.server.gcInterval=3600000 -Dsun.lang.ClassLoader.allowArraySyntax=true - Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -Djava.security.egd=file:/dev/./urandom - Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -classpath /opt/was/apache-tomcat-8.5.23/bin/bootstrap.jar:/opt/was/apache-tomcat- 8.5.23/bin/tomcat-juli.jar -Dcatalina.base=/opt/was/servers/tomcat8_11 - Dcatalina.home=/opt/was/apache-tomcat-8.5.23 - Djava.io.tmpdir=/opt/was/servers/tomcat8_11/temp org.apache.catalina.startup.Bootstrap start Port Listen 정상 여부 확인 netstat –an | grep ${servicePort} ex) netstat –an | grep 8180 항목 설명 netstat 명령을 통해서 해당 프로세스의 현재 Network 동작 여부를 확인합니다. 정상 여부 확인 : Port 목록에 해당 서비스에서 사용되는 포트가 LISTEN 항목으로 되어 있어야 합니다.
  • 39. Installation Guide Confidential Page 39 11/9/2018 $ netstat -an | grep 8180 tcp 0 0 0.0.0.0:8180 0.0.0.0:* LISTEN 27150/java 로그 파일 사이즈 체크 서비스 되어지는 해당 process 의 server 로그 및 기타 gc, nohup 로그등의 사용량을 체크합니다. du –csh *log 정상 여부 확인 : 서비스 사용 로그 파일이 최대 2G 이내여야 합니다. $ du –csh * 20K catalina.2018-05-03.log 20K catalina.2018-07-03.log 136K catalina.2018-07-10.log 36K catalina.2018-07-19.log 12K catalina.2018-11-08.log 224K total Execute Status – 실행 상태 Garbage Collection 로그를 통한 서비스 정상 여부 서버 기동시 verbosegc 옵션을 통하여 gc 모니터링을 통한 서비스 정상 여부를 확인합니다. tail ex) tail -f gc.log.20140513 항목 설명 tail 명령을 통해서 현재 verbosegc 로그를 확인하여 지속적인 Full GC 여부를 모니터링합니다. 정상 여부 확인 : 2~5 지속적인 Full GC 로그가 보인다면 비정상으로 판단
  • 40. Installation Guide Confidential Page 40 11/9/2018 단 GC 와 GC 사이의 간격이 넓다면 정상으로 간주한다. $ tail -f gc.log.20140401143142 182.278: [GC [PSYoungGen: 195658K->12765K(270336K)] 405054K->234073K(969728K), 0.0317180 secs] [Times: user=0.06 sys=0.01, real=0.04 secs] 194.332: [GC [PSYoungGen: 201693K->12224K(268288K)] 423001K->245396K(967680K), 0.0428970 secs] [Times: user=0.07 sys=0.01, real=0.04 secs] 352.075: [GC [PSYoungGen: 257408K->15776K(302080K)] 628028K->402092K(1001472K), 0.0556460 secs] [Times: user=0.10 sys=0.00, real=0.06 secs] 498.763: [GC [PSYoungGen: 75588K->288K(299520K)] 461905K->402244K(998912K), 0.0359840 secs] [Times: user=0.04 sys=0.01, real=0.04 secs] 498.799: [Full GC [PSYoungGen: 288K->0K(299520K)] [ParOldGen: 401956K- >347983K(699392K)] 402244K->347983K(998912K) [PSPermGen: 72985K->70633K(143872K)], 1.4463740 secs] [Times: user=2.71 sys=0.00, real=1.44 secs] 508.691: [GC [PSYoungGen: 3035K->64K(302080K)] 351018K->348047K(1001472K), 0.0066010 secs] [Times: user=0.01 sys=0.00, real=0.00 secs] 508.697: [Full GC [PSYoungGen: 64K->0K(302080K)] [ParOldGen: 347983K->340430K(699392K)] 348047K->340430K(1001472K) [PSPermGen: 70636K->70636K(162304K)], 0.5912480 secs] [Times: user=1.13 sys=0.00, real=0.59 secs] 509.497: [GC [PSYoungGen: 1345K->64K(302080K)] 341775K->340494K(1001472K), 0.0111840 secs] [Times: user=0.01 sys=0.00, real=0.01 secs] 509.509: [Full GC [PSYoungGen: 64K->0K(302080K)] [ParOldGen: 340430K->340427K(699392K)] 340494K->340427K(1001472K) [PSPermGen: 70637K->70637K(156160K)], 0.8215780 secs] [Times: user=1.40 sys=0.00, real=0.83 secs] 510.331: [GC [PSYoungGen: 189K->96K(303616K)] 340616K->340523K(1003008K), 0.0101970 secs] [Times: user=0.01 sys=0.00, real=0.01 secs] 510.341: [Full GC [PSYoungGen: 96K->0K(303616K)] [ParOldGen: 340427K->340463K(699392K)] 340523K->340463K(1003008K) [PSPermGen: 70637K->70637K(148480K)], 0. Heap Memory 설정 확인 서비스 Tomcat 의 Heap Memory 설정 상태를 모니터링을 합니다. ps –ef | grep ${processName} ex) ps –ef | grep java | grep SERVER_NAME
  • 41. Installation Guide Confidential Page 41 11/9/2018 항목 설명 ps 명령을 통해서 해당 프로세스의 현재 동작 여부를 확인합니다. 정상 여부 확인 : 프로세스 목록 내용에서 Heap Memory 설정값이 적정값 ( min:max 1G <= 2G) 으로 설정이 되어 있는지 확인합니다. $ ps –ef | grep java | grep SERVER_NAME wasuser 27150 1 65 21:26 pts/2 00:00:09 /usr/java/jdk1.8.0_152/bin/java - Djava.util.logging.config.file=/opt/was/servers/tomcat8_11/conf/logging.properties - java.util.logging.manager=org.apache.juli.ClassLoaderLogManager -server -Dserver=tomcat8_11 - Dhttp.port=8180 -Dajp.port=8109 -Dssl.port=8543 -Dshutdown.port=8105 - Djava.library.path=/opt/was/apache-tomcat-8.5.23/lib/ -verbose:gc - Xloggc:/opt/was/servers/tomcat8_11/logs/gclog/gc.log -XX:+PrintGCDetails - XX:+PrintGCTimeStamps -XX:+HeapDumpOnOutOfMemoryError - XX:HeapDumpPath=/opt/was/servers/tomcat8_11/logs/heaplog/java_pid.hprof - Djava.net.preferIPv4Stack=true -Dsun.rmi.dgc.client.gcInterval=3600000 - Dsun.rmi.dgc.server.gcInterval=3600000 -Dsun.lang.ClassLoader.allowArraySyntax=true - Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -Djava.security.egd=file:/dev/./urandom - Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -classpath /opt/was/apache-tomcat-8.5.23/bin/bootstrap.jar:/opt/was/apache-tomcat- 8.5.23/bin/tomcat-juli.jar -Dcatalina.base=/opt/was/servers/tomcat8_11 - Dcatalina.home=/opt/was/apache-tomcat-8.5.23 - Djava.io.tmpdir=/opt/was/servers/tomcat8_11/temp org.apache.catalina.startup.Bootstrap start 8.2 모니터링 툴 소개 VisualVM ⚫ JVM 전반에 대해 모니터링을 제공하는 툴 ⚫ JVM 에 포함 ($JAVA_HOME/bin/jvisualvm)되어 있으며, 공식 홈페이지에서도 다운로드 가능 ⚫ 제공기능 ✓ Display local and remote Java applications ✓ Display Application Configuration and runtime environment ✓ Monitor application threads, application performance and memory consumption ✓ Take and display thread dumps ✓ Take and browse heap dumps
  • 42. Installation Guide Confidential Page 42 11/9/2018 Scouter APM ⚫ 오픈소스 Application Performance Managerment 으로 Java, WAS 에 대한 모니터링 ⚫ J2EE 시스템 운영 상태 모니터링을 위한 각종 데이터를 모니터링 ⚫ WAS 단위 인스턴스 사용자 정의형 통합 대시보드 구성 환경 지원 ⚫ Hardware, OS, Application, JVM 모니터링 가능
  • 43. Installation Guide Confidential Page 43 11/9/2018 9 APPENDICES 9.1 Document Guidelines http://tomcat.apache.org/tomcat-8.5-doc/index.html 9.2 Project Migration Report Sections Omitted N/A