Tomcat-架构、生命周期、优化

【056扩展1 Tomcat的线程池】

在conf的server.xml中通过connector可以改变,默认的线程池是Tomcat自定义的,类似于ThreadPoolExecutor,通过参数可以指定核心线程数和最大线程数等,阻塞队列是继承了LinkedBlockingQueue的TaskQueue。

【056扩展2 Tomcat是线程安全的吗?】

Tomcat不是线程安全的,因为Tomcat的servlet被包装在wrapper容器里,而相同请求的wrapper只在第一次完成初始化,后面的请求会调用同一个servlet的doGet和doPost方法,其成员变量是共享的。

【057 Tomcat的内部架构】

Tomcat启动时,调用的是BootStrap的run方法,该方法会调用Catalina生命周期的start方法(之后所有组件的启动也是依靠各自生命周期的start方法),加载conf目录下的server.xml文件,启动唯一的Server。而Server又会启动内部的多个Service方法,每一个Service代表一种类型的Web服务(A "Service" is a collection of one or more "Connectors" that share a single "Container"),可以有多个Connector,但只能有一个Engine。每个Connector指定不同的连接方式,包括协议,监听端口号等。然后通过线程池的线程处理,分析请求,并交给合适的容器。容器的顶层是Engine,一个Engine可以有多个Host,每个Host是一台虚拟主机,而每个Host又可以有多个Context,代表每一个Web应用,Context包含多个Wrapper,每个Wrapper封装一个Java Servlet或者Jasper编译生成的Jsp Servlet。不管是哪一个层次的容器或子容器,都可以设置valve过滤链,处理公共流程。

【057扩展1 Tomcat连接器Connector】

Connextor一般需要指定协议如protocol="HTTP/1.1"、监听端口号port="8080"、连接超时如connectionTimeout="20000"、把客户请求转发至SSL的redirectPort="8443"以及线程池executor="tomcatThreadPool"。线程池可以是多个Connector共享的,也可独占,需要指定maxThreads和minSpareThreads。

【057扩展2 Tomcat虚拟主机Host】

如果把所有web站点的目录都放在webapps下,可能导致磁盘空间不够用,也不利于对web站点目录的管理,把web站点的目录分散到其他磁盘管理就需要配置虚拟目录(默认情况下,只有配置在Host的appBase中的目录,也就是webapps下的目录才能被Tomcat自动管理成一个web站点)。在server.xml中<Host>的节点下添加<Context path="/web1" docBase="D:\web1"/>,path表示访问应用名,docBase表示绝对路径。

【057扩展4 什么是Jasper?】

Jasper的作用是把Jsp文件转为servlet,存放在Tomcat的Work目录下,每个应用会有一个独立的子目录。转换过程发生在Server的监听器JasperListener。

【推荐文章】https://blog.csdn.net/u012906938/article/details/36718809

【058 Tomcat的生命周期】

Tomcat自带的所有组件都继承了Lifecycle接口,实现start和stop方法。Tomcat是通过BootStrap来实现启停的,继承了Lifecycle接口的类会采用观察者模式,通过事件通知的方式来启动和停止。以Context为例,其内部还有一个LifcycleSupport类型的成员,该类型维护了一个LifecycleListener的数组,调用Context的start和stop方法时,除了会通知所属的Wrapper和Valve组件,还会通知该数组的所有成员触发内部注册的lifecycle的start和stop方法。

【059 Tomcat的设计模式】

①单例模式的扩展StringManager,每个包有一个共享的单例String配置信息;

②装饰者模式ResponseFacade/RequestFacade,封装了Response和Request中希望对Tomcat开发者公开但是对Web开发者屏蔽的函数,因此不能简单地用public/private权限,如对请求的readLine等解析方法;

③ 责任链模式管道与阀门;

④ 观察者模式lifecycle。

【060 Tomcat的Connector运行模式】

BIO、NIO、APR三种。BIO是默认的,修改为NIO只需要修改connector的协议,例如将协议Http11Protocol修改为Http11NioProtocol;APR是从操作系统级别来解决异步的IO问题,利用中断的方式主动处理请求,需要安装APR和native,协议修改为Http11AprProtocol。

【061 Tomcat的调优方案】

Tomcat调优可以从JVM虚拟机和Tomcat自身两个层面进行优化:

① JVM方面,主要是考虑内存大小,调整堆空间,Tomcat默认可以使用的内存为128MB。应用程序需要的内存超出堆的最大值时虚拟机就会提示内存溢出。在bin目录下的catalina.bat或catalina.sh,设置JAVA_OPTS=-Xms初始化内存大小 -Xmx可以使用的最大内存,一般建议堆的最大值设置为可用内存的最大值的80%,另外[初始化内存大小]等于[可以使用的最大内存],这样可以减少平凡分配堆而降低性能。

② Tomcat方面,主要是连接器Connector的优化,通过修改minProcessors和maxProcessors的值来控制线程数,通常Windows是1000个左右,Linux是2000个左右。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,670评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,928评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,926评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,238评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,112评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,138评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,545评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,232评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,496评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,596评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,369评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,226评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,600评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,906评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,185评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,516评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,721评论 2 335

推荐阅读更多精彩内容