自学内容网 自学内容网

第八章 Tomcat部署及优化

Tomcat概念

  • 免费、开源的Web应用服务器
  • Apache软件基金会(Apache Software Foundatio)Jakarta项目中的一个核心项目
  • 由Apache、Sun和一些公司及个人共同开发而成
  • 深受Java爱好者的喜爱,并得到部分软件开发商的认可
  • 目前比较流行的Web应用服务器

核心组件

Tomcat 由一系列的组件构成,其中核心的组件有三个:

  1. web容器:完成web服务器的功能。
  2. Servlet容器:名字为catalina,用于处理Servlet代码。
  3. JSP 容器:用于将 JSP动态网页翻译成Servlet代码。

Web容器

  • Web 容器负责接收所有HTTP请求,根据请求的URL调用对应的Servlet映射来确定哪个Servlet来处理特定请求,或直接解析静态资源,然后将结果返回给客户端
Web服务器之间解析请求的区别
Apache HTTP Server
  • Apache HTTP Server服务器本身是可以独立处理静态资源请求,而对于动态资源的解析,Apache需要通过开启mod_php等模块才能动态请求
Nginx
  • Nginx服务器本身也可以独立处理静态资源请求,对于动态资源的解析,Nginx需要借助FastCGI等接口或者反向代理,将动态资源请求传递给后端服务器来解析,比如php-fpm、Node.js等服务器
Tomcat
  • Tomcat可以独立处理静态资源和动态资源的请求,Tomcat内置了Servlet和JSP的解析引擎,无需借助额外的模块或接口解析动态请求。
  • 在实际部署中,因为Tomcat的静态解析效率不高,所以通常会将静态资源的处理交给专门的前端服务器,比如 Apache 或 Nginx,而将动态内容交给 Tomcat 这样的应用服务器,实现动静分离。

Servlet容器

  • 在Java程序运行的时候,需要一个基本的JRE(Java运行时环境)环境,JRE不是一个单独的进程,而是一个容器,Tomcat是跑在JRE容器的环境里运行的。
  • Servlet有一个名字:Catalina(卡特琳娜),负责加载和执行Servlet代码,并处理Servlet相关的请求。
  • 比如将JSP代码通过JSP容器翻译成Servlet代码,然后由Servlet容器解析,最后将解析的结果返回Web容器,再由Web容器返回给用户。

JSP容器

  • 负责将JSP文件中的静态代码和Java代码编译成Servlet类。
  • 一旦JSP文件被编译为Servlet类,它会被编译成字节码文件(.class)并可以在Servlet容器中执行。
  • JSP页面中包含的Java代码需要被编译成字节码,以便在Servlet容器中运行。这样做可以确保在每次请求时不需要重新解析和编译JSP页面,而是直接执行已经编译好的字节码。

Tomcat表面处理请求的过程

  1. 当用户在浏览器中输入服务器的IP地址和端口向客户端发送一个请求
  2. Tomcat服务器收到请求后通过JSP容器将请求页面的代码转换为Servlet代码
  3. 再转交给Servlet容器,Servlet基于JRE(Java运行时环境)解析请求
  4. 如果请求的内容涉及到数据库需要在Servlet代码中连接数据库获取数据
  5. 最后返回给用户

Tomcat底层处理请求的过程

  1. 当用户通过浏览器向服务器特定端口发送请求
  2. Connector接收请求后,交给Container中的Engine容器
  3. 通过用户输入的域名判断要访问的站点
  4. 确定了要访问的站点就会将找到对应Host
  5. Host收到请求后再交给Context
  6. 由Context当中的Servlet将代码进行解析
  7. 解析完成后,将请求返回给上层容器,直到返回给Connector,由连接器返回给用户

内部结构

容器

说明

Tomcat

可以看作是一个Tomcat服务器

Service

Tomcat服务器里有一个Service容器,每一个Tomcat只有一个Service容器,是其他子容器的集合

Connector

Service的子容器,当用户在浏览器中向Tomcat发起请求,Tomcat通过Connector(连接器)接收请求,Tomcat可以有多个连接器,每个连接器可以监听特定的端口。如果要在Tomcat部署基于端口的虚拟主机,就要添加连接器,每个连接器监听不同端口

Container

Service的子容器,最多只能有一个Container,负责最终为用户提供代码的解析,但是Container又包含了很多子容器

Engine

Container的子容器,最多只能有一个Engine,负责管理基于域名的虚拟主机

Host

Engine的子容器,Host可以有多个,每个Host都是一个虚拟主机

Context

