第八章 Tomcat部署及优化
Tomcat概念
- 免费、开源的Web应用服务器
- Apache软件基金会(Apache Software Foundatio)Jakarta项目中的一个核心项目
- 由Apache、Sun和一些公司及个人共同开发而成
- 深受Java爱好者的喜爱,并得到部分软件开发商的认可
- 目前比较流行的Web应用服务器
核心组件
Tomcat 由一系列的组件构成,其中核心的组件有三个:
- web容器:完成web服务器的功能。
- Servlet容器:名字为catalina,用于处理Servlet代码。
- 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表面处理请求的过程
- 当用户在浏览器中输入服务器的IP地址和端口向客户端发送一个请求
- Tomcat服务器收到请求后通过JSP容器将请求页面的代码转换为Servlet代码
- 再转交给Servlet容器,Servlet基于JRE(Java运行时环境)解析请求
- 如果请求的内容涉及到数据库需要在Servlet代码中连接数据库获取数据
- 最后返回给用户
Tomcat底层处理请求的过程
- 当用户通过浏览器向服务器特定端口发送请求
- Connector接收请求后,交给Container中的Engine容器
- 通过用户输入的域名判断要访问的站点
- 确定了要访问的站点就会将找到对应Host
- Host收到请求后再交给Context
- 由Context当中的Servlet将代码进行解析
- 解析完成后,将请求返回给上层容器,直到返回给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)!