Tomcat部署及优化

一 Tomcat的简介

二 Tomcat的组件构成

三Tomcat的功能组件结构

四 Tomcat的请求过程

五 Tomcat服务的部署

六 tomcat启动优化

总结

 

Tomcat的主要目录说明

bin:存放启动和关闭 Tomcat 的脚本文件,如 catalina.shstartup.shshutdown.sh

conf:存放 Tomcat 服务器的各种配置文件,如主配置文件 server.xml 和 应用默认的部署描述文件 web.xml

lib:存放 Tomcat 运行需要的库文件的 jar 包,一般不作任何改动

logs:存放 Tomcat 执行时的日志

temp:存放 Tomcat 运行时产生的文件

webapps:存放 Tomcat 默认的 Web 应用项目资源的目录

workTomcat 的工作目录,存放 Web 应用代码生成和编译文件

 

一 Tomcat的简介

Tomcat Java 语言开发的,Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,是 Apache 软件基金会的 Jakarta 项目中的一个核心项目,由 ApacheSun 和其他一些公司及个人共同开发而成。

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

二 Tomcat的组件构成

Web 容器:完成 Web 服务器的功能。

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

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

因此 Tomcat Web 应用服务器,也是一个 Servlet/JSP 容器。Tomcat 作为 Servlet 容器,负责处理客户的.jsp动态页面的请求,把请求传送给 Servlet,并将 Servlet 的响应传送回给客户。

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

JSP: 全称 Java Server Pages,是一种动态网页开发技术。它使用 JSP 标签在HTML网页中插入 Java 代码。标签通常以 <% 开头,以 %> 结束。也是一种 Java servlet,主要用于实现 Java web 应用程序的用户界面部分。

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

三Tomcat的功能组件结构

Tomcat 的核心功能有两个,分别是负责接收和反馈外部请求的连接器 Connector,和负责处理请求的容器 Container。 其中连接器和容器相辅相成,一起构成了基本的 web 服务 Service。每个 Tomcat 服务器可以管理多个 Service

 

 

 

Service:对外提供的 Web 服务。主要包含 Connector  Container 两个核心组件,以及其他功能组件。Tomcat 可以管理多个 Service,且各 Service 之间相互独立。

 

Connector:负责对外接收和响应请求。它是Tomcat与外界的交通枢纽,监听端口接收外界请求,并将请求处理后传递给容器做业务处理,最后将容器处理后的结果响应给外界。

Container:负责对内处理业务逻辑。其内部由 EngineHostContextWrapper 四个容器组成,用于管理和调用 Servlet 相关逻辑。

Container 结构分析:每个 Service 会包含一个 Container 容器。在 Container 内部包含了 4 个子容器,4个子容器的作用分别是:

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

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

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

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

 

 

EngineHostContext Wrapper,这四个容器之间属于层层递进的父子关系。

容器 由一个引擎(Engine)可以管理多个虚拟主机(Host)。每个虚拟主机(Host)可以管理多个 Web 应用(Context)。每个 Web 应用会有多个 Servlet 封装器(Wrapper)。

四 Tomcat的请求过程

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

Connector 把该请求交给它所在的 Service EngineContainer)来处理,并等待 Engine 的回应;

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

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

 五 Tomcat服务的部署

本次部署准备的版本安装包(版本根据需求): jdk-8u201-linux-x64.rpmjdk环境包,是tomcat的运行环境)        apache-tomcat-9.0.16.tar.gztomcat服务软件包)

步骤一:搭建Tomcat运行环境 

1)关闭防火墙和selinux,防止其对安装过程的干扰

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

2)将准备好的软件包拖入/opt目录下,进行安装

 

#某rpm包尚未安装,我们可以通过该命令查询其说明信息、安装以后会生成的文件;
rpm -qpl jdk-8u201-linux-x64.rpm 
 
#安装并以#显示安装进度以及显示详细过程
rpm -ivh jdk-8u201-linux-x64.rpm 
 
#查看jdk环境
java -version

3)设置jdk的环境变量 

设置全局的环境变量,一般会有两种方式(本次部署采用第二种方式)

方式一:直接对 /etc/profile(全局变量配置文件进行改变)

方式二:在/etc/profile.d/  目录下创建相关的 .sh 脚本,profile有默认调用的功能。(推荐使用,便于变量的管理)

vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
 

拓展知识:

CLASSPATH:编译、运行Java程序时,JRE会去该变量指定的路径中搜索所需的类(.class)文件。

