Tomcat 部署优化

Tomcat

Tomcat 开放源代码web应用服务器,是由java代码开发的
tomcat就是处理动态请求和基于java代码的页面开发
可以在html当中写入java代码,tomcat可以解析html页面当中的iava,执行动态请求
动态页面机制有问题:不对tomcat进行优化,会出现在: 假死、停机
小集群,小服务,小应用使用于tomcat;大并发的场景不适合
 

1、免费
2、开源,可以二次封装。
3、可配置型强:可以根据需要进行自定义配置,包括端口号,虚拟主机,等等
4、安全性: tomcat自带安全机制,可以配置用户认证、授权、加密传输
5、部署应用非常快捷:Tomcat会自动部署自动运行

Tomcat 核心组件

web容器

完成web服务器的功能,web应用

工作方式:  web→http或https→访问页面→指向到文件index.jsp

servlet容器

名称(catalina)用于处理servlet代码,就是处理web请求(http),以及生成动态内容的Java类,处理http请求
 

功能:

  • 处理http请求 
  • 生成动态内容,是为了和用户发起的,jsp当中的数据库进行交互   
  • 会话管理:跟踪用户在不同请求之间的状态,通过管理可以在用户访问不同页面时保持用户的状
  • 与数据库进行交互,servlet可以连接到数据库,执行查询和更新操作

 

jsp容器

jsp动态页面,翻译成servlet代码,用标准格式展示jsp的静态页面

  • java server pages  动态页面的开发技术,使用jsp标签(index.jsp)
  • 在html页面中插入java代码
  • java容器→html页面中的java代码翻译→执行→展示结果

 

Tomcat 功能组件 

Connector

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

Container

负责对内处理业务逻辑。其内部由 Engine、Host、Context和Wrapper 四个容器组成,
用于管理和调用 Servlet 相关逻辑;其下还有四个小组件及其功能:

Engine

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

Host

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

Context

代表一个 Web 应用,包含多个 Servlet 封装器

Wrapper

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

总结

这四个组件的工作方式也是从上到下的,这四个容器之间属于父子关系的工作顺序;Tomcat 的核心功能有两个,分别是负责接收和反馈外部请求的连接器 Connector,和负责处理请求的容器 Container;其中连接器和容器相辅相成,一起构成了基本的 web 服务 Service;每个 Tomcat 服务器可以管理多个 Service
 

工作流程

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

 

Tomcat 配置文件

bin:存放Tomcat的启动或关闭脚本文件

conf:主配置文件,其中包含几个重要文件

  • server.xml:主配置文件
  • contex.html:host的默认配置信息
  • tomcat - usr.xml:认证用户密码的配置文件
  • web.xml:配置servlet以及其标准的文件

lib:运行库的jar包(一般不动)

logs:日志文件

webapps:web应用默认部署目录

work:Tomcat的工作目录,存放jsp编译后的class文件,用于清楚Tomcat缓存、我wrok目录

 

JVM 

JVM就是java的虚拟机,是java应用程序在计算上运行的核心组件,jvm负载将编译后的iava字节码

(.class文件)解释或者编译成本地的机器码,计算机能够执行它。JVM还提供好了内存管理,垃圾

回收,线程管理;确保java程序在不同平台可以有一致性的功能。
 

JVM 优化配置

首先安装 Java编程包、Tomcat

 设置JDK环境变量

 

设置用户密码 登录manager

 允许所有用户可访问

 

 

堆内存  非堆内存

PS Eden Space:堆内存:存储新创建的对象。
Psold Gen:堆内存,存储长时间存活的对象
Ps Survivor Space: 堆内存: 存在创建之后,生命周期较短的对象
Code Cache:非堆内存: 存储已经编译的代码
CompressedClass Space: 非堆内存,存储已经压缩的类
Catalina.sh 就是servlet代码,容器的配置

ajp-nio-8009

ajp-nio:连接器类型

ajp:使用的是ajp的协议;将tomcat服务器与前端web服务器进行连接。提供负载均衡和高效的请求转发

nio:进行异步阻塞

8009:连接器正在监听的端口。connect

http-nio-8080

处理http请求和客户端通信的端口

JVM 优化配置

 增加内存

其中配置命令的解释:

AVA OPTS="$/AVA OPTS -server -Xms2048m -Xmx2048m -Xmn768m -xx:ParallelGCThreads=2 -Xx:PermSize=1024m.XX:MaxPermSize=1024m -Djava.awt.headless=true -XX:+DisableExplicitGC"

