DAY 49 tomcat服务配置优化

news2024/12/23 9:37:18

什么是Tomcat

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

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

  • 免费的、开放源代码的Web应用服务器
  • Apache软件基金会(Apache Software Foundation)Jakarta项目中的一个核心项目
  • 由Apache、Sun和一些公司及个人共同开发而成
  • 深受Java爱好者的喜爱,并得到部分软件开发商的认可
  • 目前比较流行的Web应用服务器

Tomcat核心组件

Tomcat核心组件有三个:

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

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

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

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

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

 什么是servlet? (用来实现用Java语言开发的动态页面逻辑)

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

什么是JSP?

  • JSP全称Java Server Pages, 是一种动态网页开发技术。|它使用JSP 标签在HTML网页中插入Java 代码。标签通常以<%开头,以%>结束。
  • JSP是一种Java servlet,主要用于实现Java web应用程序的用户界面部分。
  • JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。

Tomcat 功能组件结构

Tomcat 的核心功能有两个,分别是负责接收和反馈外部请求的连接器Connector, 和负责处理请求的容器Container。

其中连接器和容器相辅相成,一起构成了基本的web服务Service。每个Tomcat服务器可以管理多个Service

Tomcat 功能组件结构

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

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

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

    (一个service就是一个外部应用,各个service之间是相互独立的,每个service可以监听不同的端口号)

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

Tomcat请求过程

  • 用户在浏览器中输入网址,请求被发送到本机端口8080, 被在那里监听的Connector 获得。
  • Connector 把该请求交给它所在的Service 的Engine (Container) 来处理,并等待Engine 的回应。
  • 请求会在Engine、 Host、 Context 和wrapper 这四个容器之间层层调用,最后在Servlet 中执行对应的业务逻辑、数据存储等。
  • 执行完之后的请求响应在Context、 Host、 Engine 容器之间层层返回,最后返回给Connector,并通过Connector 返回给客户端。

Tomcat的端口和主要目录说明

Tomcat端口

客户端和tomcat进行连接时使用:

  • 8080端口:http的默认端口
  • 8443端口:https的默认端口

8005端口: shutdown用于关闭tomcat进程。tomcat监听的关闭端口,就是说这个端口负责监听关闭tomcat的请求。

8009端口: 用于转发,负责和其他http服务器建立连接。但一般不用,因为tomcat一般放在后端服务器,其他服务器转发给tomcat

Tomcat主要目录

ls /usr/local/tomcat/

目录说明
bin存放启动和关闭Tomcat 的脚本文件,如catalina.sh、startup.sh、shutdown.sh
conf存放Tomcat 服务器的各种配置文件,如主配置文件server.xml 和应用默认的部署描述文件web.xml
lib存放Tomcat运行需要的库文件的jar 包,一般不作任何改动
logs存放Tomcat 执行时的日志
temp存放Tomcat 运行时产生的文件
webapps存放Tomcat默认的web应用项目资源的目录
workTomcat 的工作目录,存放web应用代码生成和编译文件

Tomcat 部署步骤

在部署 Tomcat 之前必须安装好 jdk,因为Tomcat是采用Java语言编写的,而jdk是java的开发工具,没有jdk,Tomcat是跑不起来的,所以 jdk 是 Tomcat 运行的必要环境。

官网下载JDK的安装包以及Tomcat的安装包

下载并安装 JDK

[root@localhost ~]# cd /opt
[root@localhost opt]# ls
rh
[root@localhost opt]# rz -E
rz waiting to receive.
[root@localhost opt]# rz -E
rz waiting to receive.
[root@localhost opt]# ls
apache-tomcat-9.0.16.tar.gz  jdk-8u201-linux-x64.rpm  rh
[root@localhost opt]# systemctl stop firewalld
[root@localhost opt]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@localhost opt]# setenforce 0

 设置JDK环境变量

 编写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 

cd /opt
tar zxvf apache-tomcat-9.0.16.tar.gz
mv apache-tomcat-9.0.16 /usr/local/tomcat  #将解压的压缩包移动到/usr/local下并改名为tomcat

 启动tomcat

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

 浏览器访问Tomcat的默认主页 http://192.168.137.15:8080(本机IP)

 优化tomcat启动速度

第一次启动tomcat可能会发现 Tomcat 启动很慢,默认情况下可能会需要几十秒,可以修改jdk参数进行改。

