tomcat的优化、动静分离
tomcat的优化
tomcat自身的优化
tomcat的并发处理能力不强,大项目不适应tomcat做为转发动态的中间件(k8s集群,pytnon rubby),小项目会使用(内部使用的)动静分离
默认配置不适合生产环境,可能频繁出现假死,需要不停的重启。
根据生产环境的实际情况,自行测试。
优化tomcat的启动速度
file:/dev/urandom
非阻塞的版本,不依赖系统的终端,进程忙也不会进入等待状态,所以处理速度相对较快
如果对应用的安全性要求比较高,只能用/dev/random
配置文件优化
vim server.xml
maxThreads:tomcat使用线程来处理接收请求的个数,tomcat最多可以创建多少个线程,默认200个
minSpareThreads:最小空闲数线程,tomcat开启之后,没人使用也会有进程待命,默认值是10
maxSpareThreads:最大空闲数线程,一旦线程总数超过这个值,tomcat就会关闭不再需要的线程,默认是-1,不限制,一般不设置
connectionTimeout="20000" :网络连接超时时间,单位是毫秒,设置成0,则永不超时。默认即可
enableLookups:是否支持反向解析,true,false,关闭,false,可以提高处理速度。
disableUplaodTimeout:上传时是否使用超时机制,10s,true禁用和false开启
connectionUploadTimeout:上传的超时时间
acceptCount:当所有可用的处理请求的线程数都被使用时,可以接入请求的最大队列长度,超过了这个数的请求,将被不予处理(直接丢弃),默认100个
comperssion:是否对响应数据进行压缩,on开启,off关闭
开启压缩之后,可以有效的减少页面的大小(文本无效,图片、音频、视频)一般可以减少三分之一,节省带宽,默认off
comperssion="on"
comperssionMinSize:表示响应压缩的最小值,只有响应报文大于这个值才会进行压缩。如果开启了压缩,默认值2048
noCompressionUserAgents="浏览器名称":对于这些浏览器,不启用压缩
compressableMimeType="页面类型":压缩类型,指定对哪些类型的文件进行压缩
常用的页面类型:
文本类型:text/plain,text/html,text/javacript
图片类型:image/jpg,image/jpeg,image/gif
音频:audio/ogg,wav,mpeg
视频:video/MP4,webm,rmvb。quicktime
应用程序:application/pdf,json,xml
内核优化
系统安全的优化补齐
内核优化的配置文件:
1、vim /etc/security/limits.conf
打开文件数的限制。系统初始化第一步要做的事情
2、内核参数文件:
vim /etc/sysctl.conf
net.ipv4.ip_forward=0/1 :禁用或者开启数据包的转发功能,要做路由器必须打开,0是关,1是开
net.ipv4.tcp_max_tw_buckets=2000:允许timewait的最大数量
net.ipv.4tcp_sack=1:启用有选择的应答,提高tcp的处理性能
net.core.netdev_max_backlog=262144:网络接口接收数据包队列最大的大小
vm.swappiness=0,关闭内存的交换行为,不适用交换分区,k8s默认就不能适用交换分区,否则会报错
net.ipv4.tcp_max_orphans:系统允许的最大的tcp连接数量
net.ipv4.ip_local_port_range=1024 65000
1024-65000 设定系统的端口范围
net.ipv4.tcp_fin_timeout=10:设置tcp关闭连接的超时时间
net.ipv4.tcp_keepalive_time:设置tcp的keepailve包的探测包的发送频率,用于检测连接状态
jvm优化
vim catalina.sh
JAVA_OPTS="$JAVA_OPTS -server -Xms2048m -Xmx2048m -Xmn768m -XX:ParallelGCThreads=2 -XX:PermSize=1024m -XX:MaxPermSize=1024m -Djava.awt.headless=true -XX:+DisableExplicitGC" cygwin=false
各端含义(理解即可):
-Xms2048m:java初始化堆的大小,分配jvm的最小内存,cpu的性能比较高,可以分配的高一点
-Xmx2048m:java堆的最大值,也就是jvm的最大内存,取决于物理内存的大小,官方建议设置成与xms一样的值。设置成物理内存的一半
-Xmn768m:新生代内存的大小,官方推荐,设置成jvm内存最大值的3/8
java自带垃圾回收机制,java进行垃圾回收之后不需要重新计算堆区的大小
堆区:新生代,中生代,老年代
每生成一个新的对象,对象占用的内存空间就是新生代空间
垃圾回收对堆区当中的资源进行回收之后,新生代没有被回收的资源就转移到中生代
中生代的就会转移到老年代
整个jvm堆的大小:新生代+老年代+永久代(系统自带的)
-XX:ParallelGCThreads=2:配置并行收集器的线程数,同时有多少个线程一起进行来及回收,配置成cpu的一半
-XX:PermSize=1024m:设置非堆内存的初始值,之久代内存的大小,默认是物理内存的1/4,建议设置成整个jvm内存的一半
非堆内存是不会被java的垃圾回收机制处理的
-XX:MaxPermSize=1024m:非堆内存的最大值,和初始值一致即可
-Djava.awt.headless=true:防止在linux访问的情况下,web页面的图片不能打开
-XX:+DisableExplicitGC:老年代的收集算法,缩短垃圾回收机制回收的时间
各段含义:
PS Eden Space :堆内存,创建一个新的对象都在堆内存中万恒
PS Old Gen :堆内存,长期存活的对象,永生代
PS Survivor Space :堆内存,PS Eden Space和PS Old Gen之间的存活对象,中生代
Code Cache :非堆内存,存储以及编译的代码
Compressed Class Space :非堆内存,存储以及压缩过的类定义
Metaspace:非堆内存,存储元数据的区域
ajp-nio-8009
ajp-nio:连接器的类型,ajp协议,nio:异步非阻塞的通信方式
ajp协议:tomcat服务器和web服务器之间进行连接的协议,可以提供负责均衡和高效转发,nio可以提高并发的处理能力
8009就是ajp的默认端口
tomcat和nginx实现动静分离
实验1:
访问nginx就是静态页面
通过nginx代理 index.jsp 可以访问tomcat的动态页面
1.分别在tomcat1和tomcat2做动态页面
2、
分别在tomcat1和tomcat2添加站点
cd conf
vim server.xml
先删除原有的站点
然后添加
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context docBase="/usr/local/tomcat/webapps/test" path="" reloadable="true" />
启动
查看端口是否启动
3、配置nginx部分
cd /usr/local/nginx/conf/
先备份
cp nginx.conf nginx.conf.bak
vim nginx.conf
重启nginx
systemctl restart nginx
结果:
实验2
访问index.html就是静态页面,访问index.jsp就是访问tomcat的动态页面
在实验1基础上,添加nginx2 nginx3,做一个四层代理
cd /usr/local/nginx/conf
vim nginx.conf
重启nginx
systemctl restart nginx
结果:
相关文章:

tomcat的优化、动静分离
tomcat的优化 tomcat自身的优化 tomcat的并发处理能力不强,大项目不适应tomcat做为转发动态的中间件(k8s集群,pytnon rubby),小项目会使用(内部使用的)动静分离 默认配置不适合生产环境&…...

Python与自动化脚本编写
Python与自动化脚本编写 Python因其简洁的语法和强大的库支持,成为了自动化脚本编写的首选语言之一。在这篇文章中,我们将探索如何使用Python来编写自动化脚本,以简化日常任务。 一、Python自动化脚本的基础 1. Python在自动化中的优势 Pyth…...

树与二叉树
前言: 树这个结构想必在日常生活中很常见到,而现在要介绍的是一种独特的数据结构--二叉树。 1.树 (1)定义: 是一种非线性结构,有一个特殊的节点叫做根节点,树没有前驱节点;树是递…...

SpringBoot+Vue实现简单的文件上传(Excel篇)
SpringBootVue实现简单的文件上传 1 环境 SpringBoot 3.2.1,Vue 2,ElementUI 2 页面 3 效果:只能上传xls文件且大小限制为2M,选择文件后自动上传。 4 前端代码 <template><div class"container"><el…...

科研绘图系列:R语言金字塔图(pyramid plot)
介绍 金字塔图(Pyramid chart)是一种用于展示人口统计数据的图表,特别是用于展示不同年龄段的人口数量。这种图表通常用于展示人口结构,比如性别和年龄的分布。 特点: 年龄分层:金字塔图按年龄分层,每一层代表一个年龄组。性别区分:通常,男性和女性的数据会被分别展…...