-server:第一个参数,指定内存池,一定放在第一个。
-Xms2048m:初始java堆的大小,分配JVM的最小内存看cpu性能高,这个值可以设高一点
-Xmx2048m:JAVA堆最大能多大,jvm的最大内存。和硬件内存挂钩。根据官方文档,起始值和最大值保持一致。XMS和XMX设为一样的,内存可以设为物理内存的一般。
-Xmn768m :新生代的内存大小。官方推荐为了整个堆大小的3/8.
-XX:ParallelGCThreads=2: 配置并行收集器的线程数,同时可以有多少个线程进行垃圾回收
-XX:PermSize:设置持久代内存的大小,默认是物理内存的1/4。
-XX:MaxPermSize=1024m :最大的非堆内存的大小,默认也是物理内存的1/4;
-XX:PermSize=1024m -XX:MaxPermSize=1024m
非堆内存是不会被垃圾回收机制处理的,-XX:PermSize持久代内存与最大非堆内存不能超出操作系统可用的内存。设置成一样大,可以减轻伸缩堆大小的压力。
-Djava.awt.headless=true:避免在linux环境下,web不能正常打开以正常显示图片。
-XX:+DisableExplicitGC" :避免jvm空间大起大落,影响系统的响应时间,响应速度会很慢

堆区

堆区当中分为:新生代、中生代、老年代、永久代

  • 新生代:是每一个新建对象占用的空间
  • 中生代:Java垃圾回收机制对堆区资源回收,新生代未被回收的资源就是中生代
  • 老年代: 则是中生代未被回收的资源

JVM大小:新生代+中生代+老年代+永久代

 

Tomcat 虚拟主机配置

一台服务器上在一个tomcat中会部署多个虚拟机服务器,为了减少系统的资源消耗

 

命令解析:

<Host  name="www.kgc.com" appBase="webapps” unpackWARs="true" autoDeploy="true" xmlValidation="false" xmINamespaceAware="false">

            <Context docBase="/usr/local/tomcat/webapps/kgc" path=""  reloadable="true" />

</Host> 

<Host  name="www.benet.com" appBase="webapps” unpackWARs="true" autoDeploy="true" xmlValidation="false" xmINamespaceAware="false">

            <Context docBase="/usr/local/tomcat/webapps/benet" path=""  reloadable="true" />

</Host>

hostname:主机名
appBase:存放web程序的目录
unpackWARs:优先对war文件进行展开,默认就是true.
autoDeploy:只要tomcat处于运行,会对webapps中的文件进行自动部署。默认也是true
xmIValidation:是否验证xml文件的有效性。默认就是false
xmINamespaceAware:是否验证命名空间
<Context docBase="/usr/local/tomcat/webapps/kgc:
www.kgc.com 就是访问 /usr/local/tomcat/webapps/kgc/index.jsp

 

Tomcat 优化

Tomcat默认安装下的缺省配置并不适合生产环境,它可能会频繁出现假死现象需要重启

只有通过不断压测优化才能让它最高效率稳定的运行

优化主要包括三方面,分别为操作系统优化(内核参数优化),Tomcat配置文件参数优化,Java虚拟机 (JVM) 调优

启动速度的优化:

修改JDK参数 

[root@gsn5 bin]# vim /usr/java/jdk1.8.0 201-amd64/jre/lib/security/java.security
 
117 securerandom.source=file:/dev/urandom
# urandom 表示异步非阻塞

 server.xml 对主配置文件的优化

redirectPort:如果某连接器支持的协议的是http,当接受客户端发来的请求时,就会启用此端口 —— 8443
maxthreads:Tomcat使用线程来处理请求的,可以创建的最大线程数也就是并发连接数;默认200
minsparethreads:最小空闲线程数,开启tomcat时会有多少线程。默认是10
maxsparethreads:最大备用线程。一旦创建的线程超过这个值,tomcat会关闭不再需要的端口线程。默认是-1,也就是不限制。一般不指定
URIEncoding:URL的格式编码,默认utf-8。需要分别指定,所以一般也不动
connnectionTimeout:网络连接超时,单位: 毫秒。为0,永不超时,一般为20000毫秒。
enablelookups:是否反向解析域名,为了能够获取远程的主机名。一般设置为false,直接返回IP地址。提高了处理能力。
disableUploadTimeout:上传超时时间,设置为true.
connectionUploadTimeout:因人而异,没有标准答案,1分钟,30秒
acceptCount:所有可以使用的线程都被占用了,可以传入连接请求的最大队列长度。默认100个。101个超出范围,直接丢弃,不再处理。
compression:是否开启页面和响应数据的压缩。0ff 关 n开 force(所有的情况下都进行乐缩。)默认是of 建议on
compressionMinSize:压缩响应的最小值,等于或者小于这个值,就不再压缩了。2048
compressableMimeType:可以被压缩MIME的类型;浏览器和其他互联网应用程序之间处理文件的协议和需要处理的文档的性质和格式