vim /usr/java/jdk1.8.0_201-amd64/jre/lib/security/java.security
--117行--修改
securerandom.source=file:/dev/urandom
/usr/local/tomcat/bin/shutdown.sh 
/usr/local/tomcat/bin/startup.sh 

 tomcat主要目录说明

[root@localhost bin]# ls /usr/local/tomcat/
bin           conf             lib      logs    README.md      RUNNING.txt  webapps
BUILDING.txt  CONTRIBUTING.md  LICENSE  NOTICE  RELEASE-NOTES  temp         work

bin:存放启动和关闭 Tomcat 的脚本文件,如 catalina.sh、startup.sh、shutdown.sh
conf:存放 Tomcat 服务器的各种配置文件,如主配置文件 server.xml 和 应用默认的部署描述文件 web.xml
lib:存放 Tomcat 运行需要的库文件的 jar 包,一般不作任何改动
logs:存放 Tomcat 执行时的日志
temp:存放 Tomcat 运行时产生的文件
webapps:存放 Tomcat 默认的 Web 应用项目资源的目录
work:Tomcat 的工作目录,存放 Web 应用代码生成和编译文件
 

tomcat 8080 http端口

tomcat 8443 https端口

tomcat 8005端口是用来关闭进程所用

tomcat 8009转发端口

负责和其它http服务器建立连接

Tomcat 虚拟主机配置

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

创建cxk和lq项目目录和文件

mkdir /usr/local/tomcat/webapps/cxk
mkdir /usr/local/tomcat/webapps/lq
echo "This is cxk page\!" > /usr/local/tomcat/webapps/cxk/index.jsp
echo "This is lq page\!" > /usr/local/tomcat/webapps/lq/index.jsp

修改 Tomcat 主配置文件 server.xml

vim /usr/local/tomcat/conf/server.xml
--165行前--插入
<Host name="www.my.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
	<Context docBase="/usr/local/tomcat/webapps/cxk" path="" reloadable="true" />
</Host>
 
<Host name="www.qyd.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
	<Context docBase="/usr/local/tomcat/webapps/lq" path="" reloadable="true" />
</Host>

重启tomcat服务

/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh

设置域名解析

echo "192.168.137.15 www.cxk.com www.lq.com" >> /etc/hosts

Tomcat优化

Tomcat 配置文件参数优化

常用的优化相关参数如下:

redirectPort:如果某连接器支持的协议是HTTP,当接收客户端发来的HTTPS请求时,则转发至此属性定义的 8443 端口。
maxThreads:Tomcat使用线程来处理接收的每个请求,这个值表示Tomcat可创建的最大的线程数,即支持的最大并发连接数,默认值是 200。
minSpareThreads:最小空闲线程数,Tomcat 启动时的初始化的线程数,表示即使没有人使用也开这么多空线程等待,默认值是 10。
maxSpareThreads:最大备用线程数,一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。默认值是-1(无限制)。一般不需要指定。
processorCache:进程缓冲器,可以提升并发请求。默认值是200,如果不做限制的话可以设置为-1,一般采用maxThreads的值或者-1。
URIEncoding:指定 Tomcat 容器的 URL 编码格式,网站一般采用UTF-8作为默认编码。
connnectionTimeout:网络连接超时,单位:毫秒,设置为 0 表示永不超时,这样设置有隐患的。通常默认 20000 毫秒就可以。
enableLookups:是否反查域名,以返回远程主机的主机名,取值为:true 或 false,如果设置为 false,则直接返回 IP 地址,为了提高处理能力,应设置为 false。
disableUploadTimeout:上传时是否使用超时机制。应设置为 true。
connectionUploadTimeout:上传超时时间,毕竟文件上传可能需要消耗更多的时间,这个根据你自己的业务需要自己调,以使Servlet有较长的时间来完成它的执行,需要与上一个参数一起配合使用才会生效。
acceptCount:指定当所有可以使用的处理请求的线程数都被使用时,可传入连接请求的最大队列长度,超过这个数的请求将不予处理,默认为 100 个。
maxKeepAliveRequests:指定一个长连接的最大请求数。默认长连接是打开的,设置为1时,代表关闭长连接;为-1时,代表请求数无限制
compression:是否对响应的数据进行GZIP压缩,off:表示禁止压缩;on:表示允许压缩(文本将被压缩)、force:表示所有情况下都进行压缩,默认值为 off,压缩数据后可以有效的减少页面的大小,一般可以减小 1/3 左右,节省带宽。
compressionMinSize:表示压缩响应的最小值,只有当响应报文大小大于这个值的时候才会对报文进行压缩,如果开启了压缩功能,默认值就是 2048。
compressableMimeType:压缩类型,指定对哪些类型的文件进行数据压缩。
noCompressionUserAgents="gozilla, traviata":对于以下的浏览器,不启用压缩
如果已经进行了动静分离处理,静态页面和图片等数据就不需做 Tomcat 处理,也就不要在 Tomcat 中配置压缩了

