tomcat优化

目录

tomcat

tomcat优点

tomcat核心组件

Web容器

其他

功能组件

connector

container

tomcat处理请求过程

目录文件内容

内存池

堆区

JVM优化

ajp-nio-8009

启动速度优化

配置文件优化


tomcat

tomcat是基于Java代码开发的开放源代码的web应用服务器

tomcat就是处理动态请求和基于Java代码的页面开发,可以在html当中写入Java代码,tomcat可以解析html页面中的Java执行动态请求、动态页面

tomcat的机制有问题,不对tomcat进行优化会出现一些bug,如假死、停机。小集群、小服务、小应用使用tomcat,大并发场景不适合

tomcat优点

1.免费

2.开源,可以二次封装

3.可配置性强,可以根据需要进行自定义配置,包括端口号、虚拟主机等

4.tomcat自带安全机制,可以配置用户认证、授权、加密传输

5.部署应用非常快捷,tomcat会自动部署、自动运行

tomcat核心组件

Web容器

完成文本服务器的功能,是一个web应用

web---->http(s)---->访问页面---->文件index.jsp

web容器中,封装了一组文件,在这一组文件之中进行集中化管理

管理web动态页面

Servlet容器

名字为catalina,处理servlet代码,处理web请求(http),生成动态内容的Java类。

1、处理http请求

2、生产动态内容,为了和数据库交互---->用户发起的;jsp当中的

3、会话管理,跟用户在不同请求之间的状态,通过管理可以在用户访问不同页面时保持用户的状态

4.与数据库交互,servlet可以连接到数据库执行查询和更新操作。这就是servlet能够生成动态内容的原因

JSP容器

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

写好一个包之后丢进/usr/local/tomcat/webapps中

jsp jiava server pages 动态页面的开发技术。使用jsp标签,在html页面中插入Java代码

jsp容器---->将html页面中的Java代码翻译---->执行并展示结果

jsp标签通常以<%开头,以%>结尾

其他

面向对象:客观存在的实体和他们之间的关系,映射到计算机程序当中计算机程序被组织成这一组相互作用的对象,每个对象都有数据(属性)和行为(方法)。

类:定义一组属性和方法,创建对象、实例。

封装:对象的属性和方法捆绑在一块,提供一个接口,可以让其他对象使用。

继承:一个类,可以继承另一个类 父类 子类 子类可以重用父类的代码,而且还在不修改代码的情况下,进行扩展

多态:不同类的对象对相同的消息,做出不同的响应。

功能组件

connector

负责对外接收和响应请求,是tomcat与外界的交通枢纽,即负责监听端口,也复杂接受外界请求交给container处理

container

负责对内处理业务逻辑

Engine 引擎,管理虚拟机(service,一个service可以包含多个虚拟主机),可以管理多个虚拟主机,一个个service中只能有一个Engine

Host 代表一个虚拟机,也可以叫站点

Context web应用,可以包含多个servlet

wrapper 封装器,最底层,每一个wrapper中都封装一个servlet,负责对象实例的创建、执行、销毁

tomcat处理请求过程

1.输入网址,请求发送到8080端口,被监听获得

2.connector会把请求转发到container处理,由engine查询要访问的虚拟主机---->Host主机站点包含请求页面的位置。webapps---->context,就是index.jsp中的内容---->wrapper(servlet)响应解析,处理请求---->jsp翻译---->页面展示

目录文件内容

bin 存放的是启动和关闭tomcat的脚本文件

conf 

主配置文件 server.xml

contex.html host的默认配置信息

tomcat-user.xml 认证用户密码的配置文件

web.xml servlet的规范标准,配置servlet的文件

lib tomcat运行库依赖的jar包,一般不动,除非链接第三方,如redis、数据库

logs 日志文件

webapps web应用部署的默认目录

work tomcat的工作目录存放jsp编译之后的class文件,清除tomcat文件就是删work目录

JVM 就是Java的虚拟机,是Java应用程序在计算机上运行的核心组件,JVM复制将编译后的Java字节码(.class文件)解释或者编译成本地的机器码,使得计算机能够执行。JVM还提供了内存管理、垃圾回收、线程管理,确保Java程序在不同平台可以有一致的功能

