1. 基础组件:

Server,

Service:

Connector(http, https, ajp用于Apache反向代理), Engine

Engine:

Realm用于安全配置等,如UserDatabaseRealm

Host:Valve链,比如自带的AccessLogValve可以记录访问日志

DefaultServlet统一处理静态资源:

流程:doGet方法判断资源文件是否存在,文件是否可读,根据文件类型设置content-type,文件时间等写入输出流

JspServlet处理JSP请求:url-pattern = *.jsp或*.jspx

jsp编译过程:JspServlet判断JSP文件的Servelt是否生成/过期(如class文件修改时间和jsp文件修改时间不同, tomcat会创建一个新的classLoader加载相同jsp),

通过Compiler生成Servlet文件,调用该Servelt的_jspService方法,如果tomcat关闭了dev模式,则动态加载失效

HttpServletRequest:用到了门面模式

getParameter方法,判断参数是否解析过,如没有,则解析出参数键值对来,解析出的参数放到Map<String,List>结构中,这样每次

调用getParameter方法时,返回key的第一个value

Filter, FilterChain: 每个Filter完成后,调用FilterChain的doFilter方法调用下一个Filter

Connector: 根据配置的protocol不同使用不同的ProtocolHandler,请求完全由Handler处理,比如 Http11NioProtocol

Connector会将文件超过48k直接sendfile(channel.transferTo) 发送,而不会压缩,减少了CPU占用

Handler内部使用Endpoint进行请求接收处理

Executor:Connector可以配置使用的线程池

跨域请求:response.setHeader("Access-Control-Allow-Origin","*");  CorsFilter

Tomcat GC优化:根据应用的延迟和吞吐量特性选择合适的gc算法

ParallelGC吞吐量优先,不能满足低延迟需求

CMS:老年代回收与应用程序并行,实现低延迟(需要配置-XX:+UseParNewGC实现新生代并行回收,默认单线程),单核服务器需要配置好

应用线程和CMS收集线程所占cpu比例(交替运行垃圾收集器应用线程)。

-XX:+UseCMSCompactAtFullCollection 在Full GC的时候对年老代的压缩

-XX:+UseG1GC

-XX:+DisableExplicitGC: 不建议打开,Java NIO 堆外内存代码中有显式调用System.gc

ELParser: 解析EL表达式

类加载:

Webapp类加载器:先自己加载,在自己的类路径上找不到才会再委托parent(基础类不允许其重新加载,以及servlet-api也不允许重新加载)

不同的应用使用不同的WebappClassloader实例

如果是双亲委派没法实现多个web app隔离

应用启动的时候,会为其创建对应的WebappClassLoader

Common 类加载器:WebappClassloader的parent,所有应用共同可见的class

Tomcat原理与优化随笔的更多相关文章

  1. Tomcat 原理篇

    TOMCAT 原理篇一.Tomcat 组成(Tomcat 由以下组件组成) 1.server a) Server是一个Catalina Servlet容器: b) Server 可以包含一个或多个se ...

  2. Tomcat 内存与优化篇

    Tomcat 内存与优化一.Tomcat 运行环境介绍 1.Tomcat 本身无法直接在计算机上运行,需要依赖硬件基础上的操作系统和Java虚拟机: 2.Java 程序启动时JVM都会分配一个初始内存 ...

  3. Nginx与Tomcat/PHP架构优化的技术分享

    PHP性能优化 一般我们是在/usr/local/php5/etc/php-fpm.conf这个文件里面进行相应的配置. 1)       如果设置成static,php-fpm进程数自始至终都是pm ...

  4. Tomcat配置与优化(内存、并发、管理)与性能监控

    原文链接:http://blog.csdn.net/xyang81/article/details/51530979 一.JVM内存配置优化 在开发当中,当一个项目比较大时,依赖的jar包通常比较多, ...

  5. TOMCAT原理详解及请求过程(转载)

    转自https://www.cnblogs.com/hggen/p/6264475.html TOMCAT原理详解及请求过程 Tomcat: Tomcat是一个JSP/Servlet容器.其作为Ser ...

  6. Java_冒泡排序_原理及优化

    冒泡排序及其优化 一.原理及优化原理 1.原理讲解 冒泡排序即:第一个数与第二个数进行比较,如果满足条件位置不变,再把第二个数与第三个数进行比较.不满足条件则替换位置,再把第二个数与第三个数进行比较, ...

  7. 浅谈tomcat中间件的优化【转】

    今天来总结一下tomcat的一些优化的方案,由于本人才疏学浅,写的不好,勿喷! tomcat对于大多数从事开发工作的童鞋应该不会很陌生,通常做为默认的开发环境来为大家服务,不过tomcat默认的一些配 ...

  8. Lucene底层原理和优化经验分享(1)-Lucene简介和索引原理

    Lucene底层原理和优化经验分享(1)-Lucene简介和索引原理 2017年01月04日 08:52:12 阅读数:18366 基于Lucene检索引擎我们开发了自己的全文检索系统,承担起后台PB ...

  9. tomcat原理解析(一):一个简单的实现

    tomcat原理解析(一):一个简单的实现 https://blog.csdn.net/qiangcai/article/details/60583330 2017年03月07日 09:54:27 逆 ...

