第十三章 Tomcat优化

一、Tomcat 优化

Tomcat 下载地址:https://archive.apache.org/dist/tomcat
   
1.1 源码导入
1. 下载对应的 tomcat 版本源码(Tomcat8.0.11)
2. 源码根目录下创建 pom.xml 文件
3. 将源码导入 idea 中
  
1.2 Web 容器
- Connector.initInternal()->
- protocolHandler.init()->
- AbstractProtocol.init()->
- endpoint.init()->
- bind()->
- Apr,JIo,NIO,NIO2->
- JIo 即 Socket 实现方式
  
1.3 Servlet 容器
- 加 载 : ContextConfig.webConfig() — >getContextWebXmlSource() —>Constants.ApplicationWebXml
- 解 析 : ContextConfig.webConfig() — >configureContext(webXml) —>context.createWrapper()
  
1.4 Tomcat 组件
- Server 就是一个 Tomcat
- Service 容器
- Connector 连接器(多个)
- Engin 引擎(一个)
- Host 虚拟主机
- Context 发布的应用
- Wrapper 包装内容的盒子
- Servlet 应用
  
1.5 server.xml
Server.xml 文件说明:
- Server
- 代表整个 Catalina Server 容器,是 Tomcat 实例的顶层元素,由org.apach.catalina,Server 接口定义,其下可以包含一个或多个 Service 元素。
- 实现类:实现 org.apache.catalina.Server 接口的类,默认值为org.apache.catalina.core.StandardServer。
- port:服务器监听 shutdown 命令的端口,必须设置。
- shutdown:停止 tomcat 时发送给 shutdown 监听端口的字符串。
- port 和 shutdown 是关闭的端口号和命令,建议改掉,要不然别人远程可以改掉。
    
- Service
- 由 org.apache.catalina.Service 接口定义,它包含一个元素,以及一个或多个元素,这些元素共享一个元素。
- 实现类:实现 org.apache.catalina.Service 接口的类,默认值为org.apache.catalina.core.StandardService。
  
- Engine
- 由org.apahe.catalina.Engine接口定义.每个元素只能包括一个元素. 元素处理在同一个中所有元素接收到的客户请求。
- 相关实现类:org.apache.catalina.Engine接口的类,默认值为org.apache.catalina.core.StandardEngine。
- name 定义Engine的名字。
- defaultHost 默认处理请求的主机名,必须与其中的一个Host元素的名称一样。
- 默认的虚拟机是localhost。
  
- Host
- 由org.apache.catalina.Host接口定义.一个元素可以包含多个元素.每个元素定义了一个虚拟主机,它可以包含一个或多个Web应用。
- 实现类 实现org.apache.catalina.Host接口的类,默认值为org.apache.catalina.core.StandardHost。
- appBase 指定虚拟主机的对应的目录(即虚拟主机的部署目录),可以是绝对路径,也可以是相对于tomcat安装目录的相对路径,默认的部署目录为webapps。
- unpackWARs 配置为true,表示tomcat会自动解压部署目录中的war包,如果配置为false,则不会解压,直接运行war文件,默认为false,建议保持默认值。
- autoDeploy 配置为true,表示tomcat处于运行状态时可以监测部署目录中的文件状态,如果有新的web应用部署进来则自动发布这个web应用。
- 是可以搞出多个虚拟主机。
  
- Context
- 最常配置的元素,每一个Context代表一个运行在tomcat中的web应用,一个Host下可以配置多个Context。
- 实现类: 实现org.apache.catalina.Context接口的类,默认值为org.apache.catalina.core.StandardContext。
- path 指定访问web应用的url路径。
- docBase 发布的web应用的文件路径,可以时绝对路径,也可以是相对与发布目录的相对路径。
- reloadable 设置为true,tomcat在运行期间会监测发布应用的WEB-INF/classes和WEB-INF/lib目录中的文件改动,当检测到文件变动后,tomcat会自动重新加载应用。
- cookies 是否可以通过cookie来支持Session,默认为true。
- 虽然可以使用Context节点来部署应用,但自tomcat5.5之后就不再建议这么做,可以在/conf/Catalina/{hostname}/xxx.xml进行独立部署,最简单的方式是直接将要发布的应用放到webapps下。
   
