目录
tomcat 简介
tomcat 构件
1. Web 容器
2. Servlet 容器
3.Jsp容器
tomcat 核心组件
Connector
Container
Service
子容器
总结
tomcat 部署
tomcat请求过程
tomcat部署
tomcat 优化
tomcat配置文件参数优化
JVM优化
tomcat 简介
提到Tomcat 就想到 java,没错,Tomcat 确实是 java 语言开发的,它是一个免费的开放源代码的 Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下 被普遍使用,是开发和调试 JSP 程序的首选,通常是作为一个 Servlet 和 JSP 容器,单独运行在后端。
tomcat 构件
tomcat 有三个构件,分别是web 容器、servlet 容器、jsp 容器
1. Web 容器
作为 Web 服务器的核心部分,Web 容器负责接收和响应 HTTP 请求,处理静态内容如 HTML 页面,并将动态请求传递给适当的 Servlet 或 JSP 容器进行处理。
2. Servlet 容器
由catalina组件处理,Servlet 容器接收 Web 容器传递过来的请求,并调用相应的 Servlet 代码进行处理,Servlet 容器管理 Servlet 的生命周期,包括创建、执行和销毁 Servlet 实例。
3.Jsp容器
JSP 容器接收 Web 容器传递的 JSP 请求,将 JSP 页面转换为 Java Servlet 代码,然后通过 Servlet 容器执行这些代码,生成动态网页内容。
tomcat 核心组件
tomcat 又有三个核心组件,分别是connetor、container、service,它们一起构成了基本的 web 服务 Service,每个 Tomcat 服务器可以管理多个 Service。
1.Connector
负责对外接收和响应请求。它是Tomcat与外界的交通枢纽,监听端口接收外界请求,并将请求处理后传递给容器做业务处理,最后将容器处理后的结果响应给外界。
2.Container
负责对内处理业务逻辑。其内部由 Engine、Host、Context和Wrapper 四个容器组成,用于管理和调用 Servlet 相关逻辑。
3.Service
对外提供的 Web 服务。主要包含 Connector 和 Container 两个核心组件,以及其他功能组件。Tomcat 可以管理多个 Service,且各 Service 之间相互独立。,每个 Service 会包含一个 Container 容器。
子容器
在 Container 内部包含了 4 个子容器
4个子容器分别是:Engine、Host、Context、Wrapper
Engine:引擎,用来管理多个虚拟主机,一个 Service 最多只能有一个 Engine
Host:代表一个虚拟主机,也可以叫站点,通过配置 Host 就可以添加站点
Context:代表一个 Web 应用,包含多个 Servlet 封装器
Wrapper:封装器,容器的最底层。每一 Wrapper 封装着一个 Servlet,负责对象实例的创建、执行和销毁功能。
总结
说了这么一大堆,其实都是有顺序的
web容器包含servlet容器和jsp容器,service 包含 connector 和container,container 包含engine,engine 包含 host ,host 包含 context ,context 包含 wrapper ,而wrapper 管理具体的servlet 实例。
tomcat 部署
tomcat请求过程
在进行 tomcat 部署之前,我们需要先了解tomcat的请求过程
1、用户在浏览器中输入网址,请求被发送到本机端口 8080,被在那里监听的 Connector 获得;
2、Connector 把该请求交给它所在的 Service 的 Engine(Container)来处理,并等待 Engine 的回应,Engine 将请求交给 Host 虚拟主机;
3、Host 虚拟主机收到请求后,将请求交给context
4、context 收到请求后,在它的mapping table 中寻找对应的servlet,找到对应的JspServlet类
5、构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet或doPost方法
6、Context把执行完了之后的HttpServletResponse对象返回给Host
7、Host把HttpServletResponse对象返回给Engine
8、Engine把HttpServletResponse对象返回给Connector
9、Connector把HttpServletResponse对象返回给用户
2-9步看起来多,其实就是请求在 Engine、Host、Context 和 Wrapper 这四个容器之间层层调用,最后在 Servlet 中执行对应的业务逻辑、数据存储等,然后再逐层返回。
tomcat部署
在部署 Tomcat 之前必须安装好 jdk,因为 jdk 是 Tomcat 运行的必要环境。
1.关闭防火墙,将安装 Tomcat 所需软件包传到/opt目录下
jdk-8u201-linux-x64.rpm
apache-tomcat-9.0.16.tar.gz
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
2.安装JDK
cd /opt rpm -qpl jdk-8u201-linux-x64.rpm
rpm -ivh jdk-8u201-linux-x64.rpm
java -version
3.设置JDK环境变量
vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH
source /etc/profile.d/java.sh
java -version
/etc/profile
接下来开始安装 tomcat
去官网找到下载链接
cd /opt
wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.16/bin/apache-tomcat-9.0.16.tar.gz
tar zxvf apache-tomcat-9.0.16.tar.gz
mv apache-tomcat-9.0.16 /usr/local/tomcat
前台启动
/usr/local/tomcat/bin/catalina.sh run
直接访问本机ip:8080
出现如下页面说明tomcat部署成功
tomcat 优化
tomcat默认安装下的配置并不适合我们真实的生产环境,它可能会频繁出现假死现象需要重启,我们可以通过修改配置文件等来优化tomcat,让它最高效率稳定的运行。优化主要包括三方面,分别为操作系统优化(内核参数优化),tomcat配置文件参数优化,Java虚拟机(JVM)调优。
tomcat配置文件参数优化
vim /usr/local/tomcat/conf/server.xml
69行左右有<Connector port="8080" protocol="HTTP/11.1"...........
从71行 /> 前面开始插入配置参数
常用的配置参数有
redirectPort:如果某连接器支持的协议是HTTP,当接收客户端发来的HTTPS请求时,则转发至此属性定义的端口
maxThreads:可创建的最大的线程数,即支持的最大并发连接数,默认值是 200
minSpareThreads:最小空闲线程数,Tomcat 启动时的初始化的线程数,表示即使没有人使用也开这么多空线程等待,默认值是 10
maxSpareThreads:最大备用线程数,一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。默认值是-1(无限制)。一般不需要指定
URIEncoding:指定 Tomcat 容器的 URL 编码格式,语言编码格式这块倒不如其它 Web服务器软件配置方便,需要分别指定
connnectionTimeout:网络连接超时,单位:毫秒,设置为 0 表示永不超时,这样设置有隐患的。通常默认 20000 毫秒就可以
enableLookups:是否反查域名,以返回远程主机的主机名,取值为:true 或 false,如果设置为 false,则直接返回 IP 地址,为了提高处理能力,应设置为 false
disableUploadTimeout:上传时是否使用超时机制。应设置为 true
connectionUploadTimeout:上传超时时间,毕竟文件上传可能需要消耗更多的时间,这个根据你自己的业务需要自己调,以使Servlet有较长的时间来完成它的执行,需要与上一个参数一起配合使用才会生效
acceptCount:指定当所有可以使用的处理请求的线程数都被使用时,可传入连接请求的最大队列长度,超过这个数的请求将不予处理,默认为 100 个
compression:是否对响应的数据进行GZIP压缩,off:表示禁止压缩;on:表示允许压缩(文本将被压缩)、force:表示所有情况下都进行压缩,默认值为 off,压缩数据后可以有效的减少页面的大小,一般可以减小 1/3 左右,节省带宽
compressionMinSize:表示压缩响应的最小值,只有当响应报文大小大于这个值的时候才会对报文进行压缩,如果开启了压缩功能,默认值就是 2048
compressableMimeType:压缩类型,指定对哪些类型的文件进行数据压缩
noCompressionUserAgents="gozilla, traviata":对于以下的浏览器,不启用压缩
JVM优化
/bin/catalina.sh
-server:jvm的server工作模式,对应的有client工作模式。使用“java -version”可以查看当前工作 模式
-Xms1024m:初始Heap大小,使用的最小内存
-Xmx1024m:Java heap最大值,使用的最大内存。经验: 设置Xms大小等于Xmx大小
-XX:NewSize=512m:表示新生代初始内存的大小,应该小于 -Xms的值
-XX:MaxNewSize=1024M:表示新生代可被分配的内存的最大上限,应该小于 -Xmx的值
-XX:PermSize=1024m:设定内存的永久保存区域,内存的永久保存区域,VM 存放Class 和 Meta 信息,JVM在运行期间不会清除该区域
-XX:MaxPermSize=1024m:设定最大内存的永久保存区域。经验: 设置PermSize大小等于 MaxPermSize大小
-XX:+DisableExplicitGC:自动将System.gc() 调用转换成一个空操作,即应用中调用System.gc() 会变成一个空操作,避免程序员在代码里进行System.gc()这种危险操作。System.gc() 除非是到了万不得也的情况下使用,都应该交给 JVM。