Tomcat 部署及优化

一:Tomcat 概述

1.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容器,单独运行在后端。

1.2: Tomcat 核心组件

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

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

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

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

JavaServlet

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

JSP容器

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

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

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

1.3: Tomcat 请求处理

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

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

的回应;

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

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

1.4:Tomcat 功能组件结构

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

1:Server

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

Server的主要任务,就是提供一个接口让客户端能够访问到这个Service集合,同时维护它所包含的所有的Service的声明周期,包括如何初始化、如何结束服务、如何找到客户端要访问的Service。

2:Service

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

3:Connector

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

4:Engine

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

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

5:Host

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

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

6:Context

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

1.5:Container结构分析:

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

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

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

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

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

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

Engine、Host、Context和 wrapper,这四个容器之间属于父子关系。

容器由一个引擎可以管理多个虚拟主机。每个虚拟主机可以管理多个web应用。每个web应用会有多个Servlet封装器。

1.6:Tomcat数据流向

二: Tomcat 服务部署

2.1:案例环境

|---------------------|-----------------------|
| 名称 | 说明 |
| 系统版本 | CentOS7.9(64位) |
| Tomcat 版本 | 9.0.8 |
| jdk版本 | 1.8.0_171 |
| 服务器IP地址 | 192.168.10.101 6G 内存 |
| Windows 客户端IP地址及其配置 | 192.168.10.10 8G 内存 |
| 主机名 | localhost.localdomain |
| Firewalld | 关闭 |
| Selinux | 禁用 |
| Jmeter 版本 | 3.1 |

2.2:下载并安装 JDK

1:安装JDK

root@localhost \~\]# systemctl stop firewalld \[root@localhost \~\]# rpm -ivh jdk-8u171-linux-x64.rpm

2:设置 jdk 的环境变量

root@localhost \~\]# vim /etc/profile export JAVA_HOME=/usr/java/jdk1.8.0_171-amd64 export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib export PATH=$JAVA_HOME/bin:$PATH \[root@localhost \~\]# source /etc/profile \[root@localhost \~\]# java -version java version "1.8.0_171" Java(TM) SE Runtime Environment (build 1.8.0_171-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)

2.3:安装启动 Tomcat

1:安装 Tomcat 服务

root@localhost \~\]# tar zxvf apache-tomcat-9.0.8.tar.gz \[root@localhost \~\]# mv apache-tomcat-9.0.8 /usr/local/tomcat \[root@localhost \~\]# /usr/local/tomcat/bin/startup.sh \[root@localhost \~\]# netstat -anpt \| grep java tcp6 0 0 127.0.0.1:8005 :::\* LISTEN 9591/java tcp6 0 0 :::8009 :::\* LISTEN 9591/java tcp6 0 0 :::8080 :::\* LISTEN 9591/java

备注:

8005端口是用于命令行关闭Tomcat服务

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

8080是Tomcat的web服务端默认口号

浏览器打开 http://192.168.10.101:8080 进行访问会出现 Tomcat 主页

2:优化 Tomcat 服务启动时间

root@localhost \~\]# vim /usr/java/jdk1.8.0_171-amd64/jre/lib/security/java.security securerandom.source=file:/dev/urandom ##已经存在该参数 \[root@localhost \~\]# /usr/local/tomcat/bin/shutdown.sh \[root@localhost \~\]# /usr/local/tomcat/bin/startup.sh

3: Tomcat 目录结构

root@localhost \~\]# ll /usr/local/tomcat/ 总用量 92 drwxr-x---. 2 root root 4096 6月 11 08:04 bin drwx------. 3 root root 254 6月 11 08:04 conf drwxr-x---. 2 root root 4096 6月 11 08:04 lib -rw-r-----. 1 root root 57092 4月 28 2018 LICENSE drwxr-x---. 2 root root 197 6月 11 08:04 logs -rw-r-----. 1 root root 1804 4月 28 2018 NOTICE -rw-r-----. 1 root root 6852 4月 28 2018 RELEASE-NOTES -rw-r-----. 1 root root 16246 4月 28 2018 RUNNING.txt drwxr-x---. 2 root root 30 6月 11 08:04 temp drwxr-x---. 7 root root 81 4月 28 2018 webapps drwxr-x---. 3 root root 22 6月 11 08:04 work