1.6 两个核心组件
- Connector:主要负责处理 Socket 连接,以及 Request 与 Response 的转化。
- Container:包括 Engine、Host、Context 和 Wrapper,主要负责内部的处理以及 Servlet 的管理。
   
1.7 性能优化常用配置
1.7.1 内存空间优化
JAVA_OPTS="-server -Xms4g -Xmx4g -XX:NewSize= -XX:MaxNewSize= "
  
-server:服务器模式
-Xms:堆内存初始化大小
-Xmx:堆内存空间上限
-XX:NewSize=:新生代空间初始化大小
-XX:MaxNewSize=:新生代空间最大值
  
生产案例:
[root@centos7 ~]#vim /usr/local/tomcat/bin/catalina.sh
# OS specific support.  $var _must_ be set to either true or false.
JAVA_OPTS="-server -Xms4g -Xmx4g -Xss512k -Xmn1g -XX:CMSInitiatingOccupancyFraction=65 -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=10 -XX:NewRatio=2 -XX:PermSize=128m -XX:MaxPermSize=512m -XX:CMSFullGCsBeforeCompaction=5 -XX:+ExplicitGCInvokesConcurrent -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods"
   
cygwin=false
darwin=false
#一台tomcat服务器并发连接数不高,生产环境建议分配物理内存通常4G到8G较多,如果需要更多连接,一般会利用虚拟化技术实现多台tomcat
  
1.7.2 线程池调整
[root@centos7 ~]#vim /usr/local/tomcat/conf/server.xml<Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" />
  
常用属性:
- connectionTimeout :连接超时时长,单位 ms。
- maxThreads:最大线程数,默认 200。
- minSpareThreads:最小空闲线程数。
- maxSpareThreads:最大空闲线程数。
- acceptCount:当启动线程满了之后,等待队列的最大长度,默认 100。
- URIEncoding:URI 地址编码格式,建议使用 UTF-8。
- enableLookups:是否启用客户端主机名的 DNS 反向解析,缺省禁用,建议禁用,就使用客户端 IP 就行。
- compression:是否启用传输压缩机制,建议 “on”,CPU 和流量的平衡。
- compressionMinSize:启用压缩传输的数据流最小值,单位是字节。
- compressableMimeType:定义启用压缩功能的 MIME 类型 text/html,text/xml,text/css,text/javascript。
   
1.7.3 启动速度优化
1. jars
将一些不必要的 jar 包去掉,当 tomcat 启动加载 jar 包的时候,会去搜寻每个 jar 包里的 class 文件,这些都会耗费一些时间,如果你把不必要的 jar 包去掉了,很显然会节省时间。
2. 缓存
可以在 bin/catalina.sh 中设置 jvm 所能使用到的缓存大小,如:JAVA_OPTS=’-Xms1024m -Xmx1024m’。
3. 配置文件
Tomcat 的配置比如 server.xml 是 xml 文件,而 xml 的解析也是要花时间的,如果我们能将 xml 配置文件尽可能地弄得简洁一些,比如去掉一些没有用到的节点,这也有助于减少启动的时间,虽然这个节省的时间看来很少。
4. 应用程序
- 确保程序在启动的时候没有一些处理很耗时的地方;
- 删除掉 tomcat 自带的目录 webapps 及下面的所有内容,不然的话每次启动的时候都会加载这些自带的例子;
- 修改 WEB-INF/web.xml 文件,在默认的情况下中的属性 metadata-complete 的值为 false,这种情况下,tomcat 在启动时会去自动扫描是否有注解及网络碎片,如果你不想 tomcat 这样做,你可以将 metadata-complete 的值设为 true。
5. 并行启动多个应用程序
默认情况下,假设在一个 tomcat 下你有多个应用,那么启动的时候,这些应用程序都是依次启动的,除非所有应用全部启动完毕,tomcat 才会启动完成,但从 Tomcat 7.0.23+开始,你可以配置多个应用程序并行启动了!你可以通过修改配置文件中 Host 里面的 startStopThreads 这个属性的值来达到这个目的,将多个应用 startStopThreads 的值设为不同即可。

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

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