JDK java development kit java开发工具)

JRE java runtime environment java运行时环境)

JVM java virtuak machine java虚拟机),使java程序可以在多种平台上运行class文件。

source /etc/profile.d/java.sh
java -version

4)编写一个java 简易的源代码,进行环境测试

vim Hello.java
#类名、接口名命令:英文大小写字母、数字字符、$和_,不能使用关键字和数字开头;
一个单词命名时第一个单词的首字母要大写;多单词组成时,所有单词的首字母大写:XxxYyyZzz(大驼峰命名法)
public class Hello {            
  public static void main(String[] args){
    System.out.println("Hello world!");
  }
}

 

#编译源代码
javac Hello.java
#运行源代码
java Hello

 

 

 

步骤二:安装启动tomcat 

1)安装Tomcat

cd /opt
#解压tomcat软件包
tar zxvf apache-tomcat-9.0.16.tar.gz
 
#移动至服务软件包统一管理目录中,并且简易其名称
mv apache-tomcat-9.0.16 /usr/local/tomcat

2)启动Tomcat 

 注意:Tomcat服务启动时会占用8080端口

 

#后台启动
/usr/local/tomcat/bin/startup.sh 
或
/usr/local/tomcat/bin/catalina.sh start    
    

 

#前台启动
/usr/local/tomcat/bin/catalina.sh run    

#关闭后台运行的tomcat
/usr/local/tomcat/bin/shutdown.sh 

3)开启tomcat服务,测试访问tomcat的默认首页 

 

六 tomcat启动优化

优化tomcat启动速度

直接启动tomcat的速度很快,但是tomcat中跑了项目后,启动就很慢(40G可能启动10分钟)。

当java中的jar包、war包放在/webapps中,需要重新启动tomcat服务,(shutdown.sh 和startup.sh), 重启tomcat的目的: 是为了让tomcat的环,能够重新加载、识别/webapps目录下的这些java代码。

vim /usr/java/jdk1.8.0_201-amd64/jre/lib/security/java.security   #修改jdk的配置参数

 虚拟主机的概念: 是模拟多个渠道(功能)

 优点: 充分使用资源、管理便捷、降低架构的复杂度,方便自定义“扩容”(创建多个虚拟主机)

缺点: 需要其它资源的支持、消耗相同的网络资源、单点故障

nginx中的虚拟主机: 基于不同的IP、基于不同的域名、基于不同的端口。(配置文件中,每一个server就是一个虚拟主机)

Tomcat中的虚拟主机: 使用一台tomcat服务运行多台虚拟主机,通过不同的虚拟主机访问不同的项目。(配置文件中,每一个host就是一个虚拟主机)

 

 

 配置文件主要内容

 

 添加benet项目

<Host name="www.ydq.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context docBase="/usr/local/tomcat/webapps/ydq" path="" reloalable="true" />
</Host>

<Host name="www.benet.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context docBase="/usr/local/tomcat/webapps/benet" path="" reloalable="true" />
</Host>

配置文件介绍
Host name:主机名
appBase:Tomcat程序工作目录,即存放web应用程序的目录,相对路径:webapps,绝对路径:/usr/local/tomcat/webapps
unpackWARs:在启用此webapps时是对WAR格式的归档文件先进行展开
autoDeploy:在Tomcat处于运行状态时放置于appBase目录中的应用城西是否进行更新
xmlValidation:是否验证xml执行有效检验的标志
xmlNamespaceAware:是否启用命令空间,设置该值于xmlValidation为true,表示web.xml文件执行有效性验证
docBase:相应的web应用程序的存放位置,也可以使用相对路径,起始路径为此context所属Host中appBase定义的路径
path:相对web服务器跟路径而言的URI,如果为空,则表示为webapps的根路径/
reloadable:是否允许重新加载此context相关的web应用程序的类。

 

 

  Tomcat优化

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

优化的配置文件为:/usr/local/tomcat/conf/server.conf ,优化的方向为Connector容器。

常用的优化相关参数如下Tomcat配置文件参数

maxThreads】:Tomcat使用线程来处理接收的每个请求,这个值表示Tomcat可以创建的最大的线程数,默认值为200

minSpareThreads】:最小空闲线程数。启动时的初始化的线程数,表示即使没有人使用也开这么多空线程等待,默认值是10.

maxSpareThreads】:最大备用线程数,一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。默认值是-1(无限制),一般不需要指定。

