带大家一起深入Tomcat容器架构剖析
1)服务器:安装了服务器软件的计算机
2)服务器软件:接收用户的请求,处理请求,做出响应
3)web服务器软件:在web服务器软件中,可以部署web项目,让用户通过浏览器来访问这些项目
1) webLogic:oracle公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。
2) webSphere:IBM公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。
3) JBOSS:JBOSS公司的,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。
4) Tomcat:Apache基金组织,中小型的JavaEE服务器,仅仅支持少量的JavaEE规范servlet/jsp。开源的,免费的。
HTTP是协议规范HTML是超文本标记语言用来规范显示格式。
Tomcat 的2 个核心功能:
1) 处理Socket 连接,负责网络字节流与Request 和Response 对象的转化。
加载和管理Servlet,以及具体处理Request 请求。
2) Tomcat设计了两个核心组件连接器(Connector)和容器(Container)来分别做这两件事情。连接器负责对外交流,容器负责内部处理。
我们可以把连接器的功能需求进一步细化,比如:
监听网络端口。
接受网络连接请求。
读取请求网络字节流。
根据具体应用层协议(HTTP/AJP)解析字节流,生成统一的Tomcat Request对象。
将Tomcat Request对象转成标准的ServletRequest。
调用Servlet 容器,得到ServletResponse。
将ServletResponse转成TomcatResponse 对象。
将TomcatResponse 转成网络字节流。
将响应字节流写回给浏览器
---->综上得到三个高内聚的功能
1.网络通信。
2.应用层协议解析。
3.Tomcat Request/Response与ServletRequest/ServletResponse的转化
1)首先,根据协议和端口号选定Service 和Engine
2)然后,根据域名选定Host
3)之后,根据URL 路径找到Context 组件
4)最后,根据URL 路径找到Wrapper(Servlet)
清理你的tomcat
清理不必要的Web应用
清理XML配置文件
清理JAR文件(web lib目录不应该出现servlet或者tomcat自身的jar包 <scope>provided</scope>)
清理其他文件(比如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,至此我们也就找到了泄漏点。