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.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.mzph.cn/news/42149.shtml

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

相关文章

vue 使用indexDB 简单完整逻辑

1 npm npm install idb 2 代码 <template><div><p>Data: {{ data }}</p><button click"fetchData">Fetch Data</button></div> </template><script> import { openDB } from idb;export default {data() {…

eqtl-GWAS和GWAS-GWAS

目前教程中有eqtl-GWAS和GWAS-GWAS两种模式&#xff0c;其他模式比较少见&#xff0c;还未进行开发 数据类型cc为分类变量即case/control&#xff0c;quant为连续变量&#xff0c;eqtl数据默认quant coloc.abf有两个比较需要注意的点&#xff0c;就是数据集中N是代表样本量&am…

[Docker精进篇] Docker镜像构建和实践 (三)

前言&#xff1a; Docker镜像构建的作用是将应用程序及其依赖打包到一个可移植、自包含的镜像中&#xff0c;以便在不同环境中快速、可靠地部署和运行应用程序。 文章目录 Docker镜像构建1️⃣是什么&#xff1f;2️⃣为什么&#xff1f;3️⃣镜像构建一、用现有容器构建新镜像…

【IMX6ULL驱动开发学习】08.马达驱动实战:驱动编写、手动注册平台设备和设备树添加节点信息

目录 一、使用设备树 1.1 修改设备树流程 二、手动创建平台设备 三、总结&#xff08;附驱动程序&#xff09; 前情提要&#xff1a;​​​​​​​【IMX6ULL驱动开发学习】07.驱动程序分离的思想之平台总线设备驱动模型和设备树_阿龙还在写代码的博客-CSDN博客 手动注册…

Android中如何不编译源生模块

如果想让自己的app 替换系统的app 比如使用闪电浏览器替换系统的Browser 首先把闪电浏览器放到 vendor/rockchip/common/apps Android.mk LOCAL_PATH : $(call my-dir) include $(CLEAR_VARS)LOCAL_MODULE : Lightning LOCAL_SRC_FILES : $(LOCAL_MODULE).apk LOCAL_MODULE_C…

linux 命令- systemctl

systemctl 参数说明 1、使用语法 用法&#xff1a;systemctl [OPTIONS…] {COMMAND} … 2 、参数说明 参数参数说明start立刻启动后面接的unitstop立刻关闭后面接的unitrestart立刻关闭后启动后面接的unit&#xff0c;亦即执行stop再start的意思reload不关闭后面接的unit的…

常见程序搜索关键字转码

个别搜索类的网站因为用户恶意搜索出现误拦截情况&#xff0c;这类网站本身没有非法信息&#xff0c;只是因为把搜索关键字显示在网页中&#xff08;如下图&#xff09;&#xff0c;可以参考下面方法对输出的关键字进行转码 DEDECMS程序 本文针对Dedecms程序进行搜索转码&…

优先级队列【C++】

文章目录 priority_queuepriority_queue 使用priority_queue的模拟实现向上调整算法向下调整算法pushpoptopsizeempty 仿函数完整代码 priority_queue 优先队列&#xff08;priority_queue&#xff09;也是队列的一种&#xff0c;priority_queue的接口是和queue的接口是相同的…

C#__基本特性和使用

// 特性&#xff08;attribute&#xff09;: // 一种允许我们向程序集添加元数据的语言结构 // 用于保存程序结构信息的某种特殊类型的类 // 类似“批注”&#xff0c;用于解释说明 #define IsShowMessage // 宏定义&#xff0c;在开头定义&#xff0…

uni-app弹窗列表滚动, 弹框下面的内容也跟随滚动解决方案

滑动弹窗里的列表&#xff0c;弹框下面的内容也会跟着滑动&#xff0c;导致弹窗中的列表不能正常滚动 1.弹窗组件代码&#xff0c;需要在最外层的view中加入touchmove.stop.prevent"moveHandle"&#xff0c;且弹窗中需要滚动的列表要使用scroll-view标签包裹起来&…

五分钟搭建生鲜蔬果小程序

如今&#xff0c;随着移动互联网的快速发展&#xff0c;小程序已经成为众多企业和商家推广产品和服务的重要工具。而生鲜蔬果行业作为一个常见的消费领域&#xff0c;也开始逐渐转向小程序商城来进行销售和服务。那么&#xff0c;如何从零开始搭建一个生鲜蔬果小程序商城呢&…

Hlang--用Python写个解释器

文章目录 前言流程数学解释器结果封装数的操作运行时异常运行解释实现总结前言 没错今天提前来做这个东西,昨天晚上干这个玩意差不多干了两个多小时才搞定,导致凌晨2点才睡觉,最要命的是,写着写着突然想到有一道线代理解错了,一个晚上,做梦全是这两个东西。尤其是晚上效…

LeetCode150道面试经典题-- 快乐数(简单)

1.题目 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为&#xff1a; 对于一个正整数&#xff0c;每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1&#xff0c;也可能是 无限循环 但始终变不到 1。如果这个过程 结果为 1&am…

Linux系统之安装my-mind思维导图工具

Linux系统之安装my-mind思维导图工具 一、my-mind介绍二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、检查本地环境3.1 检查本地操作系统版本3.2 检查系统内核版本3.3 检查端口占用情况 四、安装httpd4.1 检查本地yum仓库4.2 安装httpd4.3 关闭防火墙和selinux4.4 创建…

arcgis数据采集与拓扑检查

1、已准备好一张配准好的浙江省行政区划图&#xff0c;如下&#xff1a; 2、现在需要绘制湖州市县级行政区划。需要右击文件夹新建文件地理数据库&#xff0c;如下&#xff1a; 其余步骤均默认即可。 创建好县级要素数据集后&#xff0c;再新建要素类&#xff0c;命名为县。 为…

【Java 动态数据统计图】动态数据统计思路案例(动态,排序,containsKey)五(117)

需求&#xff1a;前端根据后端的返回数据&#xff1a;画统计图&#xff1b; 1.动态获取地域数据以及数据中的平均值&#xff0c;按照平均值降序排序&#xff1b; 说明&#xff1a; X轴是动态的&#xff0c;有对应区域数据则展示&#xff1b; X轴 区域数据降序排序&#xff1b;…

ebay灯串UL报告 UL588检测标准

季节性和装饰性照明用品即灯串以及配件都是便携式插头连接的临时性商品&#xff0c;最大额定输入电压为 120 伏。 由 ILAC ISO 17025 认证的实验室出具的检测报告&#xff0c;确认每件商品均已经过检测&#xff0c;符合下列要求&#xff1a; 季节性和装饰性照明用品(灯串&…

企业中商业智能BI,常见的工具和技术

商业智能&#xff08;Business Intelligence&#xff0c;简称BI&#xff09;数据可视化是通过使用图表、图形和其他可视化工具来呈现和解释商业数据的过程。它旨在帮助组织更好地理解和分析他们的数据&#xff0c;从而做出更明智的商业决策。 常见的商业智能数据可视化工具和技…

AtcoderABC222场

A - Four DigitsA - Four Digits 题目大意 给定一个整数N&#xff0c;其范围在0到9999之间&#xff08;包含边界&#xff09;。在将N转换为四位数的字符串后&#xff0c;输出它。如果N的位数不足四位&#xff0c;则在前面添加必要数量的零。 思路分析 可以使用输出流的格式设…

鼠标样式和指向

学习抖音&#xff1a; 渡一前端教科频道 图上指针跟着鼠标移动&#xff0c;并且改变方向 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><style>* {padding: 0;margin: 0;}.arrow {position: fixed;width: 3…