上下文,负责每一个Host对应站点的代码运行

Servlet

Context可以包含多个Servlet,负责处理来自客户端的HTTP请求,执行一些逻辑(比如业务逻辑、数据处理等),然后生成符合HTTP标准的响应返回给客户端。


目录结构

进入tomcat目录,使用ll命令可以查看tomcat的目录结构

目录与文件

说明

bin

用于存放Tomcat的可执行文件,比如启动和停止脚本 (startup.sh、shutdown.sh)

以及其他管理和维护 Tomcat 服务器的工具

conf

用于存放Tomcat的配置文件

lib

用于存放Tomcat运行时需要Java类库和依赖的JAR文件

logs

用于存储Tomcat的日志文件

temp

用于存放 Tomcat 运行时生成的临时文件,比如编译后的 JSP 文件等。

webapps

存放Tomcat的默认web应用程序部署目录,将你的WAR包放入后,Tomcat 会自动解压并运行这些应用。

work

用于存放Tomcat运行时生成的servlet编译文件。

LICENSE

这是 Tomcat 的许可证文件,包含了软件使用和分发的许可条款。

RELEASE-NOTES

这是该版本 Tomcat 的发行说明,描述了新功能、改进和已知问题等信息。

RUNNING.txt

这个文件提供了关于如何运行 Tomcat 服务器的简要说明和提示。

Tomcat常见端口号

端口号

说明

8005

只能在本地用命令行关闭Tomcat服务的端口

8009

Tomcat服务器通过Connector连接器组件与客户程序建立连接使用的端口

8080

Tomcat的web服务端默认端口号(HTTP)

8443

访问Tomcat的HTTPS的端口


JMeter压力测试

JMeter是基于JAVA开发的压力测试软件。用于在Windows系统上运行,在短时间内向服务器发送大量请求,来测试服务器压力承受的能力

Tomcat优化

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" 
               minSpareThreads="50"
               enableLookups="false"  
               disableUploadTimeout="true"
               acceptCount="300" 
               maxThreads="500" 
               processorCache="500"
               URIEncoding="UTF-8" 
               compression="on"
               compressionMinSize="2048"                  compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,image/gif,image/jpg,image/png" />

参数

说明

connectionTimeout="20000"

指定了连接超时时间,单位是毫秒。在20秒内如果连接没有建立成功,则超时。

redirectPort="8443"

指定了当需要进行重定向时使用的端口号,一般用于HTTPS协议的情况,这里是8443端口

minSpareThreads="50"

指定了最小空闲线程数。Tomcat会尽量保持至少这么多个线程处于空闲状态,以备处理新的请求。

enableLookups="false"

设置是否允许DNS查询。这里设置为false,表示不允许Tomcat对客户端的IP地址进行DNS查询。

disableUploadTimeout="true"

禁用上传超时。设置为true时,Tomcat将不会对上传操作设置超时限制。

acceptCount="300"

指定了在处理满负荷的情况下,能接受的最大连接请求数。当达到这个数目后,新的连接请求将会被拒绝。

maxThreads="500"

指定了连接器处理的最大线程数。当达到这个数目时,新的连接请求会进入等待队列(如果已满则会拒绝连接)

processorCache="500"

指定了处理器缓存的大小。Tomcat在内部使用处理器对象池来重复使用已经创建的处理器。这里设置为500,表示最多可以缓存500个处理器对象。

URIEncoding="UTF-8"

指定了URL的编码格式。这里设置为UTF-8

compression="on"

启用响应内容的压缩功能

compressionMinSize="2048"

设置触发压缩的最小响应内容大小,单位是字节。当响应内容大于这个值时才会进行压缩

compressableMimeType

指定可以进行压缩的MIME类型

优化前后对比

参数

说明

Label

表示每个HTTP请求或事务的名称或标识。用来区分不同请求或事务的名称。

Samples

表示测试中一共发出了多少个请求,单位一般为毫秒

Average

平均响应时间,越小越好

Median

中位数,也就是 50% 用户的响应时间

90% Line

90% 用户的响应时间

95% Line

95% 用户的响应时间

99% Line

99% 用户的响应时间

Min

最小响应时间

Max

最大响应时间

Error %

本次测试中出现错误的请求的数量/请求的总数

Throughput

吞吐量,表示每秒完成的请求数。单位是请求/秒

Received KB/sec

每秒接收的数据量,单位是KB/秒。

Sent KB/sec

每秒发送的数据量,单位是KB/秒。


原文地址:https://blog.csdn.net/Shandy_stark223/article/details/140615719

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!