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

结果:

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

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

相关文章

MySQl高级篇 -索引优化篇

索引 InnoDB采用了一个B数来存储索引&#xff0c;使得在千万级数据量的一个情况下&#xff0c;树的高度可以控制在3层以内&#xff0c;而层高代表磁盘IO的一个次数&#xff0c;因此基于索引查找可以减少磁盘IO的次数 MySQL的索引是在存储引擎层实现的&#xff0c;不同的存储引…

头歌资源库(31)象棋中马遍历棋盘的问题

一、 问题描述 二、算法思想 这是一个典型的深度优先搜索问题。 首先&#xff0c;我们创建一个mn的棋盘&#xff0c;并初始化所有的点为未访问状态。 然后&#xff0c;我们从(0, 0)位置开始进行深度优先搜索。 在每一步中&#xff0c;我们先标记当前位置为已访问&#xff0…

Android Viewpager2 remove fragmen不生效解决方案

一、介绍 在如今的开发过程只&#xff0c;内容变化已多单一的fragment&#xff0c;变成连续的&#xff0c;特别是以短视频或者直播为主的场景很多。从早起的Viewpage只能横向滑动&#xff0c;到如今的viewpage2可以支持横向或者竖向滑动。由于viewpage2的adapter在设计时支持缓…

解决mysql,Navicat for MySQL,IntelliJ IDEA之间中文乱码

使用软件版本 jdk-8u171-windows-x64 ideaIU-2021.1.3 mysql-essential-5.0.87-win32 navicat8_mysql_cs 这个问题我调试了好久&#xff0c;网上的方法基本上都试过了&#xff0c;终于是解决了。 三个地方结果都不一样。 方法一 首先大家可以尝试下面这种方法&#xff1a…

基于Python+Django+MySQL+Echarts的租房数据可视化分析系统

租房数据可视化 DjangoMySQLEcharts 基于PythonDjangoMySQLEcharts的租房数据可视化分析系统 Echarts 信息存储在数据库中 不含爬虫代码&#xff0c;或爬虫代码已失效 不支持登录注册 简介 基于DjangoMySQLEcharts的租房数据可视化系统通过连接数据库获取数据&#xff0c…

【格密码基础】旋转格的性质

目录 一. 回顾ZSVP问题 二. 基于ZSVP问题的密码系统 三. 格基旋转与Gram矩阵 四. 补充矩阵QR分解 4.1 矩阵分解 4.2 举例 前序文章请参考&#xff1a; 【格密码基础】详解ZSVP问题-CSDN博客 一. 回顾ZSVP问题 根据之前的讨论我们知道解决ZSVP问题的计算复杂度为&#x…

一款IM即时通讯聊天系统源码,包含app和后台源码

一款IM即时通讯聊天系统源码 聊天APP 附APP&#xff0c;后端是基于spring boot开发的。 这是一款独立服务器部署的即时通讯解决方案&#xff0c;可以帮助你快速拥有一套自己的移动社交、 企业办公、多功能业务产品。可以 独立部署&#xff01;加密通道&#xff01;牢牢掌握通…

您需要了解的欧盟网络弹性法案

了解CRA包含的内容以及如何遵守。 什么是CRA&#xff1f; 《网络弹性法案》&#xff08;CRA&#xff09;是即将出台的欧盟法规&#xff0c;旨在确保在欧盟销售的所有数字产品和服务&#xff08;如连接到互联网的软件和硬件&#xff09;都采用强大的网络安全措施。 该法案要求…

【数据结构与算法】选择排序篇----详解直接插入排序和哈希排序【图文讲解】

欢迎来到CILMY23的博客 &#x1f3c6;本篇主题为&#xff1a;【数据结构与算法】选择排序篇----详解直接插入排序和哈希排序 &#x1f3c6;个人主页&#xff1a;CILMY23-CSDN博客 &#x1f3c6;系列专栏&#xff1a;Python | C | C语言 | 数据结构与算法 | 贪心算法 | Linux…

Chrome浏览器的Profile数据内容简介

