一、Tomcat概述

1、Tomcat介绍

免费的、开放源代码的Web应用服务器

Apache软件基金会(Apache Software Foundation)Jakarta项目中的一个核心项目

由Apache、Sun和一些公司及个人共同开发而成

深受Java爱好者的喜爱,并得到部分软件开发商的认可

目前比较流行的Web应用服务器。

Tomcat属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。一般来说,Tomcat虽然和Apache或者Nginx这些web 服务器一样,具有处理 HTML页面的功能,然而由于其处理静态HTML 的能力远不及Apache或者Nginx,所以Tomcat通常是作为一个Servlet和JSP容器,单独运行在后端。

2、Tomcat核心组件

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

1:web容器:完成web服务器的功能。

2:Servlet容器:名字为catalina,用于处理Servlet代码。

3:JSP 容器:用于将 JSP动态网页翻译成Servlet代码。

(1)、JavaServlet

Servlet是Java Servlet 的简称,可以理解为是一个服务连接器,是用Java编写的服务器端程序,具有独立于平台和协议的特性,简单的理解: servlet 就是一个中间件,包含了接口和方法,将客户端和数据库连接,从而实现动态网页的创建。

(2)、JSP容器

JSP 全称 Java Server Pages,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以< % 开头,以%>结束。

JSP是一种 Java servlet,主要用于实现 Java web应用程序的用户界面部分。

JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。

3、Tomcat请求处理

1:用户在浏览器中输入网址,请求被发送到本机端口8080,被在那里监听的Connector获得;

2:Connector把该请求交给它所在的Service 的 Engine (Container)来处理,并等待Engine

的回应;

3:请求在Engine、Host、Context和 Wrapper 这四个容器之间层层调用,最后在Servlet 中执行对应的业务逻辑、数据存储等。

4:执行完之后的请求响应在Context、Host、Engine 容器之间层层返回,最后返回给Connector,并通过Connector返回给客户端。

4、Tomcat功能组件结构

Tomcat核心组件有6个,分别为Tomcat有Server、Service、Connector、Engine、Host和Context等

1:Server

Server元素在最顶层,代表整个Tomcat容器,因此它必须是server.xml中唯一一个最外层的元素。一个Server元素中可以有一个或多个Service元素。

Service的作用,是在Connector和Engine外面包了一层,把它们组装在一起,对外提供服务。一个Service可以包含多个Connector,但是只能包含一个Engine;其中Connector的作用是从客户端接收请求,Engine的作用是处理接收进来的请求。Tomcat可以提供多个Service,不同的Service监听不同的端口。

2:Connector

Connector的主要功能,是接收连接请求,创建Request和Response对象用于和请求端交换数据;然后分配线程让Engine来处理这个请求,并把产生的Request和Response对象传给Engine。通过配置Connector,可以控制请求Service的协议及端口号。

3:Engine

Engine组件在Service组件中有且只有一个;Engine是Service组件中的请求处理组件。Engine组件从一个或多个Connector中接收请求并处理,并将完成的响应返回给Connector,最终传递给客户端。

实际上,Engine、Host和Context都是容器,但它们不是平行的关系,而是父子关系:Engine包含Host,Host包含Context。

4:Host

Host是Engine的子容器。Engine组件中可以内嵌1个或多个Host组件,每个Host组件代表Engine中的一个虚拟主机。Host组件至少有一个,且其中一个的name必须与Engine组件的defaultHost属性相匹配。

Host虚拟主机的作用,是运行多个Web应用(一个Context代表一个Web应用),并负责安装、展开、启动和结束每个Web应用。

5:Context

Context元素代表在特定虚拟主机上运行的一个Web应用。每个Web应用基于WAR文件,或WAR文件解压后对应的目录(这里称为应用目录)。Context是Host的子容器,每个Host中可以定义任意多的Context元素。

5、Container结构分析:

每个 Service 会包含一个 Container容器。在Container内部包含了4个子容器:

4个子容器的作用分别是:

1:Engine:引擎,用来管理多个虚拟主机,一个Service 最多只能有一个Engine;

2:Host:代表一个虚拟主机,也可以叫站点,通过配置 Host 就可以添加站点;

3:Context:代表一个 web应用,包含多个Servlet封装器;

4:wrapper:封装器,容器的最底层。每一wrapper 封装着一个Servlet,负责对象实例的创建、执行和销毁功能。

6、Tomcat数据流向

Tomcat部署与优化_虚拟主机

二、Tomcat服务部署

1、案例环境

名称

说明

Tomcat版本

9.0.8

jdk版本

1.8.0_171

服务器IP地址

192.168.10.101

Windows客户端IP地址

192.168.10.20

Firewalld

关闭

系统版本

CentOS7.9

Selinux

禁用