Tomcat多实例
一、Tomcat多实例 Tomcat多实例是指在同一台服务器上运行多个独立的tomcat实例,每个tomcat实例都具有独立的配置文件、日志文件、应用程序和端口,通过配置不同的端口和文件目录,可以实现同时运行多个独立的Tomcat服务器,每个服务…...

前端Vue组件化实践:自定义加载组件的探索与应用
在前端开发领域,随着业务逻辑复杂度的提升和系统规模的不断扩大,传统的开发方式逐渐暴露出效率低下、维护困难等问题。为了解决这些挑战,组件化开发作为一种高效、灵活的开发模式,受到了越来越多开发者的青睐。本文将结合实践&…...

半小时获得一张ESG入门证书【详细中英文笔记一】
前些日子,有朋友转发了一则小红书的笔记给我, 标题是《半小时获CFI官方高颜值免费证书 ESG认证》。这对考证狂魔的我来说,必然不能错过啊,有免费的羊毛不薅白不薅。 ESG课程的 CFI 官方网址戳这里:CFI 于是信心满满的…...

类形断言和和类型推导的区别是什么?
类型断言(Type Assertion)和类型推导(Type Inference)在TypeScript中的区别 如下: 定义: 类型断言:是程序员明确指定一个值的类型,即允许变量从一种类型更改为另一种类型。它不会进行…...

Spring-Spring、IoC、DI、注解开发
1、Spring是什么 Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器(框架)。 Spring整体架构 Spring优点: Spring属于低侵入设计。IOC将对象之间的依赖关系交给Spring,降低组件之间的耦合,实现各个层之间的解耦,让我们更专注于业务…...

Facebook的未来蓝图:从元宇宙到虚拟现实的跨越
随着科技的不断演进和社会的数字化转型,虚拟现实(VR)和增强现实(AR)作为下一代计算平台正逐渐走进人们的视野。作为全球领先的科技公司之一,Facebook正在积极探索并推动这一领域的发展,以实现其…...

Redis6.2.1版本集群新加副本
测试数据 通过redis-benchmark生成测试数据 ./bin/redis-benchmark -h 172.31.4.18 -p 6381 -a Redis_6.2.1_Sc --cluster -t set -d 128 -n 10000000 -r 100000000 -c 200新加节点 172.31.4.18:6381> AUTH Redis_6.2.1_Sc OK172.31.4.18:6381> cluster meet 172.31.4…...

2.The DispatcherServlet
The DispatcherServlet Spring的Web MVC框架与许多其他Web MVC框架一样,是请求驱动的,围绕一个中央Servlet(即DispatcherServlet)设计,该Servlet将请求分派给控制器,并提供其他功能以促进Web应用程序的开发…...

bug定位策略
前提--用户环境层面 hosts异常:hosts文件主要是加快某个域名或者网站的解析速度,从而达到快速访问的作用,也可以屏蔽网站。hosts异常可能会导致部分网页无法访问,能够加载,但是网页无法正常显示;测试环境脏…...

基于R语言的水文、水环境模型优化技术及快速率定方法与多模型案例
在水利、环境、生态、机械以及航天等领域中,数学模型已经成为一种常用的技术手段。同时,为了提高模型的性能,减小模型误用带来的风险;模型的优化技术也被广泛用于模型的使用过程。模型参数的快速优化技术不但涉及到优化本身而且涉…...

内存函数(C语言)
内存函数 以下函数的头文件:string.h 针对内存块进行处理的函数 memcpy 函数原型: void* memcpy(void* destination, const void* source, size_t num);目标空间地址 源空间地址num,被拷贝的字节个数 返回目标空间的起始地…...

力扣 哈希表刷题回顾
哈希表理论总结 什么时候用哈希表,快速判断一个元素是否出现在集合中时,用哈希这种空间换时间的方法。 哈希函数与哈希碰撞 哈希函数是指将key映射到对应的哈希表上 哈希碰撞是指映射的过程中容易出现多对一的情况,用什么方法解决拉链法和…...

Qt 统计图编程
学习目标:Qt 折线图,柱形图和扇形统计图编程 学习基础 Qt QChart 曲线图表操作-CSDN博客 学习内容 Qt中绘制三种常见的图表非常方便, 主要步骤如下: 1. 折线图: - 使用QLineSeries定义折线数据,添加多个坐标点 - 使用QValueAxis创建X轴和Y轴 - 将…...

