当前位置: 首页 > news >正文

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
 

相关文章:

Tomcat 部署优化

Tomcat Tomcat 开放源代码web应用服务器&#xff0c;是由java代码开发的 tomcat就是处理动态请求和基于java代码的页面开发 可以在html当中写入java代码&#xff0c;tomcat可以解析html页面当中的iava&#xff0c;执行动态请求 动态页面机制有问题&#xff1a;不对tomcat进行优…...

Django框架-使用celery(一):django使用celery的通用配置,不受版本影响

目录 一、依赖包情况 二、项目目录结构 2.1、怎么将django的应用创建到apps包 三、celery的配置 2.1、celery_task/celery.py 2.2、celery_task/async_task.py 2.3、celery_task/scheduler_task.py 2.4、utils/check_task.py 四、apps/user中配置相关处理视图 4.1、基本…...

nvue语法与vue的部分区别

文章目录 1、仅支持flex布局2、字体样式3、高度问题 1、仅支持flex布局 仅支持flex布局。而且默认的是 flex-direction: column; 2、字体样式 字体的样式&#xff0c;必须要写在 text 标签内&#xff0c;才能生效 错误示例&#xff1a; <!-- 错误示例 --> <div cl…...

Java 开发工具 IntelliJ IDEA

1. IntelliJ IDEA 简介 IntelliJ IDEA 是一款出色的 Java 集成开发环境&#xff08;IDE&#xff09;&#xff0c;提供了丰富的功能和工具&#xff0c;支持多种语言和框架的开发&#xff0c;如 Java、Kotlin、Scala、 Android、Spring、Hibernate 等。IntelliJ IDEA 专注于提高…...

将vsCode 打开的多个文件分行(栏)排列,实现全部显示,便于切换文件

目录 1. 前言 2. 设置VsCode 多文件分行(栏)排列显示 1. 前言 主流编程IDE几乎都有排列切换选择所要查看的文件功能&#xff0c;如下为Visual Studio 2022的该功能界面&#xff1a; 图 1 图 2 当在Visual Studio 2022打开很多文件时&#xff0c;可以按照图1、图2所示找到自…...

java中的同步工具类CountDownLatch

这篇文章主要讲解java中一个比较常用的同步工具类CountDownLatch&#xff0c;不管是在工作还是面试中都比较常见。我们将通过案例来进行讲解分析。 一、定义 CountDownLatch的作用很简单&#xff0c;就是一个或者一组线程在开始执行操作之前&#xff0c;必须要等到其他线程执…...

路由器和交换机的区别

交换机和路由器的区别 交换机实现局域网内点对点通信&#xff0c;路由器实现收集发散&#xff0c;相当于一个猎头实现的中介的功能 路由器属于网络层&#xff0c;可以处理TCP/IP协议&#xff0c;通过IP地址寻址&#xff1b;交换机属于中继层&#xff0c;通过MAC地址寻址(列表)…...

FreeRTOS(动态内存管理)

资料来源于硬件家园&#xff1a;资料汇总 - FreeRTOS实时操作系统课程(多任务管理) 目录 一、动态内存管理介绍 1、heap_1 2、heap_2 3、heap_3 4、heap_4 5、heap_5 二、动态内存总结与应用 1、heap_1 2、heap_4 3、heap_5 三、内存管理编程测试 1、heap_4 2、h…...

IntelliJ IDEA(简称Idea) 基本常用设置及Maven部署---详细介绍

一&#xff0c;Idea是什么&#xff1f; 前言&#xff1a; 众所周知&#xff0c;现在有许多编译工具&#xff0c;如eclipse&#xff0c;pathon, 今天所要学的Idea编译工具 Idea是JetBrains公司开发的一款强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;主要用于Java…...

【LeetCode每日一题】——128.最长连续序列

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时间频度】九【代码实现】十【提交结果】 一【题目类别】 哈希表 二【题目难度】 中等 三【题目编号】 128.最长连续序列 四【题目描述】 给定一个未…...

Redis_缓存1_缓存类型

14.redis缓存 14.1简介 穿透型缓存&#xff1a; 缓存与后端数据交互在一起&#xff0c;对服务端的调用隐藏细节。如果从缓存中可以读到数据&#xff0c;就直接返回&#xff0c;如果读不到&#xff0c;就到数据库中去读取&#xff0c;从数据库中读到数据&#xff0c;也是先更…...