内存池

PS Eden Space 堆内存,存储新创建的对象

PS Old Gen 堆内存,存储长时间存活的对象

PS Survivor Space 堆内存,存储创建之后生命周期较短的对象

Code Cache 非堆内存,存储已经编译的代码

Compressed Class Space 非堆内存,存储已经压缩的类

Metaspace 非堆内存,存储类的元数据

堆区

堆区当中会区分新生代 中生代 老年代

每一个新建的对象占用的空问,就是新生代。
java垃圾回收机制对堆区进行资源回收,新生代中没有被回收的资源,就是中生代。

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

JVM优化

catalina.sh 就是servlet代码以及容器管理

JAVA_OPTS="$JAVA_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堆最大能多大,jm的最大内存。和硬件内存挂钩。根据官方文档,起始值和最大值保持一致,XMS和XMX设为一样的,内存可以设为物理内存的一般

-Xmn768m 新生代的内存大小,官方推荐为整个堆大小的3/8

XX:ParallelGCThreads=2 配置并行收集器的线程数,绝对同时可以有多少个线程进行垃圾回收

XX:Permsize 设置持久代内存的大小,默认是物理内存的1/4

-XX:MaxPermsize=1024m 最大非堆内存的大小,默认是物理内存的1/4

非堆内存是不会被垃圾回收机制处理的,持久代内存与最大非堆内存不能超出操作相系统的可用内存。设置成一样大,可以减轻伸缩堆大小的压力

Djava.awt.headless=true 避免在linux环境下,web不能正常打开,以正常显示图片

-XX:+DisableExplicitGC" 避免JVM空间大起大落,影响系统的响应时间,响应速度变得非常慢

ajp-nio-8009

ajp-nio  连接器的类型 

nio 进行异步非阻塞。

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

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

http-nio-8080
处理http请求,和客户端通信的端口

tomcat 虚拟主机配置

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

启动速度优化

第一次启动tomcat会发现启动速度很慢,这时需要改变jdk参数

vim /usr/java/jdk1.8.0_201-amd64/jre/lib/security/java.securitysecurerandom.source=file:/dev/urandom

配置文件优化

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

redirectPort: 如果某连接器支持的协议的是http,当接受客户端发来的请求时https,就会启用此端口(8443)

maxthreads tomcat 使用线程来处理请求的,可以创建的最大线程数,也就是并发连接数,默认为200

minisparethreads 最小空闲线程数,决定了开启tomcat时会有多少线程,默认为10

maxsparethreads 最大备用线程,一旦创建的线程超过这个值,tomcat会关闭不再需要的端口线程,默认为-1,也就是不限制。一般不会指定

URIEncoding URL的格式编码,默认utf-8。需要分别指定,一般不动

connectionTimeout 网络连接超时,单位为毫秒,默认为0,永不超时。一般设置为20000

enablelookups 是否反向解析域名,能够获取远程的主机名。一般设置为false,直接返回IP地址,提高处理能力

disableUploadTimout 上传超时时间,设置为true

connectionUploadTimeout 设置上传超时时间,没有标准

acceptCount 所有可以使用的线程都被占用时可以传入连接请求的最大队列长度,默认为100,超出的直接丢弃不再处理

compression 是否开启页面和响应数据的压缩。off 关 on 开 force 所有情况下都进行压缩。默认是off,建议on打开

compressionMinSize 压缩响应最小值,等于或小于不会响应,一般设置为2048

compressionMimeType 可以被压缩MIME的类型
 

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

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

相关文章

STM32入门——定时器

内容为江科大STM32标准库学习记录 TIM简介 TIM&#xff08;Timer&#xff09;定时器定时器可以对输入的时钟进行计数&#xff0c;并在计数值达到设定值时触发中断16位计数器、预分频器、自动重装寄存器的时基单元&#xff0c;在72MHz计数时钟下可以实现最大59.65s的定时&…

c语言——三子棋

基本框架 三个文件: 其中.cpp文件用于游戏具体函数设计&#xff0c;.h文件为游戏的函数声明&#xff0c;test.cpp文件用于测试游戏运行。 需要用到的头文件&#xff1a; #include <stdio.h> #include <stdlib.h>//rand&srand #include <time.h>//时间相…