文本: text/html、text/plain
图像: image/jpgimage/gif
音频: audio/wav audio/mp3
视频: video/mp4  video/avi
应用程序: application/pdf  application/json
  

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

仿牛客论坛项目day7|Kafka

一、阻塞队列 创建了一个生产者线程和一个消费者线程。生产者线程向队列中放入元素&#xff0c;消费者线程从队列中取出元素。我们可以看到&#xff0c;当队列为空时&#xff0c;消费者线程会被阻塞&#xff0c;直到生产者线程向队列中放入新的元素。 二、Kafka入门 发布、订阅…

mysql数据库迁移

目录 背景迁移数据库 背景 公司有个项目&#xff0c;刚开始数据量不是大的时候&#xff0c;数据库和服务上的所有应用数据都放在一个旧小盘中&#xff0c;随着项目数据的增长&#xff0c;旧的磁盘被占满了&#xff0c;导致系统无法写入数据&#xff0c;我和同事排查了很长时间…

阿里云云主机_ECS云服务器_轻量_GPU_虚拟主机详解

阿里云云主机分为云虚拟主机、云服务器ECS、轻量应用服务器、GPU云服务器、弹性裸金属服务器、专有宿主机、FPGA云服务器、高性能计算E-HPC、无影云电脑等&#xff0c;阿里云百科来详细说下阿里云云主机详解&#xff1a; 目录 阿里云云主机 云服务器ECS 轻量应用服务器 云…

C++ 面向对象三大特性——多态

✅<1>主页&#xff1a;我的代码爱吃辣 &#x1f4c3;<2>知识讲解&#xff1a;C 继承 ☂️<3>开发环境&#xff1a;Visual Studio 2022 &#x1f4ac;<4>前言&#xff1a;面向对象三大特性的&#xff0c;封装&#xff0c;继承&#xff0c;多态&#xff…

红帽8.2版本CSA题库:第十一题查找文件

红帽8.2版本CSA题库&#xff1a;第十一题查找文件 touch /tmp/{gamelan,jacques,libWedgeit.so.1.2.3} chown jacques:jacques /tmp/{gamelan,jacques,libWedgeit.so.1.2.3}mkdir /root/findfiles #创建文件夹 find / -user jacques -exec cp -a {} /root/findfiles \; …

Centos7安装Docker及配置加速器地址

一、安装docker #1.yum 包更新到最新 yum update #2.安装需要的软件包&#xff0c;yum-util 提供yum-config-manager功能&#xff0c;另外两个是devicemapper驱动依赖的 yum install -y yum-utils device-mapper-persistent-data lvm2 #3.设置yum源 yum-config-manager --add…

Leetcode每日一题:1444. 切披萨的方案数(2023.8.17 C++)

目录 1444. 切披萨的方案数 题目描述&#xff1a; 实现代码与解析&#xff1a; 二维后缀和 动态规划 原理思路&#xff1a; 1444. 切披萨的方案数 题目描述&#xff1a; 给你一个 rows x cols 大小的矩形披萨和一个整数 k &#xff0c;矩形包含两种字符&#xff1a; A …

BC136 KiKi去重整数并排序

给定一个整数序列&#xff0c;KiKi想把其中的重复的整数去掉&#xff0c;并将去重后的序列从小到大排序输出。 输入描述 第一行&#xff0c;输入一个整数n&#xff0c;表示序列有n个整数。 第二行输入n个整数&#xff08;每个整数大于等于1&#xff0c;小于等于1000&#xf…

【日常积累】Linux之init系统学习

