ݺߣ

ݺߣShare a Scribd company logo
Enterprise ????
Tomcat ????
Part 1 : Tomcat ? ?? ????
Victor Lee
sleepred@gmail.com
2015.12.29
? Tomcat ??
? Tomcat Architecture
? Basic Features
- Configuration, Connector, Tomcat JDBC Connection Pool ?
? Advance Features
- ??? ??, Session Clustering ?
? Management & Monitoring
- Tomcat Manager, JK Manager, VisualVM, Scouter ?
? Tomcat Troubleshooting & ?? ???
? Tomcat Community ??
- Build, Tomcat ????, Contribution
?? ?? ???
Complexity
Vendor
Dependency
Cost Overrun
Solution?
Stability
Security
Availability
Solution?
 ASF : http://www.apache.org/
Top Open Source Communities
 Apache Tomcat : http://tomcat.apache.org/
 User Mailing list : http://mail-archives.apache.org/mod_mbox/tomcat-users/
 https://plumbr.eu/blog/java/most-popular-java-ee-containers-2015-edition
WEBSITE LISTS AVAILABLE
Create a list of 158,040 websites using Apache
Tomcat.
 https://wappalyzer.com/applications/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)
? Tomcat History
? Tomcat 3.x (1999?) : ?? ???
? Tomcat 4.x (2003?) : Catalina ???? ??
? Tomcat 5.x (2004?) : Session Replication ?? ??
? Tomcat 6.0 (2007?) : Primary-Secondary ?? Sessioin Replication ??
? Tomcat 7.0 (2011?) : Security ??, Connector ????
? Tomcat 8.0 (2014?) : Resouce ????, WebSocket ?? ??
? Tomcat 9.0 (2015?) : 9.0.0.M1(alpha) Release (2015-11-19)
? Tomcat? Serlvet Spec ? Major ???? ???
? Servlet ??? Tomcat ??(Spec)
Servlet Spec
JSP
Spec
EL Spec WebSocket Spec Tomcat version
Release
revision
Support Java Versions
4.0
TBD
(2.4?)
TBD
(3.1?)
TBD (1.2?) 9.0.x 9.0.0.M1 (alpha) 8 and later
3.1 2.3 3.0 1.1 8.0.x 8.0.28 7 and later
3.0 2.2 2.2 1.1 7.0.x 7.0.65
6 and later
(WebSocket 1.1 requires 7 or
later)
2.5 2.1 2.1 N/A 6.0.x 6.0.44 5 and later
2.4 2.0 N/A N/A 5.5.x (archived) 5.5.36 (archived) 1.4 and later
2.3 1.2 N/A N/A 4.1.x (archived) 4.1.40 (archived) 1.3 and later
2.2 1.1 N/A N/A 3.3.x (archived) 3.3.2 (archived) 1.1 and later
 TBD : To Be Determined
 Community support version : Tomcat6, Tomcat7, Tomcat8, Tomcat9
End of life for Apache Tomcat 6.0.x : 31 December 2016.
?? ?? ???
DB
WASWEB
Session
Server
L4 / Switch
OpenEJB
Browser(User) Network
Session
replication
Load
Balancing
Load
Balancing
Fail-over
Fail-over
?? ?? ???
Coyote Jasper
Catalina
Server
Service(*)
Engine
Host(*)
Context(*)
ConnectorConnectorConnector Valve
Valve
ValveValve
Valve
Valve
Global Resource
Clustering SupportJMX SupportJSP SupportSecurity
Utility
R
e
q
u
e
s
t
Realm
Realm
Realm
Wrapper(*)
ValveValve
ValveListener
ValveListener
ValveListener
ValveListener
Logger
Resources
Executor
Loader
Manager
Listener
Listener
Listener
ValveListener
Jar
Scanner
ResourceResource
JSPJSP
ServletsServlet
? Server : Server = Catalina servlet container = Tomcat Instance
JVM ??? Singleton ?? ??, Server?? ???? Service? Life Cycle?? ??
? Context : web application? ???? ????, Spec ? ServletContext? ??.
WAR/EAR ????, exploded? ????
 http://tomcat.apache.org/tomcat-8.0-doc/config/server.html ? ??
? Listeners : Tomcat Lifecycle ??? ??? action? ???? ????
Tomcat? lifecycle ? ???????? ?? ?? ?? ??
ex) APR Lifecycle Listener, Global Resources Lifecycle Listener ?
? Manager : HTTP ??? ?? ????? session manager
? Logger : ?? JULI(Java Logging implimentation)?? ?? ???? ??
? Valve : ????(Engine, Host, Context)? ??? ??? request ?? pipeline(valve chain
??)?? ??? ?? ????
? Server.xml ??
<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host>
</Engine>
</Service>
</Server>
 It is NOT recommended to place <Context> elements directly in the server.xml file
(https://tomcat.apache.org/tomcat-8.0-doc/config/context.html)
?? ?? ???
Tomcat
? Client ??? ??? ?? Container? ???? ?? Component
? Connector ? Tomcat? ??? ???? Coyote Architecture ? ???
? Protocal? ?? ??? ?? ???? ??
? Connector Protocal
? HTTP/HTTPS (HTTP/1.1)
? AJP (AJP/1.3)
? Connector ????
? Java Blocking I/O (BIO) : All I/O operations are blocking in processor thread (Read, Write, etc. )
 Simple, stable, mature
? Java Non-blocking I/O (NIO) : Allows huge number of parallel requests
? Java NIO.2 (NIO2) : like the NIO connector but uses the NIO2 framework
? Native / Apache Portable Runtime (APR) : Native code (C), Use JNI
?
 http://www.tecbar.net/optimize-tomcat-performance/
Tomcat
? Connector ??
? ?????? APR > NIO > BIO ??, JAVA ??, OS ??, ??? ?? ??? ?? ???
? Stability : BIO > NIO or APR
? SSL : APR > NIO > BIO
? Low concurrency : BIO > APR > NIO
? High concurrency No Keep-Alive : BIO > APR > NIO
? High concurrency Keep-Alive : APR > NIO > BIO
 http://www.tecbar.net/optimize-tomcat-performance/
Tomcat
? HTTP Connector? HTTP/1.1 protocol? ???? ????
? ?? :
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1 connectionTimeout="20000 redirectPort="8443" />

</Service>
?? ?? ???
protocol
HTTP, AJP ? Connector? Protocal? ???? ???? ???? ?? ???
???
- BIO(java connector) : org.apache.coyote. http11.Http11Protocol
- NIO(java connector) : org.apache.coyote. http11.Http11NioProtocol
- NIO2(java connector) : org.apache.coyote. http11.Http11Nio2Protocol
- APR(native connector) : org.apache.coyote. http11.Http11AprProtocol
HTTP/1.1
Tomcat
 http://tomcat.apache.org/tomcat-8.0-doc/config/http.html
 http://tomcat.apache.org/tomcat-8.0-doc/config/http.html#Connector_Comparison
? HTTP Connector? HTTP/1.1 protocol? ???? ????
Tomcat
? AJP Connector? AJP protocol? ???? Tomcat? web server? ??? ? ???? ????
? ?? :
<Service name="Catalina">
<Connector port="8089" protocol=AJP/1.3 redirectPort="8443" />

</Service>
?? ?? ???
protocol
HTTP, AJP ? Connector? Protocal? ???? ???? ???? ?? ???
???
- BIO : org.apache.coyote.ajp.AjpProtocol
- NIO : org.apache.coyote.ajp.AjpNioProtocol
- NIO2 : org.apache.coyote.ajp.AjpNio2Protocol
- APR : org.apache.coyote.ajp.AjpAprProtocol
AJP/1.3
Tomcat
 http://tomcat.apache.org/tomcat-8.0-doc/config/ajp.html
 http://tomcat.apache.org/tomcat-8.0-doc/config/http.html#Connector_Comparison
 http://www.tecbar.net/optimize-tomcat-performance/
? AJP Connector? AJP protocol? ???? Tomcat? web server? ??? ? ???? ????
?? ?? ???
Tomcat Logging
? JULI Logging Framework ??
Apache Commons Logging ???? ??
 java.util.logging ?? (default)
extra ???? ?? Log4j ? Logging Framework ?? ??
? JULI Logging Architecture
Tomcat Logging
? ClassLoaderLogManager
java.util.logging.LogManager? ??
- $CATALINA_BASE/conf/logging.properties ?? Loading ??, Tomcat? ??
- ClassLoader? path?? logging.properties? ??, ClassLoader? Log ??? ??
-> ??????? ? log Configuration ??
# -----------------------------------------------------------------------------
# LOGGING_MANAGER (Optional) Override Tomcat's logging manager
# Example (all one line)
# LOGGING_MANAGER="-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager"
# -----------------------------------------------------------------------------
if [ -z "$LOGGING_MANAGER" ]; then
LOGGING_MANAGER="-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager"
fi
Tomcat Logging
? logging.properties
handlers = 1catalina.org.apache.juli.AsyncFileHandler, 2localhost.org.apache.juli.AsyncFileHandler,
java.util.logging.ConsoleHandler
.handlers = 1catalina.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler
############################################################
# Handler specific properties.
# Describes specific configuration info for Handlers.
############################################################
1catalina.org.apache.juli.AsyncFileHandler.level = FINE
1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.
2localhost.org.apache.juli.AsyncFileHandler.level = FINE
2localhost.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
2localhost.org.apache.juli.AsyncFileHandler.prefix = localhost.
############################################################
# Facility specific properties.
# Provides extra control for each logger.
############################################################
java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = 2localhost.org.apache.juli.AsyncFileHandler
Tomcat Logging
? Tomcat Logging ??
java.util.logging, javax.servlet.ServletContext.log, Console, Access Logging ? ???
?? ?? ???
Java Logging API
Tomcat??? Application? ????? ???? ?? java.util.logging
??? ??? JULI? ??
logging.properties ??? ??? ??
ex) localhost.yyyy-MM-
dd.log
Servlets logging API
javax.servlet.ServletContext.log()? ?? ???? ??? ? ???
logging.properites ??? ?? ?
org.apache.catalina.core.ContainerBase.[${engine}].[${host}].[${context}]
? ??? ??
ex) manager.yyyy-MM-
dd.log
Console Tomcat?? ? ???? STDERR/STDOUT ex) catalina.out
Access logging
AccessLogValve ?? ExtendedAccessLogValve?? ???? ??
Access Log Valve? ??? ??
ex) access_log.yyyy-MM-
dd
?? ?? ???
Tomcat Session Manager
? Tomcat Session Manager
HTTP ??? ?? ????? session manager? Context?? ????, ??? ??? ?? ?
? ???? ?? ???? ?? ??? (default : org.apache.catalina.session.StandardManager)
? Session Manager ??
 http://tomcat.apache.org/tomcat-8.0-doc/config/manager.html ? ??
<Manager classname=org.apache.catalina.session.StandardManager />
?? ?? ???
StandardManager
?? ??. ??? instance? ???? ??? ???? org.apache.catalina.sess
ion.StandardManager
PersistentManager
??? ?? DB? ??? Persist. ?? ???? ?? ??(fault tolerance) org.apache.catalina.sess
ion.PersistentManager
DeltaManager
All-to-All ?? Session Replication ?? ?? org.apache.catalina.sess
ion.DeltaManager
BackupManager
Primary-Secondary Session Replication ??? ?? org.apache.catalina.sess
ion.BackupManager
?? ?? ???
Tomcat Connnection Pool
? Tomcat? DataBase Connection Pool ? Commons DBCP? Tomcat JDBC Pool? 2?
? Pool? ??
The Tomcat JDBC Connection Pool
(https://tomcat.apache.org/tomcat-8.0-doc/jdbc-
pool.html)
Commons DBCP
(http://commons.apache.org/proper/commons
-dbcp/)
 Tomcat 7.0.18 C extra package? ??