前文简介了Chrome存储的账密/Cookie数据&#xff1a;一段代码读取Chrome存储的所有账号密码和Cookie 本文再扩展介绍一下Chrome存储的其它一些隐私数据。 注&#xff1a;因为业务需要&#xff0c;简单调研了一些基本内容和存储路径&#xff0c;没有深入去研究&#xff0c;有啥…

新160个crackme - 002-abexcm5

运行分析 猜测需要输入正确序列号 PE分析 32位&#xff0c;ASM程序&#xff0c;无壳 静态分析 ida shift F12 &#xff0c;发现字符串定位主函数 分析主函数 lstrcat&#xff1a;拼接字符串 lstrcmpiA&#xff1a;比较字符串 动态调试 serial输入123456调试 发现序列号…

Codeforces Round 957 (Div. 3)(A~D题)

A. Only Pluses 思路: 优先增加最小的数&#xff0c;它们的乘积会是最优,假如只有两个数a和b&#xff0c;b>a&#xff0c;那么a 1&#xff0c;就增加一份b。如果b 1&#xff0c;只能增加1份a。因为 b > a&#xff0c;所以增加小的数是最优的。 代码: #include<bi…

Spring Boot集成groovy快速入门Demo

1.什么是groovy&#xff1f; Groovy 是构建在 JVM 上的一个轻量级却强大的动态语言&#xff0c;它结合了 Python、Ruby 和 Smalltalk 的许多强大的特性。 Groovy 就是用 Java 写的&#xff0c;Groovy 语法与 Java 语法类似&#xff0c;Groovy 代码能够与 Java 代码很好地结合&…

STM32MP135裸机编程:定时器内核时钟频率计算方法

0 工具准备 STM32MP13xx参考手册 1 定时器内核时钟频率计算方法 1.1 定时器分组 STM32MP135的定时器按照时钟源不同分成了三组&#xff0c;如下&#xff1a; APB1: APB2: APB6&#xff1a; 1.2 定时器内核时钟频率计算方法 APB1DIV是APB1的分频系数&#xff0c;APB2DIV、…

python双下划线怎么打

连续按键盘上的“shift_”键两次即可&#xff0c;不同编辑器可能显示会不太一样。像图1中那样没连起来也是对的&#xff0c;没有语法错误。

基于python豆瓣电影爬虫数据可视化分析推荐系统(完整系统源码+数据库+详细文档+论文+详细部署教程)

文章目录 基于python豆瓣电影爬虫数据可视化分析推荐系统&#xff08;完整系统源码数据库详细文档论文详细部署教程&#xff09;一、 选题背景二、研究目的三、开发技术介绍1、Django框架2、LDA3、机器学习推荐算法4、大数据爬虫5、大数据Echarts可视化 四、系统设计思想五、部…

C++ | Leetcode C++题解之第235题二叉搜索树的最近公共祖先

题目&#xff1a; 题解&#xff1a; class Solution { public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {TreeNode* ancestor root;while (true) {if (p->val < ancestor->val && q->val < ancestor->val) {anc…

贪心算法案例

1.买卖股票的最佳时机 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票&#xff0c;并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从这笔…

代码随想录算法训练营第31天|LeetCode 56. 合并区间、738.单调递增的数字、968.监控二叉树

1. LeetCode 56. 合并区间 题目链接&#xff1a;https://leetcode.cn/problems/merge-intervals/description/ 文章链接&#xff1a;https://programmercarl.com/0056.合并区间.html 视频链接&#xff1a;https://www.bilibili.com/video/BV1wx4y157nD 思路&#xff1a; 本题关…

SpringBoot新手快速入门系列教程十一:自动生成API文档,Springboot3.x集成SpringDoc

本次项目我们用Maven来做&#xff0c;最近发现gradle其实很多项目的支持比较差&#xff0c;所以项目还是用Maven来新建项目。对比了市面上的几种API生成第三方库&#xff0c;只有springdoc 是能够按照文档就能部署出来的。 官网&#xff1a; OpenAPI 3 Library for spring-bo…