vim /usr/local/tomcat/conf/server.xml
......
<Connector port="8080" protocol="HTTP/11.1" 
connectionTimeout="20000" 
redirectPort="8443" 
--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"/>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/483756.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

外卖项目优化-02-

文章目录 瑞吉外卖项目优化-Day02课程内容前言1. MySQL主从复制1.1 介绍1.2 搭建1.2.1 准备工作1.2.2 主库配置1.2.3 从库配置 1.3 测试 2. 读写分离案例2.1 背景介绍2.2 ShardingJDBC介绍2.3 数据库环境2.4 初始工程导入2.5 读写分离配置2.6 测试 3. 项目实现读写分离3.1 数据…

深入解析PyTorch中的基本数据结构:张量的维度、形状和数据类型

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

【LEAP模型】能源环境发展、碳排放建模预测及不确定性分析

本次内容突出与实例结合&#xff0c;紧密结合国家能源统计制度及《省级温室气体排放编制指南》&#xff0c;深入浅出地介绍针对不同级别研究对象时如何根据数据结构、可获取性、研究目的&#xff0c;构建合适的能源生产、转换、消费、温室气体排放&#xff08;以碳排放为主&…

【Spring框架全系列】Spring更简单的读取和存储对象

&#x1f4ec;&#x1f4ec;哈喽&#xff0c;大家好&#xff0c;我是小浪。上篇博客我们介绍了如何创建一个spring项目&#xff0c;并且如何的存、取对象&#xff0c;介绍了相关方法&#xff0c;那么本篇博客将接着上篇博客的内容介绍如何更加简单的读取和存储对象。 &#x1f…

从源码角度看Linux进程组和线程组

1.进程ID 线程组ID&#xff1a; 设置了CLONE_THREAD flag创建的进程(线程&#xff09;同属于同一个线程组&#xff0c;拥有同一个线程组ID(TGID)。pthread_create创建线程的时候&#xff0c;底层通过clone函数实现就指定了CLONE_THREAD参数&#xff0c;即一个进程中的各个线程…

前端搭建猜数字游戏(内附源码)

The sand accumulates to form a pagoda ✨ 写在前面✨ 功能介绍✨ 页面搭建✨ 样式设置✨ 逻辑部分✨ 完整代码 ✨ 写在前面 上周我们实通过前端基础实现了打字通&#xff0c;当然很多伙伴再评论区提出了想法&#xff0c;后续我们会考虑实现的&#xff0c;今天还是继续按照我…

架构设计-数据库篇

大家好&#xff0c;我是易安&#xff01; 之前我们讲过架构设计的一些原则&#xff0c;和架构设计的方法论&#xff0c;今天我们谈谈高性能数据库集群的设计与应用。 读写分离原理 读写分离的基本原理是将数据库读写操作分散到不同的节点上&#xff0c;下面是其基本架构图。 读…

【ansys】project may be corrupted and recovery information is available

一、问题背景 在网上找一个fluent算例打算在自己机器上运行。 打开fluent求解器&#xff0c;因为路径上有中文&#xff0c;在求解计算的时候出错了。 于是我通过任务管理器强制退出fluent和workbench程序&#xff0c;再将项目文件复制到一个没有中文的目录路径中。 重新打开…

15-2-线程-线程的创建,等待,退出

一、相关API 1. 线程创建 1. 线程创建 #include <pthread.h> int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void *(*start_rtn)(void *), void *restrict arg);参数&#xff1a;参数1&#xff1a;&#xff08;创建的线程 的地址…

【JavaEE】TCP回写服务器简易翻译服务器(网络编程)

博主简介&#xff1a;想进大厂的打工人博主主页&#xff1a;xyk:所属专栏: JavaEE初阶 上一篇我们讲解了UDP回写服务器和简易翻译服务器&#xff0c;想了解本篇文章&#xff0c;建议先看看上篇文章&#xff0c;学起来会更容易一些~~传送门&#xff1a;(1条消息) 【JavaEE】UDP数…