相关文章

【LeetCode热题100】20. 有效的括号(栈)

一.题目要求 给定一个只包括 ‘(’&#xff0c;‘)’&#xff0c;‘{’&#xff0c;‘}’&#xff0c;‘[’&#xff0c;‘]’ 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。…

win10配置CLion2022+ubuntu20.04远程部署

背景 在博文ubunut搭建aarch64 cuda交叉编译环境记录中&#xff0c;使用的ubuntu20.04虚拟机安装eclipse来交叉编译aarch64的程序&#xff0c;然后发送到jetson板子上执行。开发一段时间后发现eclipse IDE使用起来不太便捷&#xff0c;因此&#xff0c;考虑使用CLion IDE&…

【数字孪生平台】使用 Three.js 以 3D 形式可视化日本新宿站地图

在本文中&#xff0c;我们将使用日本新宿站的室内地图数据&#xff0c;并使用 Three.js 将其进行 3D 可视化。更多精彩内容尽在数字孪生平台。 使用的数据 这次&#xff0c;我们将使用日本空间信息中心发布的“新宿站室内地图开放数据”的集成版本&#xff08;ShapeFile&#…

软考倒计时58天!高效备考的方法有这些!

距离2024年上半年软考正式考试还剩58天的时间&#xff0c;留给考生的备考时间越来越少。而且有很多考生都是上班族&#xff0c;每天的学习时间非常有限。为此&#xff0c;为各位考生提供了一些高效备考方法&#xff0c;帮助大家科学备考。 01、合理分配学习时间 每个科目都有…

网络安全新视角:数据可视化的力量

在当今数字化时代&#xff0c;网络安全已成为各大企业乃至国家安全的重要组成部分。随着网络攻击的日益复杂和隐蔽&#xff0c;传统的网络安全防护措施已难以满足需求&#xff0c;急需新型的解决方案以增强网络防护能力。数据可视化技术&#xff0c;作为一种将复杂数据转换为图…

Weblogic10.3.6补丁升级

由oracle官方发布的漏洞公告&#xff0c;对weblogic进行补丁升级。本文介绍的是weblogic安装的版本为10.3.6.0&#xff0c;如果你使用的是其他版本的请根据实际版本来选择下载 对于weblogic补丁升级&#xff0c;具体步骤如下&#xff1a; 1、首先需要下载weblogic补丁程序 2…

简单了解原型模式

什么是原型模式 区别于单例模式&#xff0c;原型模式的一个类可以有多个实例化的对象。 原型模式通过拷贝来产生新的对象&#xff0c;而不是new&#xff0c;并且可以根据自己的需求修改对象的属性。 实现Cloneable接口实现拷贝 而拷贝又分为浅拷贝和深拷贝&#xff0c;两者在…

AI赋能微服务:Spring Boot与机器学习驱动的未来应用开发

&#x1f9d1; 作者简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟。提供嵌入式方向的学习指导、简历面…

Compose UI 之 FloatingActionButton 按钮

FAB(Floating Action Button) FAB 是最具突出效果的悬浮按钮,出现在屏幕右下角。通常位于屏幕右下角,具有显著的圆形形状和浮动的定位,用于呈现应用程序的主要操作或常用操作,例如开始一个新的任务、分享内容、启动一个动作等。 Compose UI 库中,FAB 的样式有 4 种。 …

HarmonyOS入门--页面和自定义组件生命周期

文章目录 页面和自定义组件生命周期页面生命周期组件生命周期生命周期的调用时机 页面和自定义组件生命周期 生命周期流程如下图所示&#xff0c;下图展示的是被Entry装饰的组件&#xff08;首页&#xff09;生命周期。 自定义组件和页面的关系&#xff1a; 自定义组件&…

表单输入绑定 值绑定

值绑定​ 对于单选按钮&#xff0c;复选框和选择器选项&#xff0c;v-model 绑定的值通常是静态的字符串 (或者对复选框是布尔值)&#xff1a; <!-- picked 在被选择时是字符串 "a" --> <input type"radio" v-model"picked" value&qu…

MySQL5.7源码分析--连接

一、连接协议支持 mysql支持4种通信协议&#xff1a;TCP/IP协议、Unix Socket协议、Share Memory协议、NT管道 windows支持三种连接方式&#xff1a;TCP/IP协议、Share Memory协议、NT管道 unix支持两种连接方式&#xff1a;TCP/IP协议、Unix Socket协议 协议介绍如下&…

【C++】动态内存分配 与 对象的动态建立与释放

目录 动态建立和释放动态创建数组销毁堆对象销毁动态创建的数组 对象的动态建立与释放 动态建立和释放 new操作符动态分配内存建立的变量&#xff0c;称为“堆对象”或者“在动态存储中分配”。 new运算符创建的堆对象一直存在&#xff0c;直到使用delete运算符显示的销毁。ne…

[flask]http请求//获取请求体数据

import jsonfrom flask import Flask, requestapp Flask(__name__)app.route("/form1", methods["post"]) def form1():"""获取客户端请求的请求体[表单]:return:""""""获取表单数据请求url&#xff1a;&qu…

2024-03-29 问AI: 介绍一下ASM模型( Active Shape Model )

文心一言 ASM模型&#xff0c;即Active Shape Model&#xff08;主动形状模型&#xff09;&#xff0c;是Cootes于1995年提出的一种经典的人脸关键点检测算法。它基于点分布模型&#xff08;Point Distribution Model, PDM&#xff09;的算法&#xff0c;是一种对目标物体进行…

网络安全卷么?

官方宣传的是对的网络安全现在是朝阳行业&#xff0c;缺口是很大 不过网络安全行业就是需要技术很多的人达不到企业要求才导致人才缺口大 初级的现在有很多的运维人员转网络安全&#xff0c;初级也会慢慢的卷起来&#xff0c;但是岗位多不用怕&#xff0c;以后各大去也都会要网…

解决dtypes.py:513: FutureWarning:...系列问题【TensorFlow】

前情提要 我的TensorFlow版本是2.4.0&#xff0c;python环境是3.8.19 问题 在训练模型时出现以下报错&#xff1a; D:\anaconda3\envs\env_tf\lib\site-packages\tensorflow\python\framework\dtypes.py:513: FutureWarning: In the future np.object will be defined as t…

Git Fork后的仓库内容和原仓库保持一致

Git Fork后的仓库内容和原仓库保持一致 ①Fork原仓库内容到自己仓库 ②将项目内容下载到本地 ③使用git命令获取原仓库内容&#xff0c;将原仓库的最新内容合并到自己的分支上并推送 下面从第三步开始演示~ 这里以码云上的若依项目为演示项目 ③使用git命令获取原仓库内容 …

【八股】集合

HashMap HashMap是基于哈希表的Map接口实现&#xff0c;是非线程安全的。 JDK1.8之前 HashMap 底层是数组链表实现的&#xff0c;数组是HashMap的主题&#xff0c;链表则是为了解决哈希冲突的。&#xff08;拉链法&#xff09; JDK1.8之后 HashMap 在解决哈希冲突的方法有了较…

基于龙芯2k1000 mips架构ddr调试心得(二)

1、内存控制器概述 龙芯处理器内部集成的内存控制器的设计遵守 DDR2/3 SDRAM 的行业标准&#xff08;JESD79-2 和 JESD79-3&#xff09;。在龙芯处理器中&#xff0c;所实现的所有内存读/写操作都遵守 JESD79-2B 及 JESD79-3 的规定。龙芯处理器支持最大 4 个 CS&#xff08;由…