URIEncoding】:指定Tomcat容器的URL编码格式,语言编码格式这块倒不如其它Web服务器软件配置方便,需要分别指定。

connectionTimeout】:网络连接超时,单位:毫秒,设置为0表示用不超时,这样设置有隐患的,通常默认20000毫秒就可以。

enableLookups】:是否反查域名,以返回远程主机的主机名,取值为truefalse,如果设置为false,则直接返回IP地址,为了提高处理能力,应设置false

disabkeUploadTimeout】:上传是否使用超时机制,应设置为true

connectionUploadTimeout】:上传超时时间,毕竟文件上传可能需要消耗更多的时间,这个格局你自己的业务需要自己挑,以使servlet有较长的时间来完成它的执行,需要与上一个参数一起配置使用才会生效。

accpetCount】:指定所有可用使用的处理请求的线程数都被使用时,可传入连接请求的最大列长度,超过这个数的请求将不予处理,你默认为100个。

compression】:是否对相应的数据进行GZIP压缩,off:表示进制压缩,on:表示允许压缩(文本将被压缩),force:表示所有情况下都进行压缩,默认值为0ff,压缩数据可以有效的减少压面的大小,一般可以减小1/3左右,节省带宽。

compressionMinSize】:表示压缩相应最小值,只有当相应报文大小大于这个值的时候,才会对报文进行压缩,如果开启压缩功能,默认值就是2048.

compressableMimeType】:压缩类型,指定堆哪些类型的文件进行数据压缩

noCompressionUserAgents=gozilla,traviata”】:对于以下浏览器,不启用压缩。

 优化配置

vim /usr/local/tomcat/conf/server.xml

#71行添加
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"/>

总结

Tomcat可做为运行JAVA代码的环境,只要把java源码(.class可执行的类文件)或者war包或jar包放在/webapps中,那么Tomcat启动时,就可以解压,并运行放在/webapps中的这些应用(只需要修改配置文件:server.xml

engine引擎---Host---context---servlet(调用应用程序的java代码执行动态操作的环境)

1tomcat 组件有哪些,从进入到处理

serverserver元素在最顶层,代表整个Tomca容器,因此它必须是server.xml中唯一一个最外层的元素。一个server元素中可以有一个或多个service元素。server的主要任务,就是提供一个接口让客户端能够访问到这个service集合。同时维护它所有的service的声明周期,包括如何初始化,如何结束服务,如何找到客户端要访问的service

serviceservice的作用,是在connectorengine外面报了一层,把他们组装在一起,对外提供服务,一个service可以包含多个connector,但是只能包含一个engine,其中connector的作用是从客户端接收请求,engine的作用是处理接收进行的请求,TTomcat可以提供多个service,不同的service监听不同的端口。

connector : 连接器,coyo http/1.1 8080 端口

engine: 容器引擎,容器引擎是管理运行容器的一个核心组件(containerweb容器、jsp容器、servlet容器)

Host: 需要和java运行环境进行对接—》通过context连接java运行环境

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

servlet: 管理调用以及运行java代码的核心组件

2Tomcat虚拟主机

service.xml 中进行配置,只需要对应配置 <Context /> 这段就可以了,此配置用于定于Tomcat 如何管理JAVA应用+如何对接、连接java应用。

3Tomcat优化

①配置文件中的优化:我们会在connector 连接配置端中进行优化,而优化的内容包括:如何更好的等待请求,如何分配线程资源、内存资源、队列、连接数、超时时间。启动时间优化(启动时间优化是优化jdk优化。进入/var/java/jdk-xxxxx/securty/java.securty 启动线程/dev/random ->/dev/urandom 的优化)

JVM优化:-Xms -Xmx 的优化—》表示的意思是最小/最大的内存优化-----》简单理解为-Xms -Xmx 就是对应用使用的内存资源最小、最大值的优化。

GC垃圾回收优化—》是因为java应用在Tomcat时,当应用运行的线程、进程资源退出时,会遗留一些资源碎片,GC就是对于这些资源碎片进行指定回收用的。

 

posted @ 2022-11-17 18:37  withfear  阅读(119)  评论(0编辑  收藏  举报
----------------------------------- ©著作权归作者所有:来自51CTO博客作者一品堂_技术学习笔记的原创作品,请联系作者获取转载授权,否则将追究法律责任 博客园随笔中添加目录导航悬浮框博客园随笔中添加目录导航悬浮框 https://blog.51cto.com/ios9/3125785