创新案例|香氛新品牌观夏如何以DTC模式仅4年实现年收过亿

国产香氛品牌观夏的DTC战略&#xff0c;正是从产品创新、全渠道布局、社交电商营销等方面创新&#xff0c;实现更高效地直接触达和转化消费者。观夏作为香氛DTC品牌的创新模式值得更多国内新品牌的关注与借鉴&#xff0c;同时也能为传统品牌的DTC转型提供全球化视野的启示。 1.…

改进YOLOv8: | ICLR 2022 | 涨点神器!Intel提出ODConv:即插即用的动态卷积 | 轻量化涨点创新必备

OMNI-DIMENSIONAL DYNAMIC CONVOLUTION ODConv实验核心代码修改文件yaml文件运行论文链接: https://openreview.net/forum?id=DmpCfq6Mg39 本文介绍了一篇动态卷积的工作:ODConv,其通过并行策略采用多维注意力机制沿核空间的四个维度学习互补性注意力。作为一种“即插即用…

3。数据结构(1)

嵌入式软件开发第三部分&#xff0c;各类常用的数据结构及扩展&#xff0c;良好的数据结构选择是保证程序稳定运行的关键&#xff0c;&#xff08;1&#xff09;部分包括数组&#xff0c;链表&#xff0c;栈&#xff0c;队列。&#xff08;2&#xff09;部分包括树&#xff0c;…

使用rt thread studio新建一个rt thread工程的详细操作说明(以stm32F411CEU6)为例

新建工程 这里以rt thread 5.0以及stm32F411CEU6芯片为例&#xff0c;创建工程 先建一个工作空间 .metadata是建工作空间自己生成的。 这时候&#xff0c;工作空间是空的&#xff0c;没有项目: 新建项目 首先下载RT-thread源文件和芯片支持包&#xff1a; 2023.05.02&#x…

NOIP2000 提高组 方格取数 线性DP 坐标优化 全局最优

&#x1f351; 算法题解专栏 &#x1f351; [NOIP2000 提高组] 方格取数 题目描述 设有 N N N \times N NN 的方格图 ( N ≤ 9 ) (N \le 9) (N≤9)&#xff0c;我们将其中的某些方格中填入正整数&#xff0c;而其他的方格中则放入数字 0 0 0。如下图所示&#xff08;见样…

延时队列的三种实现方案

延时队列的三种实现方案 什么是延时队列延时队列的应用场景基于Java DelayQueue的实现源码剖析 基于Redis的zset实现实现步骤Redis延时队列优势Redis延时队列劣势 基于RabbitMQ的延时队列实现TTL DXL(死信队列)插件实现 总结参考文章 什么是延时队列 在分布式系统中&#xff…

Go(二):包管理、通道、协程并发、互斥锁基础

包管理、协程并发基础 生成包管理文件go-mod第一步&#xff08;初始化创建包管理文件&#xff09;第二步&#xff08;导入包&#xff09; 常用命令导入远程包&#xff08;示例&#xff1a;gin&#xff09;第一步&#xff08;导入包&#xff09;第二步&#xff08;安装包&#x…

操作系统之进程同异步、互斥

引入 异步性是指&#xff0c;各并发执行的进程以各自独立的、不可预知的速度向前推进。 但是在一定的条件之下&#xff0c;需要进程按照一定的顺序去执行相关进程&#xff1a; 举例说明1&#xff1a; 举例说明2: 读进程和写进程并发地运行&#xff0c;由于并发必然导致异步性…

【Python】如何在Python中绘制带有连接线的双饼图?

文章目录 一、导入所需的库二、准备数据三、绘制双饼图3.1 创建画布和子图对象3.2 绘制大饼图3.3 绘制小饼图3.4 连接线1&#xff0c;连接大饼图的上边缘和小饼图的饼块3.5 连接线2&#xff0c;连接大饼图的下边缘和小饼图的饼块3.6 添加连接线3.7 调整子图布局 四、源代码 在 …

Linux 内核组织(kernel.org)将关闭 FTP 服务

Linux 内核组织&#xff08;kernel.org&#xff09;是一家建立于 2002 年的加利福尼亚公共福利公司&#xff0c;其目的是公开地免费分发 Linux 内核和其它开源软件。它接受 Linux 基金会的管理&#xff0c;包括技术、资金和人员支持&#xff0c;用以维护kernel.org 的运营。 Li…