资讯专栏INFORMATION COLUMN

带大家一起深入Tomcat容器架构剖析

IT那活儿 / 608人阅读
带大家一起深入Tomcat容器架构剖析
一、web容器简介


1
     概念       

1)服务器:安装了服务器软件的计算机

2)服务器软件:接收用户的请求,处理请求,做出响应

3)web服务器软件:在web服务器软件中,可以部署web项目,让用户通过浏览器来访问这些项目

2
常见Web服务器软件

1) webLogic:oracle公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。

2) webSphere:IBM公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。

3) JBOSS:JBOSS公司的,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。

4) Tomcat:Apache基金组织,中小型的JavaEE服务器,仅仅支持少量的JavaEE规范servlet/jsp。开源的,免费的。


二、HTTP协议必知必会
1
HTTP 和 HTML 有什么区别?

HTTP是协议规范HTML是超文本标记语言用来规范显示格式。

2
  http工作原理  


3
   http协议   


三、Tomcat系统架构


1
Tomcat总体架构

Tomcat 的2 个核心功能:

1) 处理Socket 连接,负责网络字节流与Request 和Response 对象的转化。

加载和管理Servlet,以及具体处理Request 请求。

2) Tomcat设计了两个核心组件连接器(Connector)和容器(Container)来分别做这两件事情。连接器负责对外交流,容器负责内部处理。

2
  连接器  

我们可以把连接器的功能需求进一步细化,比如:

监听网络端口。

接受网络连接请求。

读取请求网络字节流。

根据具体应用层协议(HTTP/AJP)解析字节流,生成统一的Tomcat Request对象。

将Tomcat Request对象转成标准的ServletRequest。

调用Servlet 容器,得到ServletResponse。

将ServletResponse转成TomcatResponse 对象。

将TomcatResponse 转成网络字节流。

将响应字节流写回给浏览器


---->综上得到三个高内聚的功能

1.网络通信。

2.应用层协议解析。

3.Tomcat Request/Response与ServletRequest/ServletResponse的转化

3
   容器   

4
tomcat打破双亲委派加载机制

5
Tomcat类加载器的层次结构

6
请求定位Servlet的过程


1)首先,根据协议和端口号选定Service 和Engine

2)然后,根据域名选定Host

3)之后,根据URL 路径找到Context 组件

4)最后,根据URL 路径找到Wrapper(Servlet)


四、性能优化
  • 清理你的tomcat

  • 清理不必要的Web应用

  • 清理XML配置文件

  • 清理JAR文件(web lib目录不应该出现servlet或者tomcat自身的jar包 provided

  • 清理其他文件(比如log日志,work目录下的class)

  • 禁止 Tomcat TLD 扫描  

  • 关闭 WebSocket 支持

  • 关闭 JSP 支持

  • 禁止 Servlet 注解扫描

  • 并行启动多个 Web 应用


CMSvs G1,G1的两大特点:

(1)G1可以并发完成大部分GC的工作,这期间不会“Stop-The-World”。

(2)G1使用非连续空间,这使G1 能够有效地处理非常大的堆。此外,G1可以同时收集年轻代和年老代。G1并没有将Java堆分成三个空间(Eden、Survivor和Old),而是将堆分成许多(通常是几百个)非常小的区域。这些区域是固定大小的(默认情况下大约为2MB)。每个区域都分配给一个空间。G1 收集器的Java 堆如下图所示


问题:

1.什么是内存泄漏

2.什么是内存溢出(java.lang.OutOfMemoryError:Java heap space)

1)内存泄漏

2)配置问题

3)过度使用finalize


gc问题的分析与解决

1. 使用jstat命令观察gc的过程

2. 通过GCViewer 工具查看GC 日志,用GCViewer 打开程序指定输出的gc.log,会看到这样的图:

3. 为了找到内存泄漏点,我们通过jmap 工具生成Heap Dump:

jmap -dump:live,format=b,file=94223.bin94223

4. 用Eclipse MemoryAnalyzer 打开Dump文件,通过内存泄漏分析,得到这样一个分析报告:

从报告中可以看到,JVM内存中有一个长度为4000 万的List,至此我们也就找到了泄漏点。


END



文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/129960.html

相关文章

  • 【备战春招/秋招系列】Java程序员必备书单

    摘要:相关推荐,豆瓣评分,人评价本书介绍了在编程中条极具实用价值的经验规则,这些经验规则涵盖了大多数开发人员每天所面临的问题的解决方案。实战高并发程序设计推荐豆瓣评分,书的质量没的说,推荐大家好好看一下。 该文已加入开源文档:JavaGuide(一份涵盖大部分Java程序员所需要掌握的核心知识)。地址:https://github.com/Snailclimb... 【强烈推荐!非广告!】...

    saucxs 评论0 收藏0
  • 深度剖析Spring Boot自动装配机制实现原理

    摘要:所以,所谓的自动装配,实际上就是如何自动将装载到容器中来。实际上在版本中,模块驱动注解的出现,已经有了一定的自动装配的雏形,而真正能够实现这一机制,还是在版本中,条件注解的出现。,我们来看一下的自动装配是怎么一回事。在前面的分析中,Spring Framework一直在致力于解决一个问题,就是如何让bean的管理变得更简单,如何让开发者尽可能的少关注一些基础化的bean的配置,从而实现自动装...

    不知名网友 评论0 收藏0
  • Java学习必备书籍推荐终极版!

    摘要:实战高并发程序设计推荐豆瓣评分书的质量没的说,推荐大家好好看一下。推荐,豆瓣评分,人评价本书介绍了在编程中条极具实用价值的经验规则,这些经验规则涵盖了大多数开发人员每天所面临的问题的解决方案。 很早就想把JavaGuide的书单更新一下了,昨晚加今天早上花了几个时间对之前的书单进行了分类和补充完善。虽是终极版,但一定还有很多不错的 Java 书籍我没有添加进去,会继续完善下去。希望这篇...

    Steve_Wang_ 评论0 收藏0
  • 深入剖析 Laravel 服务容器

    摘要:划下重点,服务容器是用于管理类的依赖和执行依赖注入的工具。类的实例化及其依赖的注入,完全由服务容器自动的去完成。 本文首发于 深入剖析 Laravel 服务容器,转载请注明出处。喜欢的朋友不要吝啬你们的赞同,谢谢。 之前在 深度挖掘 Laravel 生命周期 一文中,我们有去探究 Laravel 究竟是如何接收 HTTP 请求,又是如何生成响应并最终呈现给用户的工作原理。 本章将带领大...

    abson 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<