随机推荐

  1. Python学习-字符编码, 数据类型

    本篇主要内容: 字符编码 Python中的数据类型有哪些 类型的一些常用操作及方法 一.字符编码 编码解释的大部分内容摘自廖雪峰老师教程中的讲解,点击跳转. 简单介绍: 我们知道计算机只能处理数字,如 ...

  2. 如何判断前后端bug

    测试工程师不只是负责发现问题,除了发现问题这种基本功外,定位问题,提出解决方案,提出预防方案也是要掌握的技能.这里先说定位问题的要求,定位问题要向深入,前提当然是对功能.产品的流程.开发方案.开发人员 ...

  3. Spring常犯的十大错误,你踩过吗?

    1.错误一:太过关注底层 我们正在解决这个常见错误,是因为 "非我所创" 综合症在软件开发领域很是常见.症状包括经常重写一些常见的代码,很多开发人员都有这种症状. 虽然理解特定库的 ...

  4. .Net Reactor混淆导致匿名类处理出现的问题处理分析

    .Net Reactor 是一款比较不错的混淆工具,比VS自带的那个好用很多,一直以来也陪伴着我们的成长,虽然没有完美的混淆工具,不过也算还是不错的,至少能在一定程度上对DLL进行一定的保护处理. 不 ...

  5. MySQL在Linux系统环境的安装和无主机登录配置

           将mysql 安装在单个Linux系统主机,并配置本地或远程(此处可仅单指局域状态下的环境)的无主机登录.谨记的是:操作完mysql 设置时,需以flush privileges进行权限 ...

  6. 数据分析--numpy的基本使用

    一.numpy概述 NumPy是高性能科学计算和数据分析的基础包.它是pandas等其他各种工具的基础. NumPy的主要功能: ndarray,一个多维数组结构,高效且节省空间 无需循环对整组数据进 ...

  7. 配置Redis(远程访问及授权设置)

    配置Redis(远程访问及授权设置) 1.将redis.conf里面的bind 127.0.0.1这一行注释掉,添加自己服务器的IP 2. 还有,找到protected-mode这行, 将改为yes. ...

  8. .Net Core 商城微服务项目系列(十五): 构建定时任务调度和消息队列管理系统

    一.系统描述 嗨,好久不见各位老哥,最近有点懒,技术博客写的太少了,因为最近在写小说,写的顺利的话说不定就转行了,哈哈哈哈哈哈哈哈哈. 今天要介绍的是基于.Net Core的定时任务调度和消息队列管理 ...

  9. 使用 chart 部署 skywalking

    使用 chart 部署 skywalking 本文主要讲述的是如何使用 Helm Charts 将 SkyWalking 部署到 Kubernetes 集群中,相关文档可以参考skywalking-k ...

  10. js模拟下拉菜单-键盘、鼠标(代码详解)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...