Tomcat原理与优化随笔
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原理与优化随笔的更多相关文章
- Tomcat 原理篇
TOMCAT 原理篇一.Tomcat 组成(Tomcat 由以下组件组成) 1.server a) Server是一个Catalina Servlet容器: b) Server 可以包含一个或多个se ...
- Tomcat 内存与优化篇
Tomcat 内存与优化一.Tomcat 运行环境介绍 1.Tomcat 本身无法直接在计算机上运行,需要依赖硬件基础上的操作系统和Java虚拟机: 2.Java 程序启动时JVM都会分配一个初始内存 ...
- Nginx与Tomcat/PHP架构优化的技术分享
PHP性能优化 一般我们是在/usr/local/php5/etc/php-fpm.conf这个文件里面进行相应的配置. 1) 如果设置成static,php-fpm进程数自始至终都是pm ...
- Tomcat配置与优化(内存、并发、管理)与性能监控
原文链接:http://blog.csdn.net/xyang81/article/details/51530979 一.JVM内存配置优化 在开发当中,当一个项目比较大时,依赖的jar包通常比较多, ...
- TOMCAT原理详解及请求过程(转载)
转自https://www.cnblogs.com/hggen/p/6264475.html TOMCAT原理详解及请求过程 Tomcat: Tomcat是一个JSP/Servlet容器.其作为Ser ...
- Java_冒泡排序_原理及优化
冒泡排序及其优化 一.原理及优化原理 1.原理讲解 冒泡排序即:第一个数与第二个数进行比较,如果满足条件位置不变,再把第二个数与第三个数进行比较.不满足条件则替换位置,再把第二个数与第三个数进行比较, ...
- 浅谈tomcat中间件的优化【转】
今天来总结一下tomcat的一些优化的方案,由于本人才疏学浅,写的不好,勿喷! tomcat对于大多数从事开发工作的童鞋应该不会很陌生,通常做为默认的开发环境来为大家服务,不过tomcat默认的一些配 ...
- Lucene底层原理和优化经验分享(1)-Lucene简介和索引原理
Lucene底层原理和优化经验分享(1)-Lucene简介和索引原理 2017年01月04日 08:52:12 阅读数:18366 基于Lucene检索引擎我们开发了自己的全文检索系统,承担起后台PB ...
- tomcat原理解析(一):一个简单的实现
tomcat原理解析(一):一个简单的实现 https://blog.csdn.net/qiangcai/article/details/60583330 2017年03月07日 09:54:27 逆 ...
随机推荐
- asp.net core3.0 mvc 用 autofac
好久没有写文章了,最近在用.net core3.0,一些开发中问题顺便记录: 1.首先nuget引入 Autofac Autofac.Extensions.DependencyInjection 2. ...
- 【笔试题】Java笔试题知识点
Java高概率笔试题知识点 Java语法基础部分 [解析]java命令程序执行字节码文件是,不能跟文件的后缀名! 1.包的名字都应该是由小写单词组成,它们全都是小写字母,即便中间的单词亦是如此 2.类 ...
- Maven 梳理 -多模块 vs 继承
Maven提高篇系列之(一)——多模块 vs 继承 这是一个Maven提高篇的系列,包含有以下文章: Maven提高篇系列之(一)——多模块 vs 继承 Maven提高篇系列之(二)——配置Plu ...
- You can't specify target table 'sys_user_function' for update in FROM clause
mysql数据库在执行同时查询本表数据并删除本表数据时候,报错! 报错原因: DELETE from sys_user_function where User_Id = 19 and Function ...
- springboot 使用freemarker自定义标签
1.pom依赖引入 <dependencies> <dependency> <groupId>org.springframework.boot</groupI ...
- Golang 接口与反射知识要点
目录 Golang 接口与反射知识要点 1. 接口类型变量 2. 类型断言 3. 鸭子类型 4. 反射机制 5. reflect 包 TypeOf().ValueOf() Type().Kind() ...
- php echo/print 输出函数比较
一.两者区别 echo 支持多个字符串输出,用逗号(,)隔开,print只支持一个字符串输出 echo 输出速度比print快 echo 没有返回值,print返回值总是1 二.使用 echo e ...
- hover和position共用出现的问题
hover 鼠标移入的样式 position 定位属性 包含 relative 相对定位 absolute 绝对定位为 fixed 固定定位 hover作用范围 可以实现自己样式的 ...
- Rust到底值不值得学--Rust对比、特色和理念
前言 其实我一直弄不明白一点,那就是计算机技术的发展,是让这个世界变得简单了,还是变得更复杂了. 当然这只是一个玩笑,可别把这个问题当真. 然而对于IT从业者来说,这可不是一个玩笑.几乎每一次的技术发 ...
- InfluxDB从原理到实战 - InfluxDB常用的基础操作
0x00 基础操作介绍 在本文中将介绍InfluxDB常用的基础操作,帮助读者建立对InfluxDB的感性认识,快速的动手玩起来,持续查询(Continuous Queies).Group by.Se ...