模拟 枚举

分享牛客算法基础精选题单题目打卡!!! 目录 字符串的展开 多项式输出 机器翻译 : 铺地毯 : [NOIP2016]回文日期 字符串的展开 原题链接 : 字符串的展开 思路 : 模拟 代码 : #include<iostream> #include<cstring> #include<algorithm> using na…...

【实操】2023年npm组件库的创建发布流程

2022年的实践为基础&#xff0c;2023年我再建一个组件库【ZUI】。步骤回顾&#xff1a; 2022年的npm组件包的发布删除教程_npm i ant-design/pro-components 怎么删除_啥咕啦呛的博客-CSDN博客 1.在gitee上创建一个项目,相信你是会的 2.创建初始化项目&#xff0c;看吧&#…...

缓存设计的典型方案

缓存设计的典型方案 在使用缓存系统的时候&#xff0c;还需要考虑缓存设计的问题&#xff0c;重点在于缓存失效时的处理和如何更新缓存。 缓存失效是在使用缓存时不得不面对的问题。在业务开发中&#xff0c;缓存失效时由于找不到整个数据&#xff0c;一般会出于容错考虑&#…...

SQL笔记

最近的工作对SQL的应用程度较高&#xff0c;而且写的sql类型基本没怎么涉及过&#xff0c;把用到的几个关键字记录下。 使用环境&#xff1a;达梦数据库 达梦数据库有个特点&#xff0c;他有一个叫模式的说法&#xff0c;在图形化工具里直接点击创建查询窗口&#xff0c;不用像…...

UHPC的疲劳计算——兼论ModelCode2010的适用性

文章目录 0. 背景1、结论及概述2、MC10对于SN曲线的调整&#xff08;囊括NC、HPC、UHPC&#xff09;2.1 疲劳失效曲面的构建2.2 新模型的验证 3、MC10对于疲劳设计强度的调整及其背后的原因4. 结语 0. 背景 今年年初&#xff0c;有一位用UHPC做混凝土塔筒的同行告诉我&#xf…...

关于elementui的input的autocomplete的使用

项目中需要实现搜索框搜索时能自动提示可选项的功能&#xff0c;elementui的input组件有已经封装好的el-autocomplete可以使用&#xff0c;但是在使用中发现一些问题&#xff0c;记录一下 基础使用 // html部分 <el-autocompletev-model"name":fetch-suggestion…...

即然利用反射机制可以破坏单例模式,有什么方法避免呢?

私有构造方法中添加防止多次实例化的逻辑&#xff1a;在单例类的私有构造方法中&#xff0c;可以添加逻辑来检查是否已经存在实例&#xff0c;如果存在则抛出异常或返回已有的实例。这样即使通过反射创建了新的实例&#xff0c;也能在构造方法中进行拦截。 使用枚举实现单例&a…...

【IDEA问题】下载不了源代码

引出问题 最近不知道怎么打开 IDEA&#xff0c;本想查看源代码&#xff0c;然后点击下载源码&#xff0c;总是报找不到此对象的源代码。百度找了半天&#xff0c;GPT问了半天还是解决不了&#xff0c;直到遇到了这篇&#xff1a;idea中无法下载源码问题解决&#xff0c;终于得…...

代码随想录第四十八天

代码随想录第四十八天 Leetcode 198. 打家劫舍ILeetcode 213. 打家劫舍 IILeetcode 337. 打家劫舍 III Leetcode 198. 打家劫舍I 题目链接: 打家劫舍I 自己的思路:想不太出来递推公式&#xff01;&#xff01;&#xff01;&#xff01; 正确思路:这个题主要是看是否偷第下标为…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

【JVM】- 内存结构

引言 JVM&#xff1a;Java Virtual Machine 定义&#xff1a;Java虚拟机&#xff0c;Java二进制字节码的运行环境好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收的功能数组下标越界检查&#xff08;会抛异常&#xff0c;不会覆盖到其他代码…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...

华为OD机考-机房布局

import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...

GO协程(Goroutine)问题总结

在使用Go语言来编写代码时&#xff0c;遇到的一些问题总结一下 [参考文档]&#xff1a;https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现&#xff1a; 今天在看到这个教程的时候&#xff0c;在自己的电…...