Tomcat 7.0.19 C ?? Release
Tomcat JDBC Connnection Pool
? Tomcat? DataBase Connection Pool ? Commons DBCP? Tomcat JDBC Pool? 2?? Pool?
??
? Commons DBCP : org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory (default)
- org.apache.commons -> org.apache.tomcat. ??? ??
? Tomcat JDBC : org.apache.tomcat.jdbc.pool.DataSourceFactory
? DBCP ? Apache Commons ????? ????, DataBase Connection Pool? ?? ??
DataBase Connection Pool ? ?? ?? ??? ??, ?? ???? ??.
? Tomcat JDBC? Apache Tomcat ????? ????? ??? DataBase Connection Pool ??.
<Resource type="javax.sql.DataSource"
name="jdbc/TestDB"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/mysql"
username="mysql_user"
password="mypassword123" />
Tomcat JDBC Connnection Pool ????
? ?? DB ?? ??
?? ?? ??
username DB ??? ?? JDBC ????? ???? ??? ??
password DB ??? ?? JDBC ????? ???? ??? ????
url DB ??? ?? JDBC ????? ???? ?? URL
driverClassName JDBC ????? FQCN Fully Qualified Class Name)
connectionProperties DB ??? ?? JDBC ????? ???? ?? Properties
?? ?? ???
defaultAutoCommit ??? Connection? ?? Commit Mode
JDBC Dirver ???
- Oracle : true
- MySQL/MariaDB : true
defaultReadOnly ??? Connection? ReadOnly JDBC Dirver ???
defaultTransactionIsolation ??? Connection? TransactionIsolation JDBC Dirver ???
defaultCatalog ??? Connection? defaultCatalog JDBC Dirver ???
 Commons DBCP : defaultAutoCommit ? ???? true
? ?? DB ?? ??
?? ?? ???
initialSize Pool ?? ? ???? Connection? ?? ??? 10
maxActive Pool?? ??? ???? ?? ?? ?? ? 100
maxIdle Pool?? ???? ?? Connection ? 100
minIdle Pool?? ???? ?? Connection ? initialSize
maxWait ?? ??? Connection? ???? ?? ?? ???? ???? 30,000 (30?)
maxAge
Connection? ???? ??.
Connection ?? ?? maxAge ?? ?????, ?? Connection?
Close ??
0 (msc)
fairQueue
getConnection ??? Connection? FIFO???? ???? ????
? true? ??. org.apache.tomcat.jdbc.pool.FairBlockingQueue ? ??
?? ???, ???? ??? ???? Connection? ???? ?? ?
??
true
Tomcat JDBC Connnection Pool ????
? Connection Validation ?? ??
?? ?? ???
validationQuery Connection ??? ??? ?? SQL Query
MySQL/MariaDB : SELECT 1
Oracle : SELECT 1 FROM DUAL
testOnBorrow
Pool?? ?? Connection? ???? ?? ???? ??
??? ???? ??, ?? ??? ????, ??? Pool??
Connection? ???? ??
False, true ??? validationQuery ??
testOnReturn Pool? Connection? ???? ?? Connection? ???? ?? false, true ??? validationQuery ??
testWileIdle
Idle ??? Connection ? ?? ???? ??
??? ??? ?? ?? Connection? ???
???? Evictor ? ???? ??? Evictor? ??? ???
(timeBetweenEvictionRunsMillis ?? ??)
false, true ??? validationQuery ??
initSQL Connection? ??? ???? SQL Query
validationClassName
Validation Class?? ??.
? ??? ?? ? validationQuery? ?? ?? ??, Validator
Class? ?? ??? ??? ????
(org.apache.tomcat.jdbc.pool.Validator ????? ?? ??)
validationInterval
Validation? ?? ?? ??.
??? ?????? ? ? ?? ???? ?? ?? ?? ??? ?
?? ??
30000 (30?)
logValidationErrors Validation? ?? ???, ?? ????? ?? ?? false
? PoolCleaner ?? ?? (Evictor)
?? ?? ???
timeBetweenEvictionRunsMilles Idle ??? Connection ? check ?? ??, 5,000 (5?)
minEvictableIdleTimeMillis Idle Connection? ?? ?? 60,000(60?)
* Commons DBCP? ?? ? numTestsPerEvictionRun ?? ??
? Connection Leak ?? ?? (removeAbandoned)
? PoolCleaner ?? ?? (removeAbandoned)
?? ?? ???
removeAbandoned Connection ?? ?? ?? ?? ?? false
removeAbandonedTimeout Connection ??? ??????? ?? 60 ?
logAbandoned
Connection ??? ???? ?, Connection? Close?? ?? ??
????? Stuck Thread? ??? ?? ??? ??
false
suspectTimeout
Connection ??? ??? ?? ?? ????? ??
suspectTimeout ??? ??? Connection? ?? ?? ?? ? JMX
? ??? ??
0
abandonWhenPercentageFull
??? Connection ? ??? ??? ??
0~100 ??? ????, ? ??? ??? ?? Connection? ??,
removeAbandonedTimeout? ??? Connection? ?? ??.
0
? DataSouce Resource ??
<Resource
name="${jdbc.resource.name}"
factory=org.apache.tomcat.jdbc.pool.DataSourceFactory"
auth="Container"
type="javax.sql.DataSource"
username="${jdbc.username}"
password="${jdbc.password}"
driverClassName="${jdbc.driverClassName}"
url="${jdbc.url}"
testWhileIdle="true"
testOnBorrow="true"
testOnReturn="false"
validationQuery="SELECT 1"
validationInterval="30000"
timeBetweenEvictionRunsMillis="5000"
maxActive="100"
minIdle="10"
maxWait="10000"
initialSize="10"
removeAbandonedTimeout="60"
removeAbandoned="true"
logAbandoned="true"
minEvictableIdleTimeMillis="30000"
jmxEnabled="true"
jdbcInterceptors="ConnectionState;StatementFinalizer;SlowQueryReportJmx(threshold=10000)"/>
? Global Resource Level
 DataSource Pool Global level ??
? Global Resource(server.xml) + Resouce Link(application-context.xml)
 ?? Application ??? ?? ??
? Global Resource(server.xml) + Resouce Link(Global context.xml)
 ?? Application?? ?? ??
? Context Level
 DataSource Pool ?? Context ? ???
? Global Context (context.xml)
 ?? Application?? ?? ??
? Application Context (application-context.xml)
 ?? Application??? ?? ??
? Global Resource Level (+ Resouce Link)
? Server : ${CATALINA_HOME}/conf/server.xml
? Context(1) : ${CATALINA_HOME}/conf/context.xml
? Context(2) : ${CATALINA_HOME}/conf/Catalina/localhost/${CONTEXT_NAME}.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>
<?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"/>
</Context>
<?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>
? Context Level
? Context(1) : ${CATALINA_HOME}/conf/context.xml
? Context(2) : ${CATALINA_HOME}/conf/Catalina/localhost/${CONTEXT_NAME}.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Context>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<Resource name="jdbc/argo"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://10.0.1.88:3306/oom"
username="root
password="uCO5FkZ3NfgDo/LWB0l+0A=="

/>
</Context>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Resource name="jdbc/argo"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://10.0.1.88:3306/oom"
username="root
password="uCO5FkZ3NfgDo/LWB0l+0A=="

/>
</Context>
? Commons DBCP ? Single Thread? ????. ??? Thread? ??? ? ??? ?? ?
(pool) ? ??? lock? ??. ?? ??/CPU ???? ??? ????. (???)  (not
DBCP 2.x)
? Commons DBCP ? ????. Commons DBCP ? ???? ? ???? 60??, Tomcat ? 8
?? ?????? ????.
? Tomcat JDBC? Common DBCP ?? ?? ?? ?? ??? ????, ????? JMX ??
?? ??? ???? Connection Validation, JdbcInterceptor? ?? DB??? ???? ??
?? ?? ? ??? ??? ???? ??
? ?? ??? Common DBCP? ??, ??? ????, ???? Tomcat ? ??? ?? ???,
?? ?? ? ?? ??? ?? ???/???? ???.
 Commons DBCP vs Tomcat JDBC :