ElasticSearch:项目实战(2)

ElasticSearch: 项目实战 (1) 需求&#xff1a; 新增文章审核通过后同步数据到es索引库 1、文章服务中添加消息发送方法 在service层文章新增成功后&#xff0c;将数据通过kafka消息同步发送到搜索服务 Autowiredprivate KafkaTemplate<String,String> kafkaTemplate;/…

vi 编辑器入门到高级

vi 编辑器的初级用法vi 编辑器的工作模式1. 命令模式2. 文本输入模式3. 状态行vi 工作模式切换存储缓冲区 vi 编辑器命令1. 启动 vi2. 文本输入3. 退出 vi4. 命令模式下的 光标移动5. 命令模式下的 文本修改6. 从 命令模式 进入 文本输入模式7. 搜索字符串8. vi 在线帮助文档 v…

TS协议之PES(ES数据包)

TS协议之PAT&#xff08;节目关联表&#xff09;TS协议之PMT&#xff08;节目映射表&#xff09;TS协议之PES&#xff08;ES数据包&#xff09; 该文档已上传&#xff1a;下载地址 1. 概要 1.1 TS数据包&#xff08;PES&#xff09;协议数据组成 TSTS头PES头ES。TS&#xf…

Rust 原生支持龙架构指令集

导读近日&#xff0c;Rust 开源社区发布 1.71.0 版本&#xff0c;实现对龙架构&#xff08;LoongArch&#xff09;指令集的原生支持。 龙架构操作系统发行版和开发者可基于上游社区源代码构建或直接下载 Rust 开源社区发布的龙架构二进制版本。Rust 开发者将在龙架构平台上获得…

uniapp 格式化时间刚刚,几分钟前,几小时前,几天前…

效果如图&#xff1a; 根目录下新建utils文件夹&#xff0c;文件夹下新增js文件&#xff0c;文件内容&#xff1a; export const filters {dateTimeSub(data) {if (data undefined) {return;}// 传进来的data必须是日期格式&#xff0c;不能是时间戳//将字符串转换成时间格式…

机器学习深度学习——序列模型(NLP启动!)

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位即将上大四&#xff0c;正专攻机器学习的保研er &#x1f30c;上期文章&#xff1a;机器学习&&深度学习——卷积神经网络&#xff08;LeNet&#xff09; &#x1f4da;订阅专栏&#xff1a;机器学习&&深度…

vue消息订阅与发布,实现任意组件间通讯

第一步&#xff1a;下载第三方消息订阅与发布库&#xff0c;例如常用的pubsub.js,他可以在任何框架中使用包括vue、react、anglar等等。 命令&#xff1a;npm i pubsub-js 注意是pubsub-js(不是点); 第二步&#xff1a;引入库&#xff1b; import pubsub from pubsub-js 第…

Die2Die(D2D)和chip2chip(C2C)之间的高速互联接口

随着chiplet的兴起&#xff0c;Die2Die的高速互联越来越重要&#xff0c;相比于传统的C2C(chip2chip)的互联&#xff0c;D2D的片间距离很近(10mm量级)&#xff0c;且这些小的chip(裸片)最终形成一个封装【多芯片模块&#xff08;MCM&#xff09;】。所以D2D的互联信道短&#x…

修改Egohands公开数据集,用于YOLOv5训练通用手部检测模型

〇、背景&#xff1a; 项目需要&#xff0c;需要利用摄像头对人手进行实时监测&#xff0c;最先考虑到的就是简单易用且高效的YOLOv5&#xff0c;很快找到了公开数据集&#xff1a;Egohands EgoHands: A Dataset for Hands in Complex Egocentric Interactions | IU Computer…

【人工智能前沿弄潮】—— SAM系列:SAM从提示生成物体mask

SAM从提示生成物体mask Segment Anything Model&#xff08;SAM&#xff09;根据指示所需的对象来预测对象掩码。该模型首先将图像转换为图像嵌入&#xff0c;从而可以从提示中高效地生成高质量的掩码。 SamPredictor类为模型提供了一个简单的接口来提示模型。用户可以首先使…