Jmeter版本

3.1

在部署 Tomcat 之前必须安装好 JDK,因为 JDK是 Tomcat 运行的必要环境。

2、下载并安装JDK

下载完安装包后,将其上传到服务器/root目录下,执行安装命令。

(1)、安装JDK

Tomcat部署与优化_Java_02

上面显示安装完成,jdk安装目录在/usr/java/jdk1.8.0 171-amd64,,编辑/etc/profile文件,设置jdk 的环境变量。具体操作如下。

Tomcat部署与优化_虚拟主机_03

然后使用“source /etc/profile”命令使环境变量生效。

查看版本号:

Tomcat部署与优化_Java_04

(2)安装启动Tomcat服务

从Tomcat官网下载 apache-tomcat-9.0.8.tar.gz稳定版本,将安装包解压后移动 Tomcat目录到/usr/local 下面,然后执行/usr/local/tomcat/bin/startup.sh 命令启动 Tomcat 即可。具体操作如下。

Tomcat部署与优化_Java_05

浏览器打开http://192.168.10.101:8080进行访问就会出现Tomcat主页,如下图所示:

Tomcat部署与优化_Java_06

3、Tomcat目录结构

Tomcat 各目录的作用具体如下所示:

Tomcat部署与优化_Java_07

bin 目录:用于存放启动和关闭 Tomcat 的脚本文件,比较常用的是 catalina.sh、startup.sh、shutdown.sh 三个文件。

conf日录:用于存放Tomcat 服务器的各种配置文件,比较常用的是 server.xml、context.xml、tomcat-users.xml、web.xml 四个文件。

lib 目录:用于存放 Tomcat 服务器的jar包,一般不作任何改动,除非连接第三方服务,比如 redis,那就需要添加相对应的jar 包。

logs 目录:用于存放 Tomcat 日志。

temp 目录:用于存放 Tomcat 运行时产生的文件。

webapps 目录:用于存放项目资源的目录。

work 目录:是 Tomcat 工作目录,一般清除 Tomcat 缓存的时候会使用到。

三、Tomcat配置与优化

1、虚拟主机配置

很多时候公司会有多个项目需要运行,那么肯定不可能是一台服务器上运行多个Tomcat 服务,这样会消耗太多的系统资源。此时,就需要使用到Tomcat 虚拟主机。例如现在新增两个域名 www.benet.com和 bbs.benet.com,希望通过这两个域名访问到不同的项目内容。

(1)、创建www和bbs项目目录和文件

执行以下命令,可以创建www和bbs项目目录文件:

Tomcat部署与优化_虚拟主机_08

Tomcat部署与优化_Java_09

Tomcat部署与优化_xml_10

(2)、修改Tomcat主配置文件

修改 Tomcat 主配置文件/usr/local/tomcat/conf/server.xml,在</Host>下面增加如下内容:

Tomcat部署与优化_虚拟主机_11

Tomcat部署与优化_虚拟主机_12

(3)、虚拟主机访问测试

客户端绑定两个域名需要写入本机 hosts,Tomcat 默认端口是 8080。

Tomcat部署与优化_xml_13

使用浏览器访问www.benet.com:8080,页面效果如下所示:

Tomcat部署与优化_虚拟主机_14

使用浏览器访问bbs.benet.com:8080,页面效果如下所示:

Tomcat部署与优化_虚拟主机_15

2、Tomcat优化

Tomcat 默认安装下的缺省配置并不适合生产环境,它会频繁出现假死现象需要重启,只有通过不断压测优化才能让它最高效率稳定的运行。优化主要包括三方面,分别为操作系统优化(内核参数优化),Tomcat配置文件参数优化,Java虚拟机(JVM)调优。

1:Tomcat配置文件参数优化

2:jmeter压测工具

bin文件夹下jmeter.bat文件是启动脚本

添加线程组(线程数20,循环次数4000)

添加http请求

添加监听器

配置完成后点击上方启动按钮

(1)优化前测试

Tomcat部署与优化_xml_16

(2)Tomcat配置文件参数优化

打开 Tomcat 主配置文件 server.xml,找到如下默认配置:

Tomcat部署与优化_Java_17

(3)优化后测试

Tomcat部署与优化_xml_18

Label:每个 JMeter 的 element(例如 HTTP Request)都有一个 Name 属性,label显示的就是 Name 属性的值 

Average:平均响应时间——默认情况下是单个 Request 的平均响应时间,当使用了 Transaction Controller 时,也可以以Transaction 为单位显示平均响应时间   

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

90% Line:90% 用户的响应时间

Min:最小响应时间   

Max:最大响应时间   

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

Throughput:吞吐量——默认情况下表示每秒完成的请求数(Request per Second)

KB/Sec:每秒从服务器端接收到的数据量