SQL中的谓词与谓词下推
在 SQL 查询中,谓词(Predicate)是用来对数据进行过滤的条件。它们决定了数据从数据库表中被选择的条件。理解和正确使用 SQL 谓词对于编写高效查询至关重要。 目录 什么是谓词?一个真实的故事SQL 谓词的代码示例比较谓词逻辑谓词…...

浅聊授权-spring security和oauth2
文章目录 前言自定义授权spring security授权oauth2授权概述 前言 通常说到授权,就会想到登录授权、token令牌、JWT等概念,授权。顾名思义就是服务器授予了客户端访问资源的权益,那么要实现授权有几种方案呢,三种授权方式在公司项…...

时间复杂度计算
目录 时间复杂性 ⼤O的渐进表⽰法 时间复杂性 定义:在计算机科学中,算法的时间复杂度是⼀个函数式T(N),它定量描述了该算法的运⾏时间。 时间复杂度是衡量程序的时间效率,那么为什么不去计算程序的运⾏时间呢? 1.…...

React 18 + Babel 7 + Webpack 5 开发环境搭建
文章目录 一、基础开发环境搭建1. 新建项目目录2. 项目目录结构及内容3. 安装 React 18 Babel 7 Webpack 54. 配置 Babel 和 Webpack5. 调试/构建项目 二、扩展项目支持的能力(待补充)1. JS 扩展(待补充)2. CSS 扩展(…...

MongoDB Shard 集群 Docker 部署
MongoDB Shard Docker 部署 部署环境 主机地址主机配置主机系统Mongodb1/192.168.31.1352CPU 4GBDebian12Mongodb2/192.168.31.1092CPU 4GBDebian12Mongodb3/192.168.31.1652CPU 4GBDebian12 镜像版本 mongodb/mongodb-community-server:5.0.27-ubuntu2004 部署集群 部署…...

MacOS 开发 — Packages 程序 macOS新版本 演示选项卡无法显示
MacOS 开发 — Packages 程序 macOS新版本 演示选项卡无法显示 问题描述 : 之前写过 Packages 的使用以及如何打包macOS程序。最近更新了新的macOS系统,发现Packages的演示选项卡无法显示,我尝试从新安转了Packages 也是没作用,…...

Hive的分区表分桶表
1.分区表: 是Hive中的一种表类型,通过将表中的数据划分为多个子集(分区),每个分区对应表中的某个特定的列值,可以提高查询性能和管理数据的效率。分区表的每个分区存储在单独的目录中,分区的定义…...

PostgreSQL17索引优化之支持并行创建BRIN索引
PostgreSQL17索引优化之支持并行创建BRIN索引 最近连续写了几篇关于PostgreSQL17优化器改进的文章,其实感觉还是挺有压力的。对于原理性的知识点,一方面是对这些新功能也不熟悉,为了尽可能对于知识点表述或总结做到准确,因此需要…...

在Vue中,子组件向父组件传递数据
在Vue中,子组件向父组件传递数据通常通过两种方式实现:事件和回调函数。这两种方式允许子组件与其父组件进行通信,传递数据或触发特定的行为。 1. 通过事件传递数据 子组件可以通过触发自定义事件,并将数据作为事件的参数来向父组…...

数据结构(顺序表)
谈起顺序表,那我们就不得不先来了解一下它的上级概念---线性表 线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是⼀种在实际中⼴泛使⽤的数据结构,常⻅的线性表:顺序表、链表、栈、队列…...

MySQL之基本查询(上)-表的增删查改
目录 Create(创建) 案例建表 插入 单行数据 指定列插入 单行数据 全列插入 多行数据 全列插入 插入是否更新 插入时更新 替换 Retrieve(读取) 建表插入 select列 全列查询 指定列查询 查询字段为表达式 为查询结果指定别名 结果去重 where条件 比较运算符 逻辑运…...

RocketMQ源码学习笔记:Producer发送消息流程
这是本人学习的总结,主要学习资料如下 马士兵教育rocketMq官方文档 目录 1、Overview2、验证消息3、查找路由4、选择消息发送队列4.1、选择队列的策略4.2、源码阅读4.2.1、轮询规避4.2.2、故障延迟规避4.2.2.1、计算规避时间4.2.2.2、选择队列 4.2.3、ThreadLocal的…...