备注:

  • bin 目录:用于存放启动和关闭 Tomcat 的脚本文件,比较常用的是 catalina.shstartup.shshutdown.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 配置与优化

3.1:虚拟主机配置

1:创建 www 和 bbs 项目目录和文件

root@localhost \~\]# ****mkdir /usr/local/tomcat/webapps/www**** \[root@localhost \~\]# ****echo "This is www page\\!"\> /usr/local/tomcat/webapps/www/index.jsp**** \[root@localhost \~\]# ****mkdir /usr/local/tomcat/webapps/bbs**** \[root@localhost \~\]# ****echo "This is bbs page\\!"\> /usr/local/tomcat/webapps/bbs/index.jsp****

2:修改 Tomcat 主配置文件

root@localhost \~\]# ****vim /usr/local/tomcat/conf/server.xml**** \ \ \ \ \ \ \ \ \[root@localhost \~\]# ****/usr/local/tomcat/bin/shutdown.sh**** \[root@localhost \~\]# ****/usr/local/tomcat/bin/startup.sh****

备注:

<Host name="bbs.test.com" appBase="/usr/local/tomcat/webapps"

name="bbs.test.com" 网站的服务名称,做基于域名的虚拟主机时,这个参数需要设置如果要做基于端口的虚拟主机,此处的值应修改为原来的localhost

appBase="/usr/local/tomcat/webapps" 站点目录,这个位置可以不用修改

path="" 虚拟目录的目录名,URL/path,指的是斜杠后跟的字符串

reloadable="true" reloadable=true时 当web.xml或者class有改动的时候都会自动重新加载不需要从新启动服务

3:虚拟主机访问测试

客户端绑定两个域名需要写入本机 hosts

备注:

tomcat可以实现基于域名的虚拟主机、基于端口的虚拟主机

Tomcat不支持基于IP的虚拟主机

3.2:Tomcat 优化

1:Tomcat 配置文件参数优化

2:jmeter 压测工具

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

添加线程组(线程数4,循环次数10000)

添加http请求

添加监听器

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

(1)优化前测试
(2)优化参数

root@localhost \~\]# vim /usr/local/tomcat/conf/server.xml \ \[root@localhost \~\]# ****/usr/local/tomcat/bin/shutdown.sh**** \[root@localhost \~\]# ****/usr/local/tomcat/bin/startup.sh****

(3)优化后测试

优化前

优化后

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

(2)#Samples:表示你这次测试中一共发出了多少个请求,如果模拟10个用户,每个用户迭代10次,那么这里显示100,这里显示的应该是150000而不是172649,之所以是172649,是因为我中间点击停止,然后又再原来的基础上重新开始执行。

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

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

(5)90% Line:90% 用户的响应时间

(6)Min:最小响应时间

(7)Max:最大响应时间

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

(9)Throughput:吞吐量------默认情况下表示每秒完成的请求数(Request per Second),当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的 Transaction per Second 数

(10)KB/Sec:每秒从服务器端接收到的数据量,相当于LoadRunner中的Throughput/Sec
这里我们可以看到,在这172649多次的访问之中,tomcat的访问出错率是0.15%,即大概有100多次的请求是由于忙碌而失败了的。当然,这只是一个参考,具体还要根据软硬件的条件才能最终确定下来。

相关推荐
浮游本尊38 分钟前
Java学习第22天 - 云原生与容器化
java
渣哥2 小时前
原来 Java 里线程安全集合有这么多种
java
间彧3 小时前
Spring Boot集成Spring Security完整指南
java
间彧3 小时前
Spring Secutiy基本原理及工作流程
java
Java水解4 小时前
JAVA经典面试题附答案(持续更新版)
java·后端·面试
洛小豆6 小时前
在Java中,Integer.parseInt和Integer.valueOf有什么区别
java·后端·面试
前端小张同学6 小时前
服务器上如何搭建jenkins 服务CI/CD😎😎
java·后端
ytadpole7 小时前
Spring Cloud Gateway:一次不规范 URL 引发的路由转发404问题排查
java·后端
华仔啊7 小时前
基于 RuoYi-Vue 轻松实现单用户登录功能,亲测有效
java·vue.js·后端