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的环境变量

 成功访问Tomcat !

设置用户密码 登录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.security117 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
 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Sentinel使用实例

不说了&#xff0c;直接上官方文档 https://github.com/alibaba/spring-cloud-alibaba/blob/master/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/readme-zh.md Sentinel Example 项目说明 本项目演示如何使用 Sentinel starter 完成 Spring Clo…

vuejs 设计与实现 - 快速diff算法

Vue.js 2 所采用的双端 Diff 算法。既然快速 Diff 算法如此高效&#xff0c;我们有必要了解它的思路。接下来&#xff0c;我们就着重讨论快速 Diff 算法的实现原理。 相同的前置元素和后置元素 快速 Diff 算法借鉴了纯文本 Diff 算法中预处理的步骤。 案例&#xff1a; 旧的…

学习助手(安卓)

首先&#xff0c;这是一款人工智能的学习软件&#xff0c;功能非常的强大&#xff0c;进入软件就能看见多种功能&#xff0c;它可以根据大家提供的主题&#xff0c;环境&#xff0c;文体&#xff0c;语言等要求进行写作&#xff0c;还有诗歌创作&#xff0c;也可以帮我们进行内…

Unity3D高级编程:主程手记学习1

第一章 软件架构 Untiy 分层设计 分层后再分治

深度学习笔记(kaggle课程《Intro to Deep Learning》)

一、什么是深度学习&#xff1f; 深度学习是一种机器学习方法&#xff0c;通过构建和训练深层神经网络来处理和理解数据。它模仿人脑神经系统的工作方式&#xff0c;通过多层次的神经网络结构来学习和提取数据的特征。深度学习在图像识别、语音识别、自然语言处理等领域取得了…

[PyTorch][chapter 49][创建自己的数据集 1]

前言&#xff1a; 后面几章主要利用DataSet 创建自己的数据集&#xff0c;实现建模&#xff0c; 训练&#xff0c;迁移等功能。 目录: pokemon 数据集深度学习工程步骤 一 pokemon 数据集介绍 1.1 pokemon: 数据集地址&#xff1a; 百度网盘路径: https://pan.baidu.com/s/1…

【EI/SCOPUS检索】第三届计算机视觉、应用与算法国际学术会议(CVAA 2023)

第三届计算机视觉、应用与算法国际学术会议&#xff08;CVAA 2023) The 3rd International Conference on Computer Vision, Application and Algorithm 2023年第三届计算机视觉、应用与算法国际学术会议&#xff08;CVAA 2023&#xff09;主要围绕计算机视觉、计算机应用、计…

[PyTorch][chapter 50][创建自己的数据集 2]

前言&#xff1a; 这里主要针对图像数据进行预处理.定义了一个 class Pokemon(Dataset) 类&#xff0c;实现 图像数据集加载,划分的基本方法. 目录&#xff1a; 整体框架 __init__ load_images save_csv divide_data __len__ denormalize __g…

数据结构——堆

数据结构——堆 堆堆简介堆的分类 二叉堆过程插入操作 删除操作向下调整&#xff1a; 增加某个点的权值实现参考代码&#xff1a;建堆方法一&#xff1a;使用 decreasekey&#xff08;即&#xff0c;向上调整&#xff09;方法二&#xff1a;使用向下调整 应用对顶堆 其他&#…

dirsearch_暴力扫描网页结构

python3 dirsearch 暴力扫描网页结构&#xff08;包括网页中的目录和文件&#xff09; 下载地址&#xff1a;https://gitee.com/xiaozhu2022/dirsearch/repository/archive/master.zip 下载解压后&#xff0c;在dirsearch.py文件窗口&#xff0c;打开终端&#xff08;任务栏…

深入理解索引B+树的基本原理

目录 1. 引言 2. 为什么要使用索引&#xff1f; 3. 索引的概述 4. 索引的优点是什么&#xff1f; 4.1 降低数据库的IO成本&#xff0c;提高数据查找效率 4.2 保证数据库每一行数据的唯一性 4.3 加速表与表之间的连接 4.4 减少查询中分组与排序的执行时间 5. 索引的缺点…

[足式机器人]Part3机构运动微分几何学分析与综合Ch03-1 空间约束曲线与约束曲面微分几何学——【读书笔记】

本文仅供学习使用 本文参考&#xff1a; 《机构运动微分几何学分析与综合》-王德伦、汪伟 《微分几何》吴大任 Ch01-4 平面运动微分几何学 3.1 空间曲线微分几何学概述3.1.1 矢量表示3.1.2 Frenet标架 连杆机构中的连杆与连架杆构成运动副&#xff0c;该运动副元素的特征点或特…

【Stable Diffusion】雨天、湿身

一、Models 1.1、Wet Clothes (Clothing Style) [LoHA] WECL SEE-THROUGH WET WET HAIR BIKINI OR SWIMSUIT UNDER CLOTHES NO BRA BRA VISIBLE THROUGH CLOTHES MISC SHIRTS MISC CLOTHES1.2、Rain 雨 Multiply Style rain style1.3、Wet T-Shirt LORA <lora:wetshirt:…

5.1 web浏览安全

数据参考&#xff1a;CISP官方 目录 Web应用基础浏览器所面临的安全威胁养成良好的Web浏览安全意识如何安全使用浏览器 一、Web应用基础 1、Web应用的基本概念 Web ( World wide Web) 也称为万维网 脱离单机Web应用在互联网上占据了及其重要的地位Web应用的发展&#xf…

最新Kali Linux安装教程:从零开始打造网络安全之旅

Kali Linux&#xff0c;全称为Kali Linux Distribution&#xff0c;是一个操作系统(2013-03-13诞生)&#xff0c;是一款基于Debian的Linux发行版&#xff0c;基于包含了约600个安全工具&#xff0c;省去了繁琐的安装、编译、配置、更新步骤&#xff0c;为所有工具运行提供了一个…

计算机竞赛 python 机器视觉 车牌识别 - opencv 深度学习 机器学习

1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于python 机器视觉 的车牌识别系统 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;3分 &#x1f9ff; 更多资…

【量化课程】02_4.数理统计的基本概念

2.4_数理统计的基本概念 数理统计思维导图 更多详细内容见notebook 1.基本概念 总体&#xff1a;研究对象的全体&#xff0c;它是一个随机变量&#xff0c;用 X X X表示。 个体&#xff1a;组成总体的每个基本元素。 简单随机样本&#xff1a;来自总体 X X X的 n n n个相互…

梯度下降介绍

什么是梯度 梯度是微积分中一个很重要的概念&#xff0c;在单变量的函数中&#xff0c;梯度其实就是函数的微分&#xff0c;代表着函数在某个给定点的切线的斜率&#xff1b;在多变量函数中&#xff0c;梯度是一个向量&#xff0c;向量有方向&#xff0c;梯度的方向就指出了函…

809协议nodejs编写笔记(还在更新)

一、总体流程 数据首先通过receiver接受层接收&#xff0c;去掉标识头和标识尾&#xff1b;再进入depacker解包层进行解包&#xff0c;把标识头分解出来并解析&#xff1b;之后发给handler处理层根据不同的消息id选择使用不同的业务逻辑&#xff1b;如果有应答&#xff0c;则通…

陪诊小程序开发|陪诊陪护小程序让看病不再难

陪诊小程序通过与医疗机构的合作&#xff0c;整合了医疗资源&#xff0c;让用户能够更加方便地获得专业医疗服务。用户不再需要面对繁琐的挂号排队&#xff0c;只需通过小程序预约服务&#xff0c;便能够享受到合适的医疗资源。这使得用户的就医过程变得简单高效&#xff0c;并…