http://vigilbose.blogspot.kr/2009/03/apache-commons-dbcp-and-tomcat-jdbc.html
http://people.apache.org/~fhanik/tomcat/jdbc-pool.html
?? ?? ???
Jasper
? Jasper? Tomcat? JSP????, JSP? ????? ?? ????
? JSPC(JSP to Servlet), JavaC(Servlet to Class) ??
Jasper
? ?? JSP ??? org.apache.jasper.servlet.JspServlet ? Servlet ???? ??.
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
<init-param>
<param-name>fork</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>xpoweredBy</param-name>
<param-value>false</param-value>
</init-param>
<!--
<init-param>
<param-name>checkInterval</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>development</param-name>
<param-value>true</param-value>
</init-param>
-->
<load-on-startup>3</load-on-startup>
</servlet>
<!-- The mappings for the JSP servlet -->
<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*.jsp</url-pattern>
<url-pattern>*.jspx</url-pattern>
</servlet-mapping>
?? ?? ???
? ?? ??? ??
? Static Contents? ?? ??
? Apache HTTP Server? ??? ?? ? ?? ??
(Access Control, Contents Caching, Filter ?)
? ?? ??
? ??? ??? ?? ?? ??
? WEB + WAS? ?? ?? ??
? ?? ??
? Fail Over
? Fail Back
? ??
? ?? (Security)
? ??? ?? ??
? mod_proxy - http://httpd.apache.org/docs/2.4/mod/mod_proxy.html
? mod_jk - http://tomcat.apache.org/connectors-doc/
? mod_cluster - http://mod-cluster.jboss.org/
? ???? ??
?? ?? ??
mod_proxy
? Protocal(http, https, ajp)? ???? ?? ??
? Apache HTTP Server ? ??? ???? ??, ?? ?? ? ??? ??
??
? ???? Load Balancer ?? ??
? Apache HTTP Server ?????? ??
mod_jk
? ??? Load Balancer ?? ??
? ??? ?? ?? ?? ??
? Apache Tomcat ?????? ??
? ?? ?? ??
mod_cluster
? ???? worker(Tomcat) ??? ??
? worker ??? ?? Load Balancing ??
? JBOSS ??? ?? ?? (Tomcat? ?? ??)
? ?? ??? ?? ??
? Tomcat ?????? ???? ??? ?? ??
? Document : http://tomcat.apache.org/connectors-doc/
? Download : http://tomcat.apache.org/download-connectors.cgi
? mod_jk ??
? worker ?? ?? (CPing/CPong)
? Connection Pooling
? Sticky Session
? Retry (Recovery)
? Load banance
? worker Status ??
? ?? ????
? mod_jk ?? ??
? mod_jk ?? ? ?? (httpd.conf)
? worker ?? (worker.properties)
? WEB-WAS ?? ?? ?? (uriworkermap.properties)
? mod_jk ??
LoadModule jk_module modules/mod_jk.so
<IfModule mod_jk.c>
JkWorkersFile ${INSTALL_PATH}/conf/extra/workers.properties
JkLogFile "|${ENGN_HOME}/bin/rotatelogs ${INSTALL_PATH}/logs/jk.log_%Y%m%d 86400 +540"
JkLogLevel error
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
JkShmFile ${INSTALL_PATH}/logs/jk.shm
JkMountFile ${INSTALL_PATH}/conf/extra/uriworkermap.properties
</IfModule>
<Location /jk-status/>
JkMount jkstatus
Order deny,allow
Deny from all
</Location>
? worker ??
worker.list=${SERVER_LB_ID},jkstatus
worker.template.type=ajp13
worker.template.lbfactor=1
worker.template.socket_timeout=300
worker.template.socket_keepalive=True
worker.template.connect_timeout=30000
worker.template.connection_pool_size=128
worker.template.connection_pool_minsize=32
worker.template.connection_pool_timeout=20
#########################################
## Worker for Tomcat
#########################################
worker.argow_8180_hostname.reference=worker.template
worker.argow_8180_hostname.host=127.0.0.1
worker.argow_8180_hostname.port=8009
#########################################
## Load Balancer
#########################################
worker.${SERVER_LB_ID}.type=lb
worker.${SERVER_LB_ID}.balance_workers=argow_8180_hostname
worker.${SERVER_LB_ID}.sticky_session=1
worker.jkstatus.type=status
? ?? ?? ??
/*.jsp|/=${SERVER_LB_ID}
/*.do|/=${SERVER_LB_ID}
? status type? Worker ??? Status Worker? ???
? Status Worker? worker? ?? ???? ? mod_jk? ?? ??? ???? ?? ??
?? ?? ???
? Clustering
? ??? ??? ????, ??? ??? ??? ?? ??
? Clustering ?? : ?? ??, ?? ??, ??? ??, Fail-over
? Tomcat Clustering
? Cluster Load Balance (with Apache HTTP Server)
? Cluster Membership
? Session Replication
? Clustering Arcihitecture
? Cluster Architecture
Cluster
Channel - cluster group? communication ??? ??.
Manager - Cluster ????? Session Manager? ??.
Membership - Multicast(default) ???? cluster group? ?? ??/??? ?? ??? ???.
Receiver - Member? ???? Message receive?.
Sender- ??? ??? Message? ??.
Valve - Request? Servlet Container ???? ??? Track.(Tomcat Valve? ??)
ClusterListener - Cluster Group? Message send/receive ?? Track.
Interceptor - Message send? ? interceptor stack? ??.
(Send ? Message? ?? ? ? ??)
Deployer - Application Deploy? cluster ??? ???? ??.
? Cluster Session Manager ??
?? ?? ???
DeltaManager
? All-to-All session replication
? Default Session Manager in Cluster environment
? For small cluster
org.apache.catalina.sessi
on.DeltaManager
BackupManager
? Primary-Secondary session replication
? For large cluster
org.apache.catalina.sessi
on.BackupManager
? Session Replication
? Failover
Load
Balancer
Load
Balancer
Session
(Primary)
? Node Recovery
? Session Replication (create)
? Session Replication (destroy)
Entry
? Primary: Tomcat #1
? Backup: Tomcat #2
? Key: JsessionId
? Value: Session
(Value? Primary/Backup Node? ??? ?
?? ??? ??. Proxy? null)
? Failover
Node Failure
 Tomcat1
? Access to Primary node
Entry
? Primary: Tomcat #2
? Backup: Server #3
? Key: JsessionId
? Value: Session
(Value? Primary/Backup
Node? ??? ? ?? ??
? ??. Proxy? null)
? Access to Backup node
? Accessto Proxy node
? Configuration
Tomcat Clustering? ???? conf/server.xml ? <Engine> ?? <Host> ? ????.
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
? ??? ??? ????.
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
channelSendOptions="8">
<Manager className="org.apache.catalina.ha.session.DeltaManager expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"/>
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
<Membership className="org.apache.catalina.tribes.membership.McastService address="228.0.0.4 port="45564 frequency="500
dropTime="3000"/>
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver address="auto port="4000 autoBind="100 selectorTimeout="5000"
maxThreads="6"/>
<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
</Sender>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
</Channel>
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve filter=""/>
<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer tempDir="/tmp/war-temp/ deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/ watchEnabled="false"/>
<ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener">
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener">
</Cluster>
Session Manager ??
?DeltaManager
?BackupManager
?? Cluster Group?? ???
? ???? address? port
(Multicase ??) ? ???? ?.
Cluster Message? ?? Receiver ??
Port? ????? ?? ?? bind.
port <= ?????port < port + autoBind
Http Request ? data ?? ??? ??. txt, html ? ? ? session? ?
??? ???? filter? ???? ?.
mod_jk Failover? ?? ??, sessionId ?? jvmRoute ?? ???.
???, Application/WEB-INF/web.xml ? <distributable/> ? ?????.
?? ?? ???
? JVM ??? ?? ????? ???? ?
? JVM? ??($JAVA_HOME/bin/jvisualvm )?? ???, ?? ??????? ???? ??
(http://visualvm.java.net/)
? ?? ??
? 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
https://github.com/scouter-project/scouter
? 2015.7.1 initial commit
? Apache 2 License
? Java/Scala/Eclipse-RCP
MYSQL(DB)
Tomcat(App.)
Browser(User)
agent.java
agent.host
Collector
agent.host
CPU, MEM, DISK
Heap, TPS
ResTime
Service Profile
Client
Active Service
& Control Indivisual Request Service Perf.
& Profile
Top-Stack Frequecy
Resource Usage
& Service Perf.
Recent User
TPS
Avg Res. Time
CPU Usage
Active Service
Heap Usage
XLog
Monitoring
Objects
?? ?? ???
? L?? ??? ???? ?? ??? ??? ?? ??? ????, ?? Unix ? ?
? WEB/WAS?? ?? ???? ???? ??, OSS? ??
? ?????? ? ? 22? ??? CentOS/Apache/Tomcat?? ???
? Tomcat ?? ?? & ??
? HTTPS ?? ??? ??? HTTP ? ?? ? ???? ??? ??
(??? ??, ? HTTP ?? ??? ??? HTTPS ??? ????? ?? ??)
 Tomcat Valve ?? ?? (HTTPS ?? ?? ?, HTTP ?? ?? ??)
? JSP ?? ??
 web.xml ? jsp-property-group? page-encoding ??
? DB Password ??
 Tomcat ????? DataSource ?? ? DB Password ? Plain Text ? ???? ?? ??
????? ???? ?? ??? ??? ??
? Apache ?? ?? & ??
? Tomcat Connector ? Tomcat VM ?? ?? ??
 OS (VM) ? ???? ?? ?? Tomcat Connector ? ?? ?? ???? ?? ?? ??
 ICA (IP Table Control for Apache) ???? ???
? ??? ??? ?? ?? ??
 ??? ??? mod_expires ? ?? ??? ???? ?? ?? ??
 js, css ?? ???? mod_deflate ??? ?? ?? ?? ??
? ?? ?? ?? & ??
? <url-pattern> ?? ??
? ?? ????? ?? ?? ??
? JSP include tag ?? ??
? ??? contentType ? ?? ??
? JSP ? ??? ?? ??? ??
? L? ??? ?? ?? C ?? ??
? ??? ??? ?? ?? ?? Jeus? Tomcat? ??? ????? Scouter APM?? ????
?? ? ??? ??
? U2L ?? ??
? ??? ???? ??? ???? ???? OSS? ??/?? ???? ?????? ???
Enterprise???? ???? ??? ????? ??? ?? ?
? ?? ??????? ??? ??? ??? ? ?? ???? ???? ???? ??????
???? ?? value? ?? ?????
? Scale-out? ??? WEB/WAS ???? ?? ??? ???? ?? ??? ??? ?? ?? ?
?? ???? OSS?? ?? ??? ??? ??
? ??? ?? ?? (mod_jk Fail-over ????)
? WEB??? sticky? ??? WAS? ?????? ??? ???? ?? ??? ??? WAS? Round Robin??
?? ???? ????? ??? ???? ??? ??
Internet
WAS
WEB
L4
WEB
WAS
WAS
WAS
Internet
WAS
WEB
L4
WEB
WAS
WAS
WAS
???? ?? ??? ?? WAS?? Request? ???
???? ??? ??, ??? WAS? Request? Round Robin?? ??
? mod_jk worker lb(Load Banancer) : was? ????? ????? ??, ??? ?? ?? worker? ?? ???
??
? lb(Load Banancer)
- worker? ???
- load-balancing factor? ???? ????
- sticky?? ??
- ?? worker? ???? ? ?? worker? failover
- load balancer? ??? ????? ??
.
? Tomcat ???(??) ?? ??, ${CATALINA_BASE} ? ??
? CATALINA_HOME ??, CATALINA_BASE ??
? ?? library ??, shell ??? ??, ?? ??
? ?? : ?? ????? ? ?? ?? ???, ?? ???? ???
? ?? : ?? ????? ??? ?? ? ?? ?????? ?? ??? ??? ??
Tomcat (CATALINA_HOME)
bin conf lib logs temp webapps work
Server1(CATALINA_BASE)) Server2(CATALINA_BASE)
bin conf lib logs
temp webapps work
bin conf lib logs
temp webapps work
Tomcat
bin conf lib logs temp webapps work
Tomcat(CATALINA_HOME=CATALINA_BASE)
bin conf lib logs temp webapps work
[ CATALINA_HOME ??, CATALINA_BASE ?? ?? ][ ?? N? ?? ?? ]
? Tomcat? ?? JAVA ?? ?? ? JAVA_OPTS, CATALINA_OPTS ?? ??? ?
???, ??? ??? ??
? JAVA_OPTS  ??/?? ? ?? ??
 Catalina Java Options ?
ex)
? CATALINA_OPTS  ?? ??? ???
 JVM Memory Options, Business System Java Options
ex) ## JVM Memory Options (tune them)
CATALINA_OPTS=" ${CATALINA_OPTS} -Xms2048m -Xmx2048m -XX:MaxPermSize=256m"
CATALINA_OPTS=" ${CATALINA_OPTS} -verbose:gc"
CATALINA_OPTS=" ${CATALINA_OPTS} -Xloggc:${LOG_HOME}/gc_${INST_NAME}.${DATE}.log"
CATALINA_OPTS=" ${CATALINA_OPTS} -XX:+UseParallelGC"
CATALINA_OPTS=" ${CATALINA_OPTS} -XX:+UseParallelOldGC"
CATALINA_OPTS=" ${CATALINA_OPTS} -XX:-UseAdaptiveSizePolicy"
CATALINA_OPTS=" ${CATALINA_OPTS} -XX:+PrintGCDetails"
CATALINA_OPTS=" ${CATALINA_OPTS} -XX:+PrintGCDateStamps
CATALINA_OPTS=" ${CATALINA_OPTS} -XX:+ExplicitGCInvokesConcurrent"
CATALINA_OPTS=" ${CATALINA_OPTS} -XX:+HeapDumpOnOutOfMemoryError"
CATALINA_OPTS=" ${CATALINA_OPTS} -XX:HeapDumpPath=${LOG_HOME}/hdump
## Business System Java Options (for your application)
## Catalina Java Options (don't modify them)
JAVA_OPTS=" ${JAVA_OPTS} -server"
JAVA_OPTS=" ${JAVA_OPTS} -DjvmRoute=${JVM_ROUTE}"
JAVA_OPTS=" ${JAVA_OPTS} -Dwas_name=${INST_NAME}"
JAVA_OPTS=" ${JAVA_OPTS} -Dport.http=${SERVICE_PORT}"
JAVA_OPTS=" ${JAVA_OPTS} -Dport.https=`expr ${SERVICE_PORT} + 363`"
JAVA_OPTS=" ${JAVA_OPTS} -Dport.ajp=`expr ${SERVICE_PORT} - 71`"
JAVA_OPTS=" ${JAVA_OPTS} -Dport.shutdown=`expr ${SERVICE_PORT} - 75`"
? setenv ???? ??
? Catalina ???? ??? setenv ???? ???
? Tomcat ?? ???? ??
? Catalina ????
setenv.sh
shutdown.sh
catalina.shstartup.sh
daemon.sh
setclasspath.sh
# -----------------------------------------------------------------------------
# Control Script for the CATALINA Server
#
# Environment Variable Prerequisites
#
# Do not set the variables in this script. Instead put them into a script
# setenv.sh in CATALINA_BASE/bin to keep your customizations separate.
#
# -----------------------------------------------------------------------------
if [ -r "$CATALINA_BASE/bin/setenv.sh" ]; then
. "$CATALINA_BASE/bin/setenv.sh"
elif [ -r "$CATALINA_HOME/bin/setenv.sh" ]; then
. "$CATALINA_HOME/bin/setenv.sh"
fi
? Tomcat ?? ??? Template ???? ??
? ?? include shell ??
ex)
? Tomcat ?? ?? (Server.xml)
ex)
## Catalina Java Options (don't modify them)
JAVA_OPTS=" ${JAVA_OPTS} -server"
JAVA_OPTS=" ${JAVA_OPTS} -DjvmRoute=${JVM_ROUTE}"
JAVA_OPTS=" ${JAVA_OPTS} -Dwas_name=${INST_NAME}"
JAVA_OPTS=" ${JAVA_OPTS} -Dport.http=${SERVICE_PORT}"
JAVA_OPTS=" ${JAVA_OPTS} -Dport.https=`expr ${SERVICE_PORT} + 363`"
JAVA_OPTS=" ${JAVA_OPTS} -Dport.ajp=`expr ${SERVICE_PORT} - 71`"
JAVA_OPTS=" ${JAVA_OPTS} -Dport.shutdown=`expr ${SERVICE_PORT} - 75`"
<?xml version='1.0' encoding='utf-8'?>
<Server port="${port.shutdown}" shutdown="ARGO_INSTANCE_SHUTDOWN">
......
<Service name="Catalina">
<Connector port="${port.http}" protocol="HTTP/1.1" server="Server"
connectionTimeout="20000" URIEncoding="UTF-8"
redirectPort="${port.https}" />
<Connector port="${port.ajp}" protocol="AJP/1.3" server="Server"
redirectPort="${port.https}" maxPostSize="-1"
maxThreads="256" connectionTimeout="60000" URIEncoding="UTF-8"
acceptCount="10" enableLookups="false" tcpNoDelay="true" />
<Engine name="Catalina" defaultHost="localhost">
......
<Host name="localhost" unpackWARs="true" autoDeploy="false">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="${log.home}"
prefix="access_${was_cname}." suffix=".log"
pattern="%h %l %u %t &quot;%r&quot; %s %b %D" />
</Host>
</Engine>
</Service>
</Server>
- Tomcat Build
- Tomcat ????
? Tomcat Major Version ? Documentation ??
? Tomcat8 : http://tomcat.apache.org/tomcat-8.0-doc/
? Tomcat Connectors : mod_jk Documentation C http://tomcat.apache.org/connectors-doc/
? Tomcat Native - http://tomcat.apache.org/native-doc/
? Tomcat Wiki C http://wiki.apache.org/tomcat/FrontPage
? Migration Guide C http://tomcat.apache.org/migration.html
? Security Report C http://tomcat.apache.org.security.html
? Mailing List Guide : http://tomcat.apache.org/lists.html
? Tomcat? ?? ?? Mailing List ?? ??
? Mailing List
? tomcat-users (users@tomcat.apache.org)
C subscribe: users-subscribe@tomcat.apache.org
C Tomcat ???? ?? Mailing List
? tomcat-dev (dev@tomcat.apache.org)
C subscribe: dev-subscribe@tomcat.apache.org
C Tomcat? ??,?? ? ????? ?? ???? ?? Mailing List
? tomcat-announce (announce@tomcat.apache.org)
C subscribe: announce-subscribe@tomcat.apache.org
C Tomcat ??? ?? ? ??? ??? Announce ?? ?? Mailing List
? taglibs-user (taglibs-user@tomcat.apache.org)
C subscribe: taglibs-user-subscribe@tomcat.apache.org
C Apache Taglibs(http://tomcat.apache.org/taglibs/) ???? ?? Mailing List
? Bug Report Guide - http://tomcat.apache.org/bugreport.html
? Tomcat Community ? ?? ??????? Bugzilla? ??
? Bugzilla? ???, ?? ?? ? ?? ??? ?? ?? ??? ? ? ??
?? ?? ???

More Related Content

What's hot (20)

[???????] ???? ??? ??? 2020
[???????] ???? ??? ??? 2020[???????] ???? ??? ??? 2020
[???????] ???? ??? ??? 2020
Ji-Woong Choi
?
Kafkaʹä ޥ`ӥP part2 \ä𤭤ȥ֥뼯
Kafkaʹä ޥ`ӥP part2 \ä𤭤ȥ֥뼯Kafkaʹä ޥ`ӥP part2 \ä𤭤ȥ֥뼯
Kafkaʹä ޥ`ӥP part2 \ä𤭤ȥ֥뼯
matsu_chara
?
ʴΥ`ƥ󥰤λ
ʴΥ`ƥ󥰤λʴΥ`ƥ󥰤λ
ʴΥ`ƥ󥰤λ
ushiboy
?
OpenAPI 3.0microserviceAPIxԇߤƥϥޤäԒ
OpenAPI 3.0microserviceAPIxԇߤƥϥޤäԒOpenAPI 3.0microserviceAPIxԇߤƥϥޤäԒ
OpenAPI 3.0microserviceAPIxԇߤƥϥޤäԒ
Daichi Koike
?
??????? ?? ???? ???? ?? ?? ?? - ??? (AWS ????????)
??????? ?? ???? ???? ?? ?? ?? - ??? (AWS ????????) ??????? ?? ???? ???? ?? ?? ?? - ??? (AWS ????????)
??????? ?? ???? ???? ?? ?? ?? - ??? (AWS ????????)
Amazon Web Services Korea
?
Introduction to Spring Boot!
Introduction to Spring Boot!Introduction to Spring Boot!
Introduction to Spring Boot!
Jakub Kubrynski
?
Apache kafka ????? ?? Metrics ?? ? ??? ??
Apache kafka ????? ?? Metrics ?? ? ??? ??Apache kafka ????? ?? Metrics ?? ? ??? ??
Apache kafka ????? ?? Metrics ?? ? ??? ??
SANG WON PARK
?
???? ?? ???? Elasticsearch? Node.js
???? ?? ???? Elasticsearch? Node.js???? ?? ???? Elasticsearch? Node.js
???? ?? ???? Elasticsearch? Node.js
HeeJung Hwang
?
?? ???? ? ????? ?
?? ???? ? ????? ??? ???? ? ????? ?
?? ???? ? ????? ?
Jeongsang Baek
?
??????? ?????? ?????
??????? ?????? ???????????? ?????? ?????
??????? ?????? ?????
Keesun Baik
?
[WhaTap DevOps Day] ?? 1 : Observability Practice on AWS
[WhaTap DevOps Day] ?? 1 : Observability Practice on AWS[WhaTap DevOps Day] ?? 1 : Observability Practice on AWS
[WhaTap DevOps Day] ?? 1 : Observability Practice on AWS
WhaTap Labs
?
Spring Boot Tutorial
Spring Boot TutorialSpring Boot Tutorial
Spring Boot Tutorial
Naphachara Rattanawilai
?
Elk stack
Elk stackElk stack
Elk stack
Jilles van Gurp
?
??? ????? ?? ???
??? ????? ?? ?????? ????? ?? ???
??? ????? ?? ???
IMQA
?
Spring Batch 2.0
Spring Batch 2.0Spring Batch 2.0
Spring Batch 2.0
Guido Schmutz
?
ѲԻ
ѲԻѲԻ
ѲԻ
Toshio Takiguchi
?
[???????]Java Performance Tuning
[???????]Java Performance Tuning[???????]Java Performance Tuning
[???????]Java Performance Tuning
Ji-Woong Choi
?
Model Your Application Domain, Not Your JSON Structures
Model Your Application Domain, Not Your JSON StructuresModel Your Application Domain, Not Your JSON Structures
Model Your Application Domain, Not Your JSON Structures
Markus Lanthaler
?
[D2] java ?????????????? ??????? ????? ???? & pinpoint
[D2] java ?????????????? ??????? ????? ???? & pinpoint [D2] java ?????????????? ??????? ????? ???? & pinpoint
[D2] java ?????????????? ??????? ????? ???? & pinpoint
NAVER D2
?
Metaspace
MetaspaceMetaspace
Metaspace
Yasumasa Suenaga
?
[???????] ???? ??? ??? 2020
[???????] ???? ??? ??? 2020[???????] ???? ??? ??? 2020
[???????] ???? ??? ??? 2020
Ji-Woong Choi
?
Kafkaʹä ޥ`ӥP part2 \ä𤭤ȥ֥뼯
Kafkaʹä ޥ`ӥP part2 \ä𤭤ȥ֥뼯Kafkaʹä ޥ`ӥP part2 \ä𤭤ȥ֥뼯
Kafkaʹä ޥ`ӥP part2 \ä𤭤ȥ֥뼯
matsu_chara
?
ʴΥ`ƥ󥰤λ
ʴΥ`ƥ󥰤λʴΥ`ƥ󥰤λ
ʴΥ`ƥ󥰤λ
ushiboy
?
OpenAPI 3.0microserviceAPIxԇߤƥϥޤäԒ
OpenAPI 3.0microserviceAPIxԇߤƥϥޤäԒOpenAPI 3.0microserviceAPIxԇߤƥϥޤäԒ
OpenAPI 3.0microserviceAPIxԇߤƥϥޤäԒ
Daichi Koike
?
??????? ?? ???? ???? ?? ?? ?? - ??? (AWS ????????)
??????? ?? ???? ???? ?? ?? ?? - ??? (AWS ????????) ??????? ?? ???? ???? ?? ?? ?? - ??? (AWS ????????)
??????? ?? ???? ???? ?? ?? ?? - ??? (AWS ????????)
Amazon Web Services Korea
?
Introduction to Spring Boot!
Introduction to Spring Boot!Introduction to Spring Boot!
Introduction to Spring Boot!
Jakub Kubrynski
?
Apache kafka ????? ?? Metrics ?? ? ??? ??
Apache kafka ????? ?? Metrics ?? ? ??? ??Apache kafka ????? ?? Metrics ?? ? ??? ??
Apache kafka ????? ?? Metrics ?? ? ??? ??
SANG WON PARK
?
???? ?? ???? Elasticsearch? Node.js
???? ?? ???? Elasticsearch? Node.js???? ?? ???? Elasticsearch? Node.js
???? ?? ???? Elasticsearch? Node.js
HeeJung Hwang
?
??????? ?????? ?????
??????? ?????? ???????????? ?????? ?????
??????? ?????? ?????
Keesun Baik
?
[WhaTap DevOps Day] ?? 1 : Observability Practice on AWS
[WhaTap DevOps Day] ?? 1 : Observability Practice on AWS[WhaTap DevOps Day] ?? 1 : Observability Practice on AWS
[WhaTap DevOps Day] ?? 1 : Observability Practice on AWS
WhaTap Labs
?
??? ????? ?? ???
??? ????? ?? ?????? ????? ?? ???
??? ????? ?? ???
IMQA
?
[???????]Java Performance Tuning
[???????]Java Performance Tuning[???????]Java Performance Tuning
[???????]Java Performance Tuning
Ji-Woong Choi
?
Model Your Application Domain, Not Your JSON Structures
Model Your Application Domain, Not Your JSON StructuresModel Your Application Domain, Not Your JSON Structures
Model Your Application Domain, Not Your JSON Structures
Markus Lanthaler
?
[D2] java ?????????????? ??????? ????? ???? & pinpoint
[D2] java ?????????????? ??????? ????? ???? & pinpoint [D2] java ?????????????? ??????? ????? ???? & pinpoint
[D2] java ?????????????? ??????? ????? ???? & pinpoint
NAVER D2
?

Similar to ?? ?? ??? (20)

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.
?? ???
?
?????? #01-????
?????? #01-?????????? #01-????
?????? #01-????
GyuSeok Lee
?
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
?
Spring ? ???? ????
Spring ? ???? ????Spring ? ???? ????
Spring ? ???? ????
jiseob kim
?
WebSocket ?? ??? ???
WebSocket ?? ??? ???WebSocket ?? ??? ???
WebSocket ?? ??? ???
trustinlee
?
RHAMT ??
RHAMT ??RHAMT ??
RHAMT ??
Opennaru, inc.
?
KAFKA 3.1.0.pdf
KAFKA 3.1.0.pdfKAFKA 3.1.0.pdf
KAFKA 3.1.0.pdf
wonyong hwang
?
??? (WebSocket)
??? (WebSocket)??? (WebSocket)
??? (WebSocket)
jeongseokoh
?
Open source apm scouter? ?? ?? ?? jadecross ??? ??
Open source apm scouter? ?? ??  ?? jadecross ??? ??Open source apm scouter? ?? ??  ?? jadecross ??? ??
Open source apm scouter? ?? ?? ?? jadecross ??? ??
uEngine Solutions
?
?????? #08-??????? ??????
?????? #08-??????? ???????????? #08-??????? ??????
?????? #08-??????? ??????
GyuSeok Lee
?
Servlet3
Servlet3Servlet3
Servlet3
Sukjin Yun
?
JSP ????? #01 ? ?????
JSP ????? #01 ? ?????JSP ????? #01 ? ?????
JSP ????? #01 ? ?????
Myungjin Lee
?
Akka.NET ?? ??? ??? ?? ?? (NDC2016)
Akka.NET ?? ??? ??? ?? ?? (NDC2016)Akka.NET ?? ??? ??? ?? ?? (NDC2016)
Akka.NET ?? ??? ??? ?? ?? (NDC2016)
Esun Kim
?
200.???????? ??? ???? WAS? ???
200.???????? ??? ???? WAS? ???200.???????? ??? ???? WAS? ???
200.???????? ??? ???? WAS? ???
Opennaru, inc.
?
[???????] ARM & OpenStack Community
[???????] ARM & OpenStack Community[???????] ARM & OpenStack Community
[???????] ARM & OpenStack Community
Open Source Consulting
?
2020? 10? 24? ??? ???
2020? 10? 24? ??? ???2020? 10? 24? ??? ???
2020? 10? 24? ??? ???
Jay Park
?
[?14? JCO ????] ???? ?? ????? by JAVACAFE
[?14? JCO ????] ???? ?? ????? by JAVACAFE  [?14? JCO ????] ???? ?? ????? by JAVACAFE
[?14? JCO ????] ???? ?? ????? by JAVACAFE
?? ?
?
Apache kafka performance(latency)_benchmark_v0.3
Apache kafka performance(latency)_benchmark_v0.3Apache kafka performance(latency)_benchmark_v0.3
Apache kafka performance(latency)_benchmark_v0.3
SANG WON PARK
?
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.
?? ???
?
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
?
Spring ? ???? ????
Spring ? ???? ????Spring ? ???? ????
Spring ? ???? ????
jiseob kim
?
WebSocket ?? ??? ???
WebSocket ?? ??? ???WebSocket ?? ??? ???
WebSocket ?? ??? ???
trustinlee
?
Open source apm scouter? ?? ?? ?? jadecross ??? ??
Open source apm scouter? ?? ??  ?? jadecross ??? ??Open source apm scouter? ?? ??  ?? jadecross ??? ??
Open source apm scouter? ?? ?? ?? jadecross ??? ??
uEngine Solutions
?
?????? #08-??????? ??????
?????? #08-??????? ???????????? #08-??????? ??????
?????? #08-??????? ??????
GyuSeok Lee
?
JSP ????? #01 ? ?????
JSP ????? #01 ? ?????JSP ????? #01 ? ?????
JSP ????? #01 ? ?????
Myungjin Lee
?
Akka.NET ?? ??? ??? ?? ?? (NDC2016)
Akka.NET ?? ??? ??? ?? ?? (NDC2016)Akka.NET ?? ??? ??? ?? ?? (NDC2016)
Akka.NET ?? ??? ??? ?? ?? (NDC2016)
Esun Kim
?
200.???????? ??? ???? WAS? ???
200.???????? ??? ???? WAS? ???200.???????? ??? ???? WAS? ???
200.???????? ??? ???? WAS? ???
Opennaru, inc.
?
2020? 10? 24? ??? ???
2020? 10? 24? ??? ???2020? 10? 24? ??? ???
2020? 10? 24? ??? ???
Jay Park
?
[?14? JCO ????] ???? ?? ????? by JAVACAFE
[?14? JCO ????] ???? ?? ????? by JAVACAFE  [?14? JCO ????] ???? ?? ????? by JAVACAFE
[?14? JCO ????] ???? ?? ????? by JAVACAFE
?? ?
?
Apache kafka performance(latency)_benchmark_v0.3
Apache kafka performance(latency)_benchmark_v0.3Apache kafka performance(latency)_benchmark_v0.3
Apache kafka performance(latency)_benchmark_v0.3
SANG WON PARK
?

?? ?? ???

  • 1. Enterprise ???? Tomcat ???? Part 1 : Tomcat ? ?? ???? Victor Lee sleepred@gmail.com 2015.12.29
  • 2. ? Tomcat ?? ? Tomcat Architecture ? Basic Features - Configuration, Connector, Tomcat JDBC Connection Pool ? ? Advance Features - ??? ??, Session Clustering ? ? Management & Monitoring - Tomcat Manager, JK Manager, VisualVM, Scouter ? ? Tomcat Troubleshooting & ?? ??? ? Tomcat Community ?? - Build, Tomcat ????, Contribution
  • 6. ASF : http://www.apache.org/ Top Open Source Communities
  • 7. Apache Tomcat : http://tomcat.apache.org/ User Mailing list : http://mail-archives.apache.org/mod_mbox/tomcat-users/
  • 9. WEBSITE LISTS AVAILABLE Create a list of 158,040 websites using Apache Tomcat. https://wappalyzer.com/applications/apache-tomcat
  • 10. ? 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) ? Tomcat History ? Tomcat 3.x (1999?) : ?? ??? ? Tomcat 4.x (2003?) : Catalina ???? ?? ? Tomcat 5.x (2004?) : Session Replication ?? ?? ? Tomcat 6.0 (2007?) : Primary-Secondary ?? Sessioin Replication ?? ? Tomcat 7.0 (2011?) : Security ??, Connector ???? ? Tomcat 8.0 (2014?) : Resouce ????, WebSocket ?? ?? ? Tomcat 9.0 (2015?) : 9.0.0.M1(alpha) Release (2015-11-19)
  • 11. ? Tomcat? Serlvet Spec ? Major ???? ??? ? Servlet ??? Tomcat ??(Spec) Servlet Spec JSP Spec EL Spec WebSocket Spec Tomcat version Release revision Support Java Versions 4.0 TBD (2.4?) TBD (3.1?) TBD (1.2?) 9.0.x 9.0.0.M1 (alpha) 8 and later 3.1 2.3 3.0 1.1 8.0.x 8.0.28 7 and later 3.0 2.2 2.2 1.1 7.0.x 7.0.65 6 and later (WebSocket 1.1 requires 7 or later) 2.5 2.1 2.1 N/A 6.0.x 6.0.44 5 and later 2.4 2.0 N/A N/A 5.5.x (archived) 5.5.36 (archived) 1.4 and later 2.3 1.2 N/A N/A 4.1.x (archived) 4.1.40 (archived) 1.3 and later 2.2 1.1 N/A N/A 3.3.x (archived) 3.3.2 (archived) 1.1 and later TBD : To Be Determined Community support version : Tomcat6, Tomcat7, Tomcat8, Tomcat9 End of life for Apache Tomcat 6.0.x : 31 December 2016.
  • 13. DB WASWEB Session Server L4 / Switch OpenEJB Browser(User) Network Session replication Load Balancing Load Balancing Fail-over Fail-over
  • 16. Server Service(*) Engine Host(*) Context(*) ConnectorConnectorConnector Valve Valve ValveValve Valve Valve Global Resource Clustering SupportJMX SupportJSP SupportSecurity Utility R e q u e s t Realm Realm Realm Wrapper(*) ValveValve ValveListener ValveListener ValveListener ValveListener Logger Resources Executor Loader Manager Listener Listener Listener ValveListener Jar Scanner ResourceResource JSPJSP ServletsServlet
  • 17. ? Server : Server = Catalina servlet container = Tomcat Instance JVM ??? Singleton ?? ??, Server?? ???? Service? Life Cycle?? ?? ? Context : web application? ???? ????, Spec ? ServletContext? ??. WAR/EAR ????, exploded? ???? http://tomcat.apache.org/tomcat-8.0-doc/config/server.html ? ??
  • 18. ? Listeners : Tomcat Lifecycle ??? ??? action? ???? ???? Tomcat? lifecycle ? ???????? ?? ?? ?? ?? ex) APR Lifecycle Listener, Global Resources Lifecycle Listener ? ? Manager : HTTP ??? ?? ????? session manager ? Logger : ?? JULI(Java Logging implimentation)?? ?? ???? ??
  • 19. ? Valve : ????(Engine, Host, Context)? ??? ??? request ?? pipeline(valve chain ??)?? ??? ?? ????
  • 20. ? Server.xml ?? <?xml version='1.0' encoding='utf-8'?> <Server port="8005" shutdown="SHUTDOWN"> <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> <GlobalNamingResources> <Resource name="UserDatabase" auth="Container" type="org.apache.catalina.UserDatabase" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" pathname="conf/tomcat-users.xml" /> </GlobalNamingResources> <Service name="Catalina"> <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <Engine name="Catalina" defaultHost="localhost"> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" /> </Host> </Engine> </Service> </Server> It is NOT recommended to place <Context> elements directly in the server.xml file (https://tomcat.apache.org/tomcat-8.0-doc/config/context.html)
  • 22. Tomcat ? Client ??? ??? ?? Container? ???? ?? Component ? Connector ? Tomcat? ??? ???? Coyote Architecture ? ??? ? Protocal? ?? ??? ?? ???? ?? ? Connector Protocal ? HTTP/HTTPS (HTTP/1.1) ? AJP (AJP/1.3) ? Connector ???? ? Java Blocking I/O (BIO) : All I/O operations are blocking in processor thread (Read, Write, etc. ) Simple, stable, mature ? Java Non-blocking I/O (NIO) : Allows huge number of parallel requests ? Java NIO.2 (NIO2) : like the NIO connector but uses the NIO2 framework ? Native / Apache Portable Runtime (APR) : Native code (C), Use JNI ? http://www.tecbar.net/optimize-tomcat-performance/
  • 23. Tomcat ? Connector ?? ? ?????? APR > NIO > BIO ??, JAVA ??, OS ??, ??? ?? ??? ?? ??? ? Stability : BIO > NIO or APR ? SSL : APR > NIO > BIO ? Low concurrency : BIO > APR > NIO ? High concurrency No Keep-Alive : BIO > APR > NIO ? High concurrency Keep-Alive : APR > NIO > BIO http://www.tecbar.net/optimize-tomcat-performance/
  • 24. Tomcat ? HTTP Connector? HTTP/1.1 protocol? ???? ???? ? ?? : <Service name="Catalina"> <Connector port="8080" protocol="HTTP/1.1 connectionTimeout="20000 redirectPort="8443" /> </Service> ?? ?? ??? protocol HTTP, AJP ? Connector? Protocal? ???? ???? ???? ?? ??? ??? - BIO(java connector) : org.apache.coyote. http11.Http11Protocol - NIO(java connector) : org.apache.coyote. http11.Http11NioProtocol - NIO2(java connector) : org.apache.coyote. http11.Http11Nio2Protocol - APR(native connector) : org.apache.coyote. http11.Http11AprProtocol HTTP/1.1
  • 26. Tomcat ? AJP Connector? AJP protocol? ???? Tomcat? web server? ??? ? ???? ???? ? ?? : <Service name="Catalina"> <Connector port="8089" protocol=AJP/1.3 redirectPort="8443" /> </Service> ?? ?? ??? protocol HTTP, AJP ? Connector? Protocal? ???? ???? ???? ?? ??? ??? - BIO : org.apache.coyote.ajp.AjpProtocol - NIO : org.apache.coyote.ajp.AjpNioProtocol - NIO2 : org.apache.coyote.ajp.AjpNio2Protocol - APR : org.apache.coyote.ajp.AjpAprProtocol AJP/1.3
  • 27. Tomcat http://tomcat.apache.org/tomcat-8.0-doc/config/ajp.html http://tomcat.apache.org/tomcat-8.0-doc/config/http.html#Connector_Comparison http://www.tecbar.net/optimize-tomcat-performance/ ? AJP Connector? AJP protocol? ???? Tomcat? web server? ??? ? ???? ????
  • 29. Tomcat Logging ? JULI Logging Framework ?? Apache Commons Logging ???? ?? java.util.logging ?? (default) extra ???? ?? Log4j ? Logging Framework ?? ?? ? JULI Logging Architecture
  • 30. Tomcat Logging ? ClassLoaderLogManager java.util.logging.LogManager? ?? - $CATALINA_BASE/conf/logging.properties ?? Loading ??, Tomcat? ?? - ClassLoader? path?? logging.properties? ??, ClassLoader? Log ??? ?? -> ??????? ? log Configuration ?? # ----------------------------------------------------------------------------- # LOGGING_MANAGER (Optional) Override Tomcat's logging manager # Example (all one line) # LOGGING_MANAGER="-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager" # ----------------------------------------------------------------------------- if [ -z "$LOGGING_MANAGER" ]; then LOGGING_MANAGER="-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager" fi
  • 31. Tomcat Logging ? logging.properties handlers = 1catalina.org.apache.juli.AsyncFileHandler, 2localhost.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler .handlers = 1catalina.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler ############################################################ # Handler specific properties. # Describes specific configuration info for Handlers. ############################################################ 1catalina.org.apache.juli.AsyncFileHandler.level = FINE 1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs 1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina. 2localhost.org.apache.juli.AsyncFileHandler.level = FINE 2localhost.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs 2localhost.org.apache.juli.AsyncFileHandler.prefix = localhost. ############################################################ # Facility specific properties. # Provides extra control for each logger. ############################################################ java.util.logging.ConsoleHandler.level = FINE java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = 2localhost.org.apache.juli.AsyncFileHandler
  • 32. Tomcat Logging ? Tomcat Logging ?? java.util.logging, javax.servlet.ServletContext.log, Console, Access Logging ? ??? ?? ?? ??? Java Logging API Tomcat??? Application? ????? ???? ?? java.util.logging ??? ??? JULI? ?? logging.properties ??? ??? ?? ex) localhost.yyyy-MM- dd.log Servlets logging API javax.servlet.ServletContext.log()? ?? ???? ??? ? ??? logging.properites ??? ?? ? org.apache.catalina.core.ContainerBase.[${engine}].[${host}].[${context}] ? ??? ?? ex) manager.yyyy-MM- dd.log Console Tomcat?? ? ???? STDERR/STDOUT ex) catalina.out Access logging AccessLogValve ?? ExtendedAccessLogValve?? ???? ?? Access Log Valve? ??? ?? ex) access_log.yyyy-MM- dd
  • 34. Tomcat Session Manager ? Tomcat Session Manager HTTP ??? ?? ????? session manager? Context?? ????, ??? ??? ?? ? ? ???? ?? ???? ?? ??? (default : org.apache.catalina.session.StandardManager) ? Session Manager ?? http://tomcat.apache.org/tomcat-8.0-doc/config/manager.html ? ?? <Manager classname=org.apache.catalina.session.StandardManager /> ?? ?? ??? StandardManager ?? ??. ??? instance? ???? ??? ???? org.apache.catalina.sess ion.StandardManager PersistentManager ??? ?? DB? ??? Persist. ?? ???? ?? ??(fault tolerance) org.apache.catalina.sess ion.PersistentManager DeltaManager All-to-All ?? Session Replication ?? ?? org.apache.catalina.sess ion.DeltaManager BackupManager Primary-Secondary Session Replication ??? ?? org.apache.catalina.sess ion.BackupManager
  • 36. Tomcat Connnection Pool ? Tomcat? DataBase Connection Pool ? Commons DBCP? Tomcat JDBC Pool? 2? ? Pool? ?? The Tomcat JDBC Connection Pool (https://tomcat.apache.org/tomcat-8.0-doc/jdbc- pool.html) Commons DBCP (http://commons.apache.org/proper/commons -dbcp/) Tomcat 7.0.18 C extra package? ?? Tomcat 7.0.19 C ?? Release
  • 37. Tomcat JDBC Connnection Pool ? Tomcat? DataBase Connection Pool ? Commons DBCP? Tomcat JDBC Pool? 2?? Pool? ?? ? Commons DBCP : org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory (default) - org.apache.commons -> org.apache.tomcat. ??? ?? ? Tomcat JDBC : org.apache.tomcat.jdbc.pool.DataSourceFactory ? DBCP ? Apache Commons ????? ????, DataBase Connection Pool? ?? ?? DataBase Connection Pool ? ?? ?? ??? ??, ?? ???? ??. ? Tomcat JDBC? Apache Tomcat ????? ????? ??? DataBase Connection Pool ??. <Resource type="javax.sql.DataSource" name="jdbc/TestDB" factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/mysql" username="mysql_user" password="mypassword123" />
  • 38. Tomcat JDBC Connnection Pool ???? ? ?? DB ?? ?? ?? ?? ?? username DB ??? ?? JDBC ????? ???? ??? ?? password DB ??? ?? JDBC ????? ???? ??? ???? url DB ??? ?? JDBC ????? ???? ?? URL driverClassName JDBC ????? FQCN Fully Qualified Class Name) connectionProperties DB ??? ?? JDBC ????? ???? ?? Properties ?? ?? ??? defaultAutoCommit ??? Connection? ?? Commit Mode JDBC Dirver ??? - Oracle : true - MySQL/MariaDB : true defaultReadOnly ??? Connection? ReadOnly JDBC Dirver ??? defaultTransactionIsolation ??? Connection? TransactionIsolation JDBC Dirver ??? defaultCatalog ??? Connection? defaultCatalog JDBC Dirver ??? Commons DBCP : defaultAutoCommit ? ???? true
  • 39. ? ?? DB ?? ?? ?? ?? ??? initialSize Pool ?? ? ???? Connection? ?? ??? 10 maxActive Pool?? ??? ???? ?? ?? ?? ? 100 maxIdle Pool?? ???? ?? Connection ? 100 minIdle Pool?? ???? ?? Connection ? initialSize maxWait ?? ??? Connection? ???? ?? ?? ???? ???? 30,000 (30?) maxAge Connection? ???? ??. Connection ?? ?? maxAge ?? ?????, ?? Connection? Close ?? 0 (msc) fairQueue getConnection ??? Connection? FIFO???? ???? ???? ? true? ??. org.apache.tomcat.jdbc.pool.FairBlockingQueue ? ?? ?? ???, ???? ??? ???? Connection? ???? ?? ? ?? true
  • 40. Tomcat JDBC Connnection Pool ???? ? Connection Validation ?? ?? ?? ?? ??? validationQuery Connection ??? ??? ?? SQL Query MySQL/MariaDB : SELECT 1 Oracle : SELECT 1 FROM DUAL testOnBorrow Pool?? ?? Connection? ???? ?? ???? ?? ??? ???? ??, ?? ??? ????, ??? Pool?? Connection? ???? ?? False, true ??? validationQuery ?? testOnReturn Pool? Connection? ???? ?? Connection? ???? ?? false, true ??? validationQuery ?? testWileIdle Idle ??? Connection ? ?? ???? ?? ??? ??? ?? ?? Connection? ??? ???? Evictor ? ???? ??? Evictor? ??? ??? (timeBetweenEvictionRunsMillis ?? ??) false, true ??? validationQuery ?? initSQL Connection? ??? ???? SQL Query validationClassName Validation Class?? ??. ? ??? ?? ? validationQuery? ?? ?? ??, Validator Class? ?? ??? ??? ???? (org.apache.tomcat.jdbc.pool.Validator ????? ?? ??) validationInterval Validation? ?? ?? ??. ??? ?????? ? ? ?? ???? ?? ?? ?? ??? ? ?? ?? 30000 (30?) logValidationErrors Validation? ?? ???, ?? ????? ?? ?? false
  • 41. ? PoolCleaner ?? ?? (Evictor) ?? ?? ??? timeBetweenEvictionRunsMilles Idle ??? Connection ? check ?? ??, 5,000 (5?) minEvictableIdleTimeMillis Idle Connection? ?? ?? 60,000(60?) * Commons DBCP? ?? ? numTestsPerEvictionRun ?? ?? ? Connection Leak ?? ?? (removeAbandoned) ? PoolCleaner ?? ?? (removeAbandoned) ?? ?? ??? removeAbandoned Connection ?? ?? ?? ?? ?? false removeAbandonedTimeout Connection ??? ??????? ?? 60 ? logAbandoned Connection ??? ???? ?, Connection? Close?? ?? ?? ????? Stuck Thread? ??? ?? ??? ?? false suspectTimeout Connection ??? ??? ?? ?? ????? ?? suspectTimeout ??? ??? Connection? ?? ?? ?? ? JMX ? ??? ?? 0 abandonWhenPercentageFull ??? Connection ? ??? ??? ?? 0~100 ??? ????, ? ??? ??? ?? Connection? ??, removeAbandonedTimeout? ??? Connection? ?? ??. 0
  • 42. ? DataSouce Resource ?? <Resource name="${jdbc.resource.name}" factory=org.apache.tomcat.jdbc.pool.DataSourceFactory" auth="Container" type="javax.sql.DataSource" username="${jdbc.username}" password="${jdbc.password}" driverClassName="${jdbc.driverClassName}" url="${jdbc.url}" testWhileIdle="true" testOnBorrow="true" testOnReturn="false" validationQuery="SELECT 1" validationInterval="30000" timeBetweenEvictionRunsMillis="5000" maxActive="100" minIdle="10" maxWait="10000" initialSize="10" removeAbandonedTimeout="60" removeAbandoned="true" logAbandoned="true" minEvictableIdleTimeMillis="30000" jmxEnabled="true" jdbcInterceptors="ConnectionState;StatementFinalizer;SlowQueryReportJmx(threshold=10000)"/>
  • 43. ? Global Resource Level DataSource Pool Global level ?? ? Global Resource(server.xml) + Resouce Link(application-context.xml) ?? Application ??? ?? ?? ? Global Resource(server.xml) + Resouce Link(Global context.xml) ?? Application?? ?? ?? ? Context Level DataSource Pool ?? Context ? ??? ? Global Context (context.xml) ?? Application?? ?? ?? ? Application Context (application-context.xml) ?? Application??? ?? ??
  • 44. ? Global Resource Level (+ Resouce Link) ? Server : ${CATALINA_HOME}/conf/server.xml ? Context(1) : ${CATALINA_HOME}/conf/context.xml ? Context(2) : ${CATALINA_HOME}/conf/Catalina/localhost/${CONTEXT_NAME}.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> <?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"/> </Context> <?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>
  • 45. ? Context Level ? Context(1) : ${CATALINA_HOME}/conf/context.xml ? Context(2) : ${CATALINA_HOME}/conf/Catalina/localhost/${CONTEXT_NAME}.xml <?xml version="1.0" encoding="UTF-8" standalone="no"?> <Context> <WatchedResource>WEB-INF/web.xml</WatchedResource> <Resource name="jdbc/argo" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://10.0.1.88:3306/oom" username="root password="uCO5FkZ3NfgDo/LWB0l+0A==" /> </Context> <?xml version="1.0" encoding="UTF-8" standalone="no"?> <Resource name="jdbc/argo" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://10.0.1.88:3306/oom" username="root password="uCO5FkZ3NfgDo/LWB0l+0A==" /> </Context>
  • 46. ? Commons DBCP ? Single Thread? ????. ??? Thread? ??? ? ??? ?? ? (pool) ? ??? lock? ??. ?? ??/CPU ???? ??? ????. (???) (not DBCP 2.x) ? Commons DBCP ? ????. Commons DBCP ? ???? ? ???? 60??, Tomcat ? 8 ?? ?????? ????. ? Tomcat JDBC? Common DBCP ?? ?? ?? ?? ??? ????, ????? JMX ?? ?? ??? ???? Connection Validation, JdbcInterceptor? ?? DB??? ???? ?? ?? ?? ? ??? ??? ???? ?? ? ?? ??? Common DBCP? ??, ??? ????, ???? Tomcat ? ??? ?? ???, ?? ?? ? ?? ??? ?? ???/???? ???. Commons DBCP vs Tomcat JDBC : http://vigilbose.blogspot.kr/2009/03/apache-commons-dbcp-and-tomcat-jdbc.html http://people.apache.org/~fhanik/tomcat/jdbc-pool.html
  • 48. Jasper ? Jasper? Tomcat? JSP????, JSP? ????? ?? ???? ? JSPC(JSP to Servlet), JavaC(Servlet to Class) ??
  • 49. Jasper ? ?? JSP ??? org.apache.jasper.servlet.JspServlet ? Servlet ???? ??. <servlet> <servlet-name>jsp</servlet-name> <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class> <init-param> <param-name>fork</param-name> <param-value>false</param-value> </init-param> <init-param> <param-name>xpoweredBy</param-name> <param-value>false</param-value> </init-param> <!-- <init-param> <param-name>checkInterval</param-name> <param-value>0</param-value> </init-param> <init-param> <param-name>development</param-name> <param-value>true</param-value> </init-param> --> <load-on-startup>3</load-on-startup> </servlet> <!-- The mappings for the JSP servlet --> <servlet-mapping> <servlet-name>jsp</servlet-name> <url-pattern>*.jsp</url-pattern> <url-pattern>*.jspx</url-pattern> </servlet-mapping>
  • 51. ? ?? ??? ?? ? Static Contents? ?? ?? ? Apache HTTP Server? ??? ?? ? ?? ?? (Access Control, Contents Caching, Filter ?) ? ?? ?? ? ??? ??? ?? ?? ?? ? WEB + WAS? ?? ?? ?? ? ?? ?? ? Fail Over ? Fail Back ? ?? ? ?? (Security)
  • 52. ? ??? ?? ?? ? mod_proxy - http://httpd.apache.org/docs/2.4/mod/mod_proxy.html ? mod_jk - http://tomcat.apache.org/connectors-doc/ ? mod_cluster - http://mod-cluster.jboss.org/ ? ???? ?? ?? ?? ?? mod_proxy ? Protocal(http, https, ajp)? ???? ?? ?? ? Apache HTTP Server ? ??? ???? ??, ?? ?? ? ??? ?? ?? ? ???? Load Balancer ?? ?? ? Apache HTTP Server ?????? ?? mod_jk ? ??? Load Balancer ?? ?? ? ??? ?? ?? ?? ?? ? Apache Tomcat ?????? ?? ? ?? ?? ?? mod_cluster ? ???? worker(Tomcat) ??? ?? ? worker ??? ?? Load Balancing ?? ? JBOSS ??? ?? ?? (Tomcat? ?? ??) ? ?? ??? ?? ??
  • 53. ? Tomcat ?????? ???? ??? ?? ?? ? Document : http://tomcat.apache.org/connectors-doc/ ? Download : http://tomcat.apache.org/download-connectors.cgi ? mod_jk ?? ? worker ?? ?? (CPing/CPong) ? Connection Pooling ? Sticky Session ? Retry (Recovery) ? Load banance ? worker Status ?? ? ?? ????
  • 54. ? mod_jk ?? ?? ? mod_jk ?? ? ?? (httpd.conf) ? worker ?? (worker.properties) ? WEB-WAS ?? ?? ?? (uriworkermap.properties) ? mod_jk ?? LoadModule jk_module modules/mod_jk.so <IfModule mod_jk.c> JkWorkersFile ${INSTALL_PATH}/conf/extra/workers.properties JkLogFile "|${ENGN_HOME}/bin/rotatelogs ${INSTALL_PATH}/logs/jk.log_%Y%m%d 86400 +540" JkLogLevel error JkLogStampFormat "[%a %b %d %H:%M:%S %Y]" JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories JkShmFile ${INSTALL_PATH}/logs/jk.shm JkMountFile ${INSTALL_PATH}/conf/extra/uriworkermap.properties </IfModule> <Location /jk-status/> JkMount jkstatus Order deny,allow Deny from all </Location>
  • 55. ? worker ?? worker.list=${SERVER_LB_ID},jkstatus worker.template.type=ajp13 worker.template.lbfactor=1 worker.template.socket_timeout=300 worker.template.socket_keepalive=True worker.template.connect_timeout=30000 worker.template.connection_pool_size=128 worker.template.connection_pool_minsize=32 worker.template.connection_pool_timeout=20 ######################################### ## Worker for Tomcat ######################################### worker.argow_8180_hostname.reference=worker.template worker.argow_8180_hostname.host=127.0.0.1 worker.argow_8180_hostname.port=8009 ######################################### ## Load Balancer ######################################### worker.${SERVER_LB_ID}.type=lb worker.${SERVER_LB_ID}.balance_workers=argow_8180_hostname worker.${SERVER_LB_ID}.sticky_session=1 worker.jkstatus.type=status
  • 56. ? ?? ?? ?? /*.jsp|/=${SERVER_LB_ID} /*.do|/=${SERVER_LB_ID}
  • 57. ? status type? Worker ??? Status Worker? ??? ? Status Worker? worker? ?? ???? ? mod_jk? ?? ??? ???? ?? ??
  • 59. ? Clustering ? ??? ??? ????, ??? ??? ??? ?? ?? ? Clustering ?? : ?? ??, ?? ??, ??? ??, Fail-over ? Tomcat Clustering ? Cluster Load Balance (with Apache HTTP Server) ? Cluster Membership ? Session Replication
  • 61. ? Cluster Architecture Cluster Channel - cluster group? communication ??? ??. Manager - Cluster ????? Session Manager? ??. Membership - Multicast(default) ???? cluster group? ?? ??/??? ?? ??? ???. Receiver - Member? ???? Message receive?. Sender- ??? ??? Message? ??. Valve - Request? Servlet Container ???? ??? Track.(Tomcat Valve? ??) ClusterListener - Cluster Group? Message send/receive ?? Track. Interceptor - Message send? ? interceptor stack? ??. (Send ? Message? ?? ? ? ??) Deployer - Application Deploy? cluster ??? ???? ??.
  • 62. ? Cluster Session Manager ?? ?? ?? ??? DeltaManager ? All-to-All session replication ? Default Session Manager in Cluster environment ? For small cluster org.apache.catalina.sessi on.DeltaManager BackupManager ? Primary-Secondary session replication ? For large cluster org.apache.catalina.sessi on.BackupManager
  • 63. ? Session Replication ? Failover Load Balancer Load Balancer Session (Primary)
  • 65. ? Session Replication (create) ? Session Replication (destroy) Entry ? Primary: Tomcat #1 ? Backup: Tomcat #2 ? Key: JsessionId ? Value: Session (Value? Primary/Backup Node? ??? ? ?? ??? ??. Proxy? null)
  • 66. ? Failover Node Failure Tomcat1 ? Access to Primary node Entry ? Primary: Tomcat #2 ? Backup: Server #3 ? Key: JsessionId ? Value: Session (Value? Primary/Backup Node? ??? ? ?? ?? ? ??. Proxy? null)
  • 67. ? Access to Backup node ? Accessto Proxy node
  • 68. ? Configuration Tomcat Clustering? ???? conf/server.xml ? <Engine> ?? <Host> ? ????. <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/> ? ??? ??? ????. <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8"> <Manager className="org.apache.catalina.ha.session.DeltaManager expireSessionsOnShutdown="false" notifyListenersOnReplication="true"/> <Channel className="org.apache.catalina.tribes.group.GroupChannel"> <Membership className="org.apache.catalina.tribes.membership.McastService address="228.0.0.4 port="45564 frequency="500 dropTime="3000"/> <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver address="auto port="4000 autoBind="100 selectorTimeout="5000" maxThreads="6"/> <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter"> <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/> </Sender> <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/> <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/> </Channel> <Valve className="org.apache.catalina.ha.tcp.ReplicationValve filter=""/> <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/> <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer tempDir="/tmp/war-temp/ deployDir="/tmp/war-deploy/" watchDir="/tmp/war-listen/ watchEnabled="false"/> <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"> <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"> </Cluster> Session Manager ?? ?DeltaManager ?BackupManager ?? Cluster Group?? ??? ? ???? address? port (Multicase ??) ? ???? ?. Cluster Message? ?? Receiver ?? Port? ????? ?? ?? bind. port <= ?????port < port + autoBind Http Request ? data ?? ??? ??. txt, html ? ? ? session? ? ??? ???? filter? ???? ?. mod_jk Failover? ?? ??, sessionId ?? jvmRoute ?? ???. ???, Application/WEB-INF/web.xml ? <distributable/> ? ?????.
  • 70. ? JVM ??? ?? ????? ???? ? ? JVM? ??($JAVA_HOME/bin/jvisualvm )?? ???, ?? ??????? ???? ?? (http://visualvm.java.net/) ? ?? ?? ? 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
  • 71. https://github.com/scouter-project/scouter ? 2015.7.1 initial commit ? Apache 2 License ? Java/Scala/Eclipse-RCP
  • 73. Active Service & Control Indivisual Request Service Perf. & Profile Top-Stack Frequecy Resource Usage & Service Perf.
  • 74. Recent User TPS Avg Res. Time CPU Usage Active Service Heap Usage XLog Monitoring Objects
  • 76. ? L?? ??? ???? ?? ??? ??? ?? ??? ????, ?? Unix ? ? ? WEB/WAS?? ?? ???? ???? ??, OSS? ?? ? ?????? ? ? 22? ??? CentOS/Apache/Tomcat?? ???
  • 77. ? Tomcat ?? ?? & ?? ? HTTPS ?? ??? ??? HTTP ? ?? ? ???? ??? ?? (??? ??, ? HTTP ?? ??? ??? HTTPS ??? ????? ?? ??) Tomcat Valve ?? ?? (HTTPS ?? ?? ?, HTTP ?? ?? ??) ? JSP ?? ?? web.xml ? jsp-property-group? page-encoding ?? ? DB Password ?? Tomcat ????? DataSource ?? ? DB Password ? Plain Text ? ???? ?? ?? ????? ???? ?? ??? ??? ??
  • 78. ? Apache ?? ?? & ?? ? Tomcat Connector ? Tomcat VM ?? ?? ?? OS (VM) ? ???? ?? ?? Tomcat Connector ? ?? ?? ???? ?? ?? ?? ICA (IP Table Control for Apache) ???? ??? ? ??? ??? ?? ?? ?? ??? ??? mod_expires ? ?? ??? ???? ?? ?? ?? js, css ?? ???? mod_deflate ??? ?? ?? ?? ?? ? ?? ?? ?? & ?? ? <url-pattern> ?? ?? ? ?? ????? ?? ?? ?? ? JSP include tag ?? ?? ? ??? contentType ? ?? ?? ? JSP ? ??? ?? ??? ??
  • 79. ? L? ??? ?? ?? C ?? ?? ? ??? ??? ?? ?? ?? Jeus? Tomcat? ??? ????? Scouter APM?? ???? ?? ? ??? ??
  • 80. ? U2L ?? ?? ? ??? ???? ??? ???? ???? OSS? ??/?? ???? ?????? ??? Enterprise???? ???? ??? ????? ??? ?? ? ? ?? ??????? ??? ??? ??? ? ?? ???? ???? ???? ?????? ???? ?? value? ?? ????? ? Scale-out? ??? WEB/WAS ???? ?? ??? ???? ?? ??? ??? ?? ?? ? ?? ???? OSS?? ?? ??? ??? ??
  • 81. ? ??? ?? ?? (mod_jk Fail-over ????) ? WEB??? sticky? ??? WAS? ?????? ??? ???? ?? ??? ??? WAS? Round Robin?? ?? ???? ????? ??? ???? ??? ?? Internet WAS WEB L4 WEB WAS WAS WAS Internet WAS WEB L4 WEB WAS WAS WAS ???? ?? ??? ?? WAS?? Request? ??? ???? ??? ??, ??? WAS? Request? Round Robin?? ??
  • 82. ? mod_jk worker lb(Load Banancer) : was? ????? ????? ??, ??? ?? ?? worker? ?? ??? ?? ? lb(Load Banancer) - worker? ??? - load-balancing factor? ???? ???? - sticky?? ?? - ?? worker? ???? ? ?? worker? failover - load balancer? ??? ????? ?? .
  • 83. ? Tomcat ???(??) ?? ??, ${CATALINA_BASE} ? ?? ? CATALINA_HOME ??, CATALINA_BASE ?? ? ?? library ??, shell ??? ??, ?? ?? ? ?? : ?? ????? ? ?? ?? ???, ?? ???? ??? ? ?? : ?? ????? ??? ?? ? ?? ?????? ?? ??? ??? ?? Tomcat (CATALINA_HOME) bin conf lib logs temp webapps work Server1(CATALINA_BASE)) Server2(CATALINA_BASE) bin conf lib logs temp webapps work bin conf lib logs temp webapps work Tomcat bin conf lib logs temp webapps work Tomcat(CATALINA_HOME=CATALINA_BASE) bin conf lib logs temp webapps work [ CATALINA_HOME ??, CATALINA_BASE ?? ?? ][ ?? N? ?? ?? ]
  • 84. ? Tomcat? ?? JAVA ?? ?? ? JAVA_OPTS, CATALINA_OPTS ?? ??? ? ???, ??? ??? ?? ? JAVA_OPTS ??/?? ? ?? ?? Catalina Java Options ? ex) ? CATALINA_OPTS ?? ??? ??? JVM Memory Options, Business System Java Options ex) ## JVM Memory Options (tune them) CATALINA_OPTS=" ${CATALINA_OPTS} -Xms2048m -Xmx2048m -XX:MaxPermSize=256m" CATALINA_OPTS=" ${CATALINA_OPTS} -verbose:gc" CATALINA_OPTS=" ${CATALINA_OPTS} -Xloggc:${LOG_HOME}/gc_${INST_NAME}.${DATE}.log" CATALINA_OPTS=" ${CATALINA_OPTS} -XX:+UseParallelGC" CATALINA_OPTS=" ${CATALINA_OPTS} -XX:+UseParallelOldGC" CATALINA_OPTS=" ${CATALINA_OPTS} -XX:-UseAdaptiveSizePolicy" CATALINA_OPTS=" ${CATALINA_OPTS} -XX:+PrintGCDetails" CATALINA_OPTS=" ${CATALINA_OPTS} -XX:+PrintGCDateStamps CATALINA_OPTS=" ${CATALINA_OPTS} -XX:+ExplicitGCInvokesConcurrent" CATALINA_OPTS=" ${CATALINA_OPTS} -XX:+HeapDumpOnOutOfMemoryError" CATALINA_OPTS=" ${CATALINA_OPTS} -XX:HeapDumpPath=${LOG_HOME}/hdump ## Business System Java Options (for your application) ## Catalina Java Options (don't modify them) JAVA_OPTS=" ${JAVA_OPTS} -server" JAVA_OPTS=" ${JAVA_OPTS} -DjvmRoute=${JVM_ROUTE}" JAVA_OPTS=" ${JAVA_OPTS} -Dwas_name=${INST_NAME}" JAVA_OPTS=" ${JAVA_OPTS} -Dport.http=${SERVICE_PORT}" JAVA_OPTS=" ${JAVA_OPTS} -Dport.https=`expr ${SERVICE_PORT} + 363`" JAVA_OPTS=" ${JAVA_OPTS} -Dport.ajp=`expr ${SERVICE_PORT} - 71`" JAVA_OPTS=" ${JAVA_OPTS} -Dport.shutdown=`expr ${SERVICE_PORT} - 75`"
  • 85. ? setenv ???? ?? ? Catalina ???? ??? setenv ???? ??? ? Tomcat ?? ???? ?? ? Catalina ???? setenv.sh shutdown.sh catalina.shstartup.sh daemon.sh setclasspath.sh # ----------------------------------------------------------------------------- # Control Script for the CATALINA Server # # Environment Variable Prerequisites # # Do not set the variables in this script. Instead put them into a script # setenv.sh in CATALINA_BASE/bin to keep your customizations separate. # # ----------------------------------------------------------------------------- if [ -r "$CATALINA_BASE/bin/setenv.sh" ]; then . "$CATALINA_BASE/bin/setenv.sh" elif [ -r "$CATALINA_HOME/bin/setenv.sh" ]; then . "$CATALINA_HOME/bin/setenv.sh" fi
  • 86. ? Tomcat ?? ??? Template ???? ?? ? ?? include shell ?? ex) ? Tomcat ?? ?? (Server.xml) ex) ## Catalina Java Options (don't modify them) JAVA_OPTS=" ${JAVA_OPTS} -server" JAVA_OPTS=" ${JAVA_OPTS} -DjvmRoute=${JVM_ROUTE}" JAVA_OPTS=" ${JAVA_OPTS} -Dwas_name=${INST_NAME}" JAVA_OPTS=" ${JAVA_OPTS} -Dport.http=${SERVICE_PORT}" JAVA_OPTS=" ${JAVA_OPTS} -Dport.https=`expr ${SERVICE_PORT} + 363`" JAVA_OPTS=" ${JAVA_OPTS} -Dport.ajp=`expr ${SERVICE_PORT} - 71`" JAVA_OPTS=" ${JAVA_OPTS} -Dport.shutdown=`expr ${SERVICE_PORT} - 75`" <?xml version='1.0' encoding='utf-8'?> <Server port="${port.shutdown}" shutdown="ARGO_INSTANCE_SHUTDOWN"> ...... <Service name="Catalina"> <Connector port="${port.http}" protocol="HTTP/1.1" server="Server" connectionTimeout="20000" URIEncoding="UTF-8" redirectPort="${port.https}" /> <Connector port="${port.ajp}" protocol="AJP/1.3" server="Server" redirectPort="${port.https}" maxPostSize="-1" maxThreads="256" connectionTimeout="60000" URIEncoding="UTF-8" acceptCount="10" enableLookups="false" tcpNoDelay="true" /> <Engine name="Catalina" defaultHost="localhost"> ...... <Host name="localhost" unpackWARs="true" autoDeploy="false"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="${log.home}" prefix="access_${was_cname}." suffix=".log" pattern="%h %l %u %t &quot;%r&quot; %s %b %D" /> </Host> </Engine> </Service> </Server>
  • 87. - Tomcat Build - Tomcat ????
  • 88. ? Tomcat Major Version ? Documentation ?? ? Tomcat8 : http://tomcat.apache.org/tomcat-8.0-doc/ ? Tomcat Connectors : mod_jk Documentation C http://tomcat.apache.org/connectors-doc/ ? Tomcat Native - http://tomcat.apache.org/native-doc/ ? Tomcat Wiki C http://wiki.apache.org/tomcat/FrontPage ? Migration Guide C http://tomcat.apache.org/migration.html ? Security Report C http://tomcat.apache.org.security.html
  • 89. ? Mailing List Guide : http://tomcat.apache.org/lists.html ? Tomcat? ?? ?? Mailing List ?? ?? ? Mailing List ? tomcat-users (users@tomcat.apache.org) C subscribe: users-subscribe@tomcat.apache.org C Tomcat ???? ?? Mailing List ? tomcat-dev (dev@tomcat.apache.org) C subscribe: dev-subscribe@tomcat.apache.org C Tomcat? ??,?? ? ????? ?? ???? ?? Mailing List ? tomcat-announce (announce@tomcat.apache.org) C subscribe: announce-subscribe@tomcat.apache.org C Tomcat ??? ?? ? ??? ??? Announce ?? ?? Mailing List ? taglibs-user (taglibs-user@tomcat.apache.org) C subscribe: taglibs-user-subscribe@tomcat.apache.org C Apache Taglibs(http://tomcat.apache.org/taglibs/) ???? ?? Mailing List
  • 90. ? Bug Report Guide - http://tomcat.apache.org/bugreport.html ? Tomcat Community ? ?? ??????? Bugzilla? ?? ? Bugzilla? ???, ?? ?? ? ?? ??? ?? ?? ??? ? ? ??