Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

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

2.136 Aufrufe

Veröffentlicht am

Apache Tomcat 설치, 환경 구성, 모니터링 및 운영에 대한 전반적인 가이드를 담은 문서입니다.
필요 시 패치까지 만들어서 사용하고 있습니다.
준영님 감사드려요.

Veröffentlicht in: Software
  • Als Erste(r) kommentieren

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

  1. 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. 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. 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. 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. 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. 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. 7. Installation Guide Confidential Page 7 11/9/2018 - 웹 애플리케이션에 직접 외부 컨텐츠를 포함할 수 있도록 지원 - 리팩토링(커넥터, 라이프 사이클) 및 많은 내부 코드 정리 2 Apache Tomcat 동작원리 2.1 Tomcat Architecture ⚫ Server ✓ 서버의 개념으로 Tomcat 컨테이너 자체를 나타냄 ⚫ Service ✓ 서버 내에 존재하는 컴포넌트에 대한 중재자 역할을 수행하며, 엔진에 하나 혹은 그 이상의 커넥터 사용 ⚫ Engine ✓ 특정 서비스를 위한 요청 처리 파이프라인을 나타냄 ✓ 하나의 서비스는 여러 개의 커넥터를 가질 수 있으며, 엔진은 이러한 커넥터들로부터 모든 요청을 수신하고 처리함 ⚫ Host ✓ 특정 네트워크의 이름을 Tomcat 서버에 할당
  8. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 42. Installation Guide Confidential Page 42 11/9/2018 Scouter APM ⚫ 오픈소스 Application Performance Managerment 으로 Java, WAS 에 대한 모니터링 ⚫ J2EE 시스템 운영 상태 모니터링을 위한 각종 데이터를 모니터링 ⚫ WAS 단위 인스턴스 사용자 정의형 통합 대시보드 구성 환경 지원 ⚫ Hardware, OS, Application, JVM 모니터링 가능
  43. 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
  44. 44. Installation Guide Confidential Page 44 11/9/2018

×