init系统简介: Linux 操作系统的启动首先从 BIOS 开始&#xff0c;接下来进入 boot loader&#xff0c;由 bootloader 载入内核&#xff0c;进行内核初始化。内核初始化的最后一步就是启动 pid 为 1 的 init 进程&#xff0c;这个进程是系统的第一个进程&#xff0c;它负责产生…

企望制造ERP系统 RCE漏洞复现

0x01 产品简介 企望制造纸箱业erp系统由深知纸箱行业特点和业务流程的多位IT专家打造&#xff0c;具有国际先进的管理方式&#xff0c;将现代化的管理方式融入erp软件中&#xff0c;让企业分分钟就拥有科学的管理经验。 erp的功能包括成本核算、报价定价、订单下达、生产下单、…

编程语言学习笔记-架构师和工程师的区别,PHP架构师之路

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌&#xff0c;CSDN博客专家&#xff0c;阿里云社区专家博主&#xff0c;2023年6月CSDN上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责…

Unity游戏源码分享-中国象棋Unity5.6版本

Unity游戏源码分享-中国象棋Unity5.6版本 项目地址&#xff1a; https://download.csdn.net/download/Highning0007/88215699

TCP拥塞控制简单理解

1.TCP的控制机制 序号 TCP通过序号可以实现一下几个功能&#xff1a; 1.确认应答处理。发送端收到接收端的确认应答&#xff0c;可以得知某些数据包被接收端接收了 2.顺序控制。接收端可以利用序号对接收到的报文进行排序 3.重发控制。如果发送端没有收到确认应答&#xff0c…

vue项目引入antDesignUI组件

快速安装ant-design-vue并配置&#xff0c;vue2.0 antDesign1.7.8 第一步&#xff1a;安装ant-deisgn-vue 1.7.8 npm install ant-design-vue1.7.8 --save第二步&#xff1a;配置package.json文件&#xff0c;将依赖写入后&#xff0c;npm install 安装依赖 "dependenc…

智慧建筑工地平台,通过信息化技术、物联网、人工智能技术,实现对施工全过程的实时监控、数据分析、智能管理和优化调控

智慧工地是指通过信息化技术、物联网、人工智能技术等手段&#xff0c;对建筑工地进行数字化、智能化、网络化升级&#xff0c;实现对施工全过程的实时监控、数据分析、智能管理和优化调控。智慧工地的建设可以提高工地的安全性、效率性和质量&#xff0c;降低施工成本&#xf…

Maven官网下载配置新仓库

1.Maven的下载 Maven的官网地址&#xff1a;Maven – Download Apache Maven 点击Download&#xff0c;查找 Files下的版本并下载如下图&#xff1a; 2.Maven的配置 自己在D盘或者E盘创建一个文件夹&#xff0c;作为本地仓库&#xff0c;存放项目依赖。 将下载好的zip文件进行解…

react 生命周期方法

组件的生命周期 每个组件都包含 “生命周期方法”&#xff0c;你可以重写这些方法&#xff0c;以便于在运行过程中特定的阶段执行这些方法。你可以使用此生命周期图谱作为速查表。在下述列表中&#xff0c;常用的生命周期方法会被加粗。其余生命周期函数的使用则相对罕见。 挂…

LLM - 大模型评估指标之 BLEU

目录 一.引言 二.BLEU 简介 1.Simple BLEU 2.Modified BLEU 3.Modified n-gram precision 4.Sentence brevity penalty 三.BLEU 计算 1.计算句子与单个 reference 2.计算句子与多个 reference 四.总结 一.引言 机器翻译的人工评价广泛而昂贵&#xff0c;且人工评估可…

Spark第三课

1.分区规则 1.分区规则 shuffle 1.打乱顺序 2.重新组合 1.分区的规则 默认与MapReduce的规则一致,都是按照哈希值取余进行分配. 一个分区可以多个组,一个组的数据必须一个分区 2. 分组的分区导致数据倾斜怎么解决? 扩容 让分区变多修改分区规则 3.HashMap扩容为什么必须…

Jetpack Compose:探索声明式UI开发的未来

Jetpack Compose&#xff1a;探索声明式UI开发的未来 1. 引言 在移动应用开发领域&#xff0c;用户界面&#xff08;UI&#xff09;开发一直是开发过程中的关键挑战之一。传统的UI开发方式往往涉及大量繁琐的布局代码、手动管理状态和事件处理&#xff0c;不仅容易引发错误&a…