PS:but, it's bullshit !

备注:实话说,从文档上扒拉的,文档地址:在每一个Tomcat安装目录下,会有一个webapps文件夹,里面有一个docs文件夹,点击index.html  或者直接上官网看文档也一样:http://tomcat.apache.org/tomcat-8.0-doc/

一、Tomcat目录结构说明

说明:这个是Tomcat 8 版本!

整体的目录结构如下,对于每个文件夹都是干嘛的,文件夹内部的文件又是用来干嘛的,那就点开RUNNING.txt文件看吧,说的特别清晰明白。我就简单说说第一层的内容:

* bin  - Only the following files:
           * setenv.sh (*nix) or setenv.bat (Windows),
           * tomcat-juli.jar
          The setenv scripts were described above. The tomcat-juli library
          is documented in the Logging chapter in the User Guide.
 * conf - Server configuration files (including server.xml)
 * lib  - Libraries and classes, as explained below
 * logs - Log and output files
 * webapps - Automatically loaded web applications
 * work - Temporary working directories for web applications
 * temp - Directory used by the JVM for temporary files (java.io.tmpdir)

备注:webapps里面有培训资料哦,Tomcat实现的Java EE规范,怎么实现的,都有哦!它告诉你怎么学Tomcat,傻瓜式教程,哈哈!

二、Tomcat的启动流程

文档路径:http://tomcat.apache.org/tomcat-8.0-doc/architecture/index.html

1,Tomcat架构

server

在Tomcat的世界里,一个server代表了整个容器。Tomcat为用户提供了server interface的默认实现,因此用户可不必自定义实现。

service

service是server容器中的一个内部组件,它绑定一个或多个Connector到一个具体的引擎上。关于service节点很少有用户去自定义实现,因为默认的实现足够简单和健全。

engine

engine表示特定服务的请求处理流程。一个service可能有多个connector,引擎接收并处理来自这些连接器的所有请求,将响应返回到适当的连接器以传输到客户端。引擎接口可以自定义实现,尽管这并不常见。 请注意:引擎可以通过jvmRoute参数用于Tomcat服务器集群。 关于集群配置,需要阅读集群文档(妈蛋的,我是背不住那么多了,面试被问到,算我倒霉)

host

host是网络名称的关联,例如www.yourcompany.com,关联到Tomcat服务器。一个engine可能包含多个主机,Host元素还支持网络别名,例如yourcompany.com和abc.yourcompany.com。用户很少创建自定义host,因为StandardHost实现提供了显著的附加功能

connector

一个connector处理与客户端的通信。 Tomcat有多个connector,包括用于大多数HTTP流量的HTTP连接器,特别是作为独立服务器运行Tomcat时,以及实现将Tomcat连接到Web服务器(如Apache HTTPD服务器)时使用的AJP协议的AJP连接器。创建定制连接器是一项巨大的工程。

context

一个context表示一个Web应用程序。一个主机可能包含多个上下文,每个具有唯一的路径。可以实现Context接口来创建自定义上下文,但是很少出现这种情况,因为StandardContext提供了基本的所需功能

2,Tomcat的启动流程

文档路径:http://tomcat.apache.org/tomcat-8.0-doc/architecture/startup.html

文档里面有时序图和文字说明,图有点大,文字说明太过详细,我直接简化一下文字说明。

处理Tomcat命令(bootstrap类)——处理命令中的参数(bootstrap类)

处理Tomcat命令包括:

1,设置类加载器,第一个是公共类加载;第二个是共享的类加载;第三个是服务(应用)的类加载。备注:在5 的时候,Tomcat对lib里面的jar包做了分类,而现在没有了!

2,通过反射加载用于启动服务的类(Catalina),首先是加载公共的类,再加载服务的类

3,初始化Tomcat命令完成:Bootstrap.daemon.init()

处理命令中的参数包括:

这个过程很庞大,我说第一层宏观,再详细的,看文档吧。以start 参数为例:

1,Catalina.setAwait(true)——2,Catalina.start()——3, Tomcat receives a request on an HTTP port——4,Invocation of the servlet class

关键:根据Tomcat的启动流程,可以优化的点:加快Tomcat的启动:如果Tomcat的lib文件夹里面,有应用程序中涉及到的jar,那么删除应用文件中的jar,maven使用provided标签。 我在想一个问题,Tomcat会启动一个JVM进程,那这个进程会首先去加载JRE里面的jar包,JDK,Tomcat容器,应用程序,这几个之间能不能共享jar,如果不能共享,那要是我版本不一样,jar冲突???

3,Tomcat处理一个请求的流程

时序图,看了一下,大概是从协议—adapter适配—engine—host—context—filterChain—servlet

http://tomcat.apache.org/tomcat-8.0-doc/architecture/requestProcess/request-process.png

三、Tomcat优化

1,Tomcat官网的公共问题区有相关提问,可以参考一下

2,Tomcat给出的性能提升的方案建议:https://tomcat.apache.org/articles/performance.pdf  哈哈,仔细看,那是相当有意思。

3,一个比较谱儿的网站,给出的关于Tomcat优化的几个切入点:https://www.packtpub.com/mapt/book/application_development/9781849516624/3

4,一些别的说法:修改启动模式、调整线程数等:http://tomcat.apache.org/tomcat-8.0-doc/config/http.html

转载于:https://www.cnblogs.com/hhx626/p/8320424.html

理解Tomcat架构、启动流程及其性能优化相关推荐

  1. Java生鲜电商平台-SpringCloud微服务架构中网络请求性能优化与源码解析

    Java生鲜电商平台-SpringCloud微服务架构中网络请求性能优化与源码解析 说明:Java生鲜电商平台中,由于服务进行了拆分,很多的业务服务导致了请求的网络延迟与性能消耗,对应的这些问题,我们 ...

  2. Android MediaScanner MediaProvider流程以及性能优化,音视频扫描

    Android MediaScanner MediaProvider流程以及性能优化,音视频扫描 快速扫描 一.源码解析 github链接 MediaScanner时序图 MediaSacannerR ...

  3. (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序

    (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序 原文:(1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序 版权声明:本作品采用知识共享署名-非商 ...

  4. (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序

    每次使用 Visual Studio 的模板创建一个 UWP 程序,我们会在项目中发现大量的项目文件.配置.应用启动流程代码和界面代码.然而这些文件在 UWP 程序中到底是如何工作起来的? 我从零开始 ...

  5. 【Java架构师】JVM性能优化(一)JVM技术入门下

    JVM性能和"一次编译,到处运行"的挑战 我有新的消息告诉那些固执的认为Java平台本质上是缓慢的人.当Java刚刚做为企业级应用的时候,JVM被诟病的Java性能问题已经是十几年 ...

  6. Spark SQL运行流程及性能优化:RBO和CBO

    1 Spark SQL运行流程 1.1 Spark SQL核心--Catalyst Spark SQL的核心是Catalyst查询编译器,它将用户程序中的SQL/Dataset/DataFrame经过 ...

  7. tomcat的启动流程

    在上一篇中,我们是自己配置启动的路径.通过手动启动. 那么,再实际的操作中,我们通常用的都是core版本来使用的,里面是没有上篇我们配置的那个路径的,那么是如何启动的呢. 1,通过bin路径start ...

  8. tomcat的启动流程及原理

    组件介绍: Tomcat 最重要的是两个组件是:Connector(连接器) 和 Container(容器/集装箱),Connector 组件是可以被替换,这样可以提供给服务器设计者更多的选择,因为这 ...

  9. 最详细最易理解的linux启动流程解读及相关问题,万字高能无废话

    linux启动流程 linux的启动流程是运维所必须非常理解的东西,因为它将会是我们在发生服务器开不起机等情况的主要排错手段,充分理解了liunx的启动流程能够助力我们对此类故障的快速定位和处理. 废 ...

最新文章

  1. C++friend 友元类和友元函数
  2. 【OpenPose-Windows】error1 OpenPose项目加载失败
  3. php表格批量修改数据,php批量修改数据库表名前缀
  4. asp.net core跨域访问ajax的验证访问
  5. Latex: 表格内换行
  6. 不同时区时间换算_世界时区划分时差在线查询计算_时间换算器
  7. Deep Stream Ai落地--初体验
  8. 外汇汇率接口 java_基于java的货币汇率接口调用代码实例
  9. iOS 获取指南针的数据
  10. 信息差副业小项目,高利润,新手日入500+
  11. Oracle时间以半小时为单位取整
  12. html中两列合并,表格怎么把两列内容合并到一起
  13. vuejs开发H5页面总结
  14. 阿里云服务器购买完整流程
  15. 2020-06-03 Javase 常用api
  16. java新手知识第二周
  17. 对于蓝竹笋的初步研(乱)究(搞)
  18. java webrtc降噪_android音频降噪webrtc
  19. ggplot2绘制经济学风格的图形
  20. MarkovModels马尔科夫模型读书笔记

热门文章

  1. 【视频】详解HDFS的HA高可用原理
  2. linux ffmpeg加速和合并视频命令
  3. 利用MyBatis Generator进行数据层代码自动生成
  4. 解决RabbitMQ消息丢失问题和保证消息可靠性
  5. Hadoop hdfs文件块信息获取/文件重命名/修改文件的副本数量代码示例
  6. Postman同时发送多个对象+文件到Controller的实现方法
  7. springboot 数据库链接池常用配置
  8. 用u盘做引导,往硬盘中安装ubuntu
  9. 省市区联动三级下拉列表实现
  10. 最小生成树(prim算法)