参考文章:tomcat源码解读——启动过程分析
在上一篇文章中介绍了idea中tomcat源码调试环境的搭建,调试环境搭建完成之后首先配置tomcat的启动信息,配置信息如下(具体配置步骤参考源码中的README文件) 配置好了tomcat的启动信息之后,就可以开始从源码启动并调试tomcat了,在深入到tomcat的源码之前,为了对tomcat有一个更加直观的了解,可以首先分析一下tomcat的配置文件和启动的过程。
2、配置文件分析
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<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">
<-- 连接器封装了ServerSocket用于接受客户端连接,protocol代表了该连接能处理的协议的类型,由于tomcat是http服务器,所以封装了http协议的处理,针对于内部的分布式服务设计,可以使用自定义的协议解析器(详细的设计过程后续会继续进行分析,并添加自定义协议解析器到源码中进行调试) -->
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
Realm>
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.authenticator.SingleSignOn" />
-->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
Host>
Engine>
Service>
Server>
3、tomcat启动信息分析
tomcat启动信息 在我们平常使用tomcat的时候,在tomcat启动的时候会输出很多信息,但是却很少去关注具体输出的内容的意义,其实通过分析该输出内容可以了解tomcat启动的过程中具体做了些什么样的事情,下面就对tomcat其中过程中的输出内容进行分析来了解tomcat的启动过程。
1)、加载tomcat公共的lib包
四月 22, 2018 12:39:51 下午 org.apache.catalina.startup.ClassLoaderFactory validateFile
警告: Problem with directory [D:\Program Files\JetBrains\IntelliJ IDEA 2017.3.4\workspace\mh\tomcat\catalina-home\lib], exists: [false], isDirectory: [false], canRead: [false]
四月 22, 2018 12:39:51 下午 org.apache.catalina.startup.ClassLoaderFactory validateFile
警告: Problem with directory [D:\Program Files\JetBrains\IntelliJ IDEA 2017.3.4\workspace\mh\tomcat\catalina-home\lib], exists: [false], isDirectory: [false], canRead: [false]
四月 22, 2018 12:39:51 下午 org.apache.catalina.startup.ClassLoaderFactory validateFile
警告: Problem with directory [D:\Program Files\JetBrains\IntelliJ IDEA 2017.3.4\workspace\mh\tomcat\catalina-home\lib], exists: [false], isDirectory: [false], canRead: [false]
四月 22, 2018 12:39:51 下午 org.apache.catalina.startup.ClassLoaderFactory validateFile
警告: Problem with directory [D:\Program Files\JetBrains\IntelliJ IDEA 2017.3.4\workspace\mh\tomcat\catalina-home\lib], exists: [false], isDirectory: [false], canRead: [false]
2、打印服务器配置信息:jvm信息宿主机信息,tomcat版本信息
四月 22, 2018 12:45:01 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Server version: Apache Tomcat/@VERSION@
四月 22, 2018 12:45:01 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Server built: @VERSION_BUILT@
四月 22, 2018 12:45:01 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Server number: @VERSION_NUMBER@
四月 22, 2018 12:45:01 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: OS Name: Windows 8.1
四月 22, 2018 12:45:01 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: OS Version: 6.3
四月 22, 2018 12:45:01 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Architecture: amd64
四月 22, 2018 12:45:01 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Java Home: C:\Program Files\Java\jdk1.8.0\jre
四月 22, 2018 12:45:01 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: JVM Version: 1.8.0-b132
四月 22, 2018 12:45:01 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: JVM Vendor: Oracle Corporation
四月 22, 2018 12:45:01 下午 org.apache.catalina.startup.VersionLoggerListener log
3、打印tomcat的参数配置信息
信息: CATALINA_BASE: D:\Program Files\JetBrains\IntelliJ IDEA 2017.3.4\workspace\mh\tomcat\catalina-home
四月 22, 2018 12:45:01 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: CATALINA_HOME: D:\Program Files\JetBrains\IntelliJ IDEA 2017.3.4\workspace\mh\tomcat\catalina-home
四月 22, 2018 12:45:01 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Command line argument: -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:55615,suspend=y,server=n
四月 22, 2018 12:45:01 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Command line argument: -Dcatalina.home=D:\Program Files\JetBrains\IntelliJ IDEA 2017.3.4\workspace\mh\tomcat\catalina-home
四月 22, 2018 12:45:01 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Command line argument: -javaagent:C:\Users\muhong\.IntelliJIdea2017.3\system\captureAgent\debugger-agent.jar=C:\Users\muhong\AppData\Local\Temp\capture.props
四月 22, 2018 12:45:01 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Command line argument: -Dfile.encoding=UTF-8
四月 22, 2018 12:45:01 下午 org.apache.catalina.core.AprLifecycleListener lifecycleEvent
4、打印Apr异常检测信息
信息: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [C:\Program Files\Java\jdk1.8.0\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\Program Files (x86)\Lenovo\FusionEngine;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\ATI Technologies\ATI.ACE\Core-Static;C:\Program Files\Lenovo\Bluetooth Software\;C:\Program Files\Lenovo\Bluetooth Software\syswow64;C:\Program Files (x86)\Common Files\lenovo\easyplussdk\bin;C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files\Microsoft SQL Server\100\DTS\Binn\;D:\Software\Tortoise\bin;D:\Software\nodejs\;D:\Software\python;D:\Software\apache-ant-1.8.0-bin\apache-ant-1.8.0\bin;C:\Program Files\Java\jdk1.8.0\bin;C:\Program Files\Java\jdk1.8.0\jre\bin;C:\Program Files (x86)\IDM Computer Solutions\UltraCompare\;D:\Software\NASM\;D:\Software\ultraEdit\;D:\Software\maven3.3.9\apache-maven-3.3.9\bin;D:\Software\gradle-2.2.1\bin;D:\Software\Tortoise\\bin;C:\Users\muhong\AppData\Local\Microsoft\WindowsApps;;D:\Software\MicrosoftVSCode\bin;C:\Users\muhong\AppData\Roaming\npm;.]
5、初始化连接器和协议解析器
四月 22, 2018 12:45:04 下午 org.apache.coyote.AbstractProtocol init
信息: Initializing ProtocolHandler ["http-nio-8080"]
四月 22, 2018 12:45:04 下午 org.apache.tomcat.util.net.NioSelectorPool getSharedSelector
信息: Using a shared selector for servlet write/read
四月 22, 2018 12:45:05 下午 org.apache.coyote.AbstractProtocol init
信息: Initializing ProtocolHandler ["ajp-nio-8009"]
四月 22, 2018 12:45:05 下午 org.apache.tomcat.util.net.NioSelectorPool getSharedSelector
信息: Using a shared selector for servlet write/read
四月 22, 2018 12:45:05 下午 org.apache.catalina.startup.Catalina load
信息: Initialization processed in 11787 ms
6、初始化tomcat的服务信息
四月 22, 2018 12:47:39 下午 org.apache.catalina.core.StandardService startInternal
信息: Starting service [Catalina]
四月 22, 2018 12:47:56 下午 org.apache.catalina.core.StandardEngine startInternal
信息: Starting Servlet Engine: Apache Tomcat/@VERSION@
四月 22, 2018 12:48:16 下午 org.apache.catalina.startup.HostConfig deployDirectory
7、部署tomcat应用
信息: Deploying web application directory [D:\Program Files\JetBrains\IntelliJ IDEA 2017.3.4\workspace\mh\tomcat\catalina-home\webapps\mh]
四月 22, 2018 12:50:26 下午 org.apache.catalina.util.SessionIdGeneratorBase createSecureRandom
警告: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [514] milliseconds.
四月 22, 2018 12:50:26 下午 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deployment of web application directory [D:\Program Files\JetBrains\IntelliJ IDEA 2017.3.4\workspace\mh\tomcat\catalina-home\webapps\mh] has finished in [130,033] ms
8、启动连接器和协议解析器
四月 22, 2018 12:51:27 下午 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler ["http-nio-8080"]
四月 22, 2018 12:51:52 下午 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler ["ajp-nio-8009"]
四月 22, 2018 12:52:11 下午 org.apache.catalina.startup.Catalina start
信息: Server startup in 382149 ms
到目前为止已经对tomcat的启动过程和相关配置信息有了基本的了解,后续会针对tomcat的每一个启动过程结合tomcat的源码进行分析。