Tomcat优化

news2024/11/26 2:29:50

目录

  • Tomcat 优化
    • Tomcat 配置文件参数优化
    • 内核优化
    • Tomcat JVM优化

Tomcat 优化

Tomcat默认安装下的缺省配置并不适合生产环境,它可能会频繁出现假死现象需要重启,只有通过不断压测优化才能让它最高效率稳定的运行。
优化主要包括三方面,分别为:

  • 操作系统优化(内核参数优化)
  • Tomcat配置文件参数优化
  • Java虚拟机(JVM)调优

Tomcat 配置文件参数优化

常用的优化相关参数如下:

参数功能
【redirectPort】如果某连接器支持的协议是HTTP,当接受客户端发来的HTTPS请求时,则转发至此属性定义的8443端口
【maxThreads】Tomcat使用线程来处理接收的每个请求,这个值表示Tomcat可创建的最大的线程数,即支持的最大并发连接数,默认值是200
【minSpareThreads】最小空闲线程数,Tomcat 启动时的初始化的线程数,表示即使没有人使用也开这么多空线程等待,默认值是10
【maxSpareThreads】最大备用线程数,一旦创建的线程超过这个值,Tomcat就会关闭不在需要的socket线程。默认值是-1(无限制)。一般不需要指定
【processorCache】进程缓存器,可以提升并发请求。默认值是200,如果不做限制的话可以设置为-1,一般采用maxThreads的值或者-1
【URIEncoding】指定Tomcat容器的URL编码格式,网站一般采用UTF-8作为默认编码。
【connectionTimeout】网络连接超时,单位:毫秒,设置为0表示永不超时,这样设置有隐患的。通常默认20000毫秒就可以
【enableLookups】是否反查域名,以返回远程主机的主机名,取值为:true 或 false,如果设置为 false,则直接返回 IP 地址,为了提高处理能力,应设置为 false。
【disableUploadTimeout】上传时是否使用超时机制。应设置为 true。
【connectionUploadTimeout】上传超时时间,毕竟文件上传可能需要消耗更多的时间,这个根据你自己的业务需要自己调,以使Servlet有较长的时间来完成它的执行,需要与上一个参数一起配合使用才会生效。
【acceptCount】指定当所有可以使用的处理请求的线程数都被使用时,可传入连接请求的最大队列长度,超过这个数的请求将不予处理,默认为 100 个。
【maxKeepAliveRequests】指定一个长连接的最大请求数。默认长连接是打开的,设置为1时,代表关闭长连接;为-1时,代表请求数无限制
【compression】是否对响应的数据进行GZIP压缩,off:表示禁止压缩;on:表示允许压缩(文本将被压缩)、force:表示所有情况下都进行压缩,默认值为 off,压缩数据后可以有效的减少页面的大小,一般可以减小 1/3 左右,节省带宽。
【compressionMinSize】表示压缩响应的最小值,只有当响应报文大小大于这个值的时候才会对报文进行压缩,如果开启了压缩功能,默认值就是 2048。
【compressableMimeType】压缩类型,指定对哪些类型的文件进行数据压缩。
【noCompressionUserAgents=“gozilla, traviata”】对于以下的浏览器,不启用压缩。如果已经进行了动静分离处理,静态页面和图片等数据就不需做 Tomcat 处理,也就不要在 Tomcat 中配置压缩了。

以上是一些常用的配置参数,还有好多其它的参数设置,还可以继续深入的优化,HTTP Connector 与 AJP Connector 的参数属性值,可以参考官方文档的详细说明

传送: 官方网站

Tomcat配置文件
vim /usr/local/tomcat/conf/server.xml

<Connector port="8080" protocol="HTTP/11.1"     
connectionTimeout="20000"             ##网络连接超时时间2000毫秒
redirectPort="8443"                   ## 当接收客户端发来的HTTPS请求时,转发至8443 端口
--71行--插入
minSpareThreads="50"                  ##最小空闲线程为50
enableLookups="false"                 ##不反查域名,直接返回IP地址,可以提高处理能力
disableUploadTimeout="true"           ##上传时使用超时机制
acceptCount="300"                     ##当没有可以使用的处理请求的线程时,最多可以排队等待300个请求,超过这个数的请求将不予处理
maxThreads="500"                      ##可创建的最大线程数(Tomcat支持的最大并发数)
processorCache="500"                  ##进程缓冲器,可以提升并发请求,值和Tomcat可创建最大线程数一致         
URIEncoding="UTF-8"                   ##指定 Tomcat 容器的 URL 编码格式,采用UTF-8作为默认编码
maxKeepAliveRequests="100"            ##长连接的最大请求数为100
compression="on"                      ##允许对响应的数据进行GZIP压缩
compressionMinSize="2048"             ##压缩响应的最小值为2048,只有当响应报文大小 大于这个值的时候才会对报文进行压缩
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,image/gif,image /jpg,image/png"/>    ## 指定哪些类型文件可以进行数据压缩

在这里插入图片描述

内核优化

在这里插入图片描述

内核优化配置文件
vim /etc/security/limits.conf
在这里插入图片描述
在这里插入图片描述

另一个系统内核优化文件
vim /etc/sysctl.conf

net.ipv4.tcp_syncookies =1			#开启SYNCookies
net.ipv4.tcp_tw_reuse = 1			#允许将TIME-WAIT sockets重新用于新的TCP连接,
net.ipv4.tcp_tw_recycle = 1			#开启TCP连接中TIME-WAIT sockets的快速回收
net.ipv4.tcp_fin_timeout = 30		#修改系统默认的fin TIMEOUT 时间
net.ipv4.ip_local_port_range = 1024 65535   #外向连接的端口范围
net.ipv4.tcp max tw buckets= 5000          # 系统同时保持TIME WAIT最大数量         
net.ipv4.tcp_max_syn_backlog = 8192         #SYN队列长度
net.ipv4.tcp_keepalive_time = 1200        #  发送keepalive探测包消息的频度

Tomcat JVM优化

环境规格以 2C4G 为例
配置添加在 Tomcat 的 bin 目录下 catalina.sh 里,位置在 cygwin=false 前。

vim /usr/local/tomcat/bin/catalina.sh

JAVA_OPTS="$JAVA_OPTS -server -Xms2048m -Xmx2048m -Xmn768m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/local/tomcat/temp/oom.hprof -XX:ParallelGCThreads=2 -XX:PermSize=1024m -XX:MaxPermSize=1024m -Djava.awt.headless=true -XX:+DisableExplicitGC" 

cygwin=false

参数说明:

  • -server:一定要作为第一个参数,在多个CPU时性能佳

  • -Xms:堆内存的初始大小,是分配JVM的初始内存,默认为物理内存的1/64。一般来讲,此值设的大点,程序会启动的快一点。

  • -Xmx:堆内存的最大大小,是分配JVM的最大内存,默认为物理内存的1/4。如果程序运行需要占用更多的内存,超出了这个设置值,就会抛出OutOfMemory异常。

    • 默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制。
    • 因此建议-Xms与-Xmx设成一样的值,均设为物理内存的一半。其目的是为了避免在java每次GC(垃圾回收机制清理堆区)后需要重新调整堆的大小而浪费资源。
  • -Xmn:堆内新生代的大小,通过这个值也可以得到老生代的大小:-Xmx减去-Xmn。官方推荐配置为整个堆的 3/8。

    • 堆区进一步细化分为:新生代、中生代、老生代。
    • java中每新new一个对象所占用的内存空间就是新生代的空间,当java垃圾回收机制对堆区进行资源回收后,那些新生代中没有被回收的资源将被转移到中生代,中生代的被转移到老生代。
    • 整个JVM堆大小 = 新生代大小 + 老生代大小 + 永久代大小
  • -Xss:设置每个线程可使用的内存大小,即栈的大小。一般情况下,设置256k就足够了,此配置将会影响此进程中并发线程数的大小。

  • -XX:ParallelGCThreads:配置并行收集器的线程数,即:同时有多少个线程一起进行垃圾回收。当 CPU 数量小于8,此值建议配置等于 CPU 数量。

  • -XX:PermSize:设置非堆内存初始值,即持久代内存大小,默认是物理内存的1/4

  • -XX:MaxPermSize:最大非堆内存的大小,即最大持久代内存大小,默认是物理内存的1/4

    • 非堆区内存是不会被java垃圾回收机制进行处理的,且最大堆内存与最大非堆内存的和不能超出操作系统的可用内存。
    • XMX和XMS设置一样大,MaxPermSize和MinPermSize设置一样大,这样可以减轻伸缩堆大小带来的压力。
  • -XX:+HeapDumpOnOutOfMemoryError:表示当JVM发生OOM时,自动生成DUMP文件

  • -XX:HeapDumpPath:表示生成DUMP文件的路径

  • -XX:+UseParNewGC:对新生代采用多线程并行回收,缩短垃圾收集的时间

  • -XX:+UseConcMarkSweepGC:并发标记清除收集器,它是老年代的收集算法,缩短垃圾收集的时间

  • -XX:+DisableExplicitGC:禁止调用System.gc(),防止误调用gc方法导致系统的 JVM 大起大落而使系统响应时间严重降低。

  • -Djava.awt.headless=true:免避在 Linux/Unix 环境下 Web 网页不能正常显示图片

  • -XX:+CMSParallelRemarkEnabled:启用并行标记,降低标记停顿

  • -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0:这两个参数默认值就是这样的,表示触发FullGC时压缩堆,优化内存碎片

  • -XX:CMSInitiatingOccupancyFraction=70:在应用程序使用70%完内存后开始CMS垃圾收集

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

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

相关文章

安装 linux系统–Ubuntu 20.04(实体机安装)

安装 linux系统–Ubuntu 20.04(实体机安装) 一、刻录操作系统镜像到U盘 使用Rufus刻录软件进行刻录&#xff0c;采用默认设置&#xff0c;以ISO模式写入等 二、开机F12(我是dell笔记本&#xff0c;其他笔记本自行百度相应选项)&#xff0c;进入Boot Options选项 选择开机启动…

「少即是多」商业策略的背后,隐藏着怎样的客户洞察?

奉行极简主义的年轻人们口中总是叨念这样一句话&#xff1a; “Less is more&#xff08;少即是多&#xff09;。” 它最早是由德国现代建筑大师路密斯凡德罗提出的一种设计理念&#xff0c;而后逐渐演变成一种生活方式&#xff0c;甚至一种商业策略。 比如&#xff0c;知名零售…

【业务功能篇17】Springboot +shedlock锁 实现定时任务

业务场景&#xff1a;我们在业务开发过程时&#xff0c;有时需要用到一些定时功能&#xff0c;定期的执行一些数据处理&#xff0c;比如每天固定时间去执行数据&#xff0c;判断是否有符合逻辑的情况&#xff0c;就生成一个告警单&#xff0c;提供给业务查看。 这里接着上一篇技…

async函数用法

目录 1.概念 2.本质 3.语法 4.特点 5.async基本使用 6.async里的await普通函数返回值 7.async里的await Promise函数成功返回值 8.async里的await Promise函数失败返回值 9.解决async里的await Promise函数失败后不执行下面内容 1.概念 真正意义上解决异步回调的问题&am…

okta/sf平台实现saml2.0单点登录集成实战(详细步骤+完整代码)

目录 第一步&#xff1a;注册okta账号 第二步&#xff1a;配置okta应用信息 第三步&#xff1a;下载Idp.xml文件 第四步&#xff1a;okta特定配置 第五步&#xff1a;集成测试 基于SuccessFactors的单点登录实现 Github工程代码链接 小结 笔者以前写过一篇关于saml2.0单…

Barra模型因子的构建及应用系列六之Book-to-Price因子

一、摘要 在前期的Barra模型系列文章中&#xff0c;我们构建了Size因子、Beta因子、Momentum因子、Residual Volatility因子和NonLinear Size因子&#xff0c;并分别创建了对应的单因子策略&#xff0c;其中Size因子和NonLinear Siz因子具有很强的收益能力。本节文章将在该系列…

AI 协助办公 |记一次用 GPT-4 写一个消息同步 App

GPT-4 最近风头正劲&#xff0c;作为 NebulaGraph 的研发人员的我自然是跟进新技术步伐。恰好&#xff0c;现在有一个将 Slack channel 消息同步到其他 IM 的需求&#xff0c;看看 GPT-4 能不能帮我完成这次的信息同步工具的代码编写工作。 本文记录了我同 GPT 主要的交互过程…

不定积分练习

不定积分练习 在看视频的时候遇到了一道比较有趣的题&#xff0c;在这里给大家分享一下。 题目 计算 ∫ ( 1 x − 1 x ) e x 1 x d x \int(1x-\dfrac 1x)e^{x\frac 1x}dx ∫(1x−x1​)exx1​dx 解&#xff1a; \qquad 原式 ∫ e x 1 x d x ∫ x ( 1 − 1 x 2 ) e x 1…

ESP Certificate Bundle 分享

基本概念 数字签名&#xff1a;是一种将相当于现实世界中的盖章、签字的功能在计算机世界中进行实现的技术。使用数字签名可以识别篡改和伪装&#xff0c;还可以防止否认。 证书&#xff1a;要开车得先靠驾照&#xff0c;驾照上面记有本人的照片、姓名、出生日期等个人信息&a…

【大唐杯学习超快速入门】5G智能网络优化

这里写目录标题 学习--实验背景上下行速率VOLTE掉话率优化时延优化 接入保持特性提升无线接通率切换成功率 附录 数据分析其他几种选项差不多 学习–实验背景 观看视频进行学习&#xff0c;理解该仿真的内涵 使用人工智能代替人工分析&#xff0c;对5G网络进行优化 上下行速率…

Centos Linux 操作系统中配置Gitlab服务器

基本准备 安装常用的工具包 linux根据操作系统的不同&#xff0c;有不同的安装工具&#xff0c;如&#xff0c; 操作系统 格式 工具 Debian .deb apt, apt-cache, apt-get, dpkg Ubuntu .deb apt, apt-cache, apt-get, dpkg CentOS .rpm yum Fedora .rpm dnf …

企业数智底座白皮书:详解数智平台必备的六大能力

在以“升级企业数智化底座”为主题的2023用友BIP技术大会上&#xff0c;用友联合全球权威咨询机构IDC共同发布《建设数字中国 升级数智底座——企业数智化底座白皮书》&#xff0c;在这本数智平台白皮书里详细解读了企业数智平台应该具备的六大基础能力。 当前企业数智化能力进…

一文剖析mlock锁原理

一般用户空间关联的物理页面是按需通过缺页异常的方式分配和调页&#xff0c;当系统物理内存不足时页面回收算法会回收一些最近很少使用的页面&#xff0c;但是有时候我们需要锁住一些物理页面防止其被回收&#xff08;如时间有严格要求的应用&#xff09;&#xff0c;Linux中提…

市面上的智能电表都有多少安的?适用于那些场景?

随着智能化技术的快速发展&#xff0c;智能电表已经成为了家庭和公寓物业配电系统的必备设备之一。智能电表的功率等级通常为10A或15A&#xff0c;具体取决于电表型号和用途。那么&#xff0c;这些功率等级的智能电表适用于哪些场景呢&#xff1f; 首先&#xff0c;10A功率等级…

【实验练习】基于自注意力机制Vision Transformer模型实现人脸朝向识别 (Python实现) 内容原创

题目 人脸识别是一个复杂的模式识别问题&#xff0c;人脸识别是人脸应用研究中非常重要的一步。由于人脸形状不规则、光线和背景条件多样&#xff0c;导致人脸检测精度受限。实际应用中&#xff0c;大量图像和视频源中人脸的位置、朝向、朝向角度都不是固定的&#xff0c;极大…

内网渗透—隧道技术

内网渗透—隧道技术 1. 隧道技术介绍1.1. 内网—隧道技术1.2. 常见的隧道协议1.3. 前置条件1.4. 判断内网的连通性 2. 网络层隧道技术2.1. ICMP隧道技术2.1.1. 常见工具2.1.2. Pingtunnel基础演示2.1.2.1. 下载服务端2.1.2.2. 下载客户端2.1.2.3. 设置CS连接2.1.2.4. 连接测试 …

功能上新|对比分析、Batches数量、函数释义Tips

本篇是继功能上新&#xff5c;内存篇、GPU篇之后&#xff0c;为大家展示更多关于提升浏览UWA GOT Online Overview报告体验的优化项&#xff0c;包括Overview报告的对比分析、Batches数量、函数释义Tips等。这些功能可以让你更快上手对报告的理解&#xff0c;亦或者更好地融入在…

.Net Core 6 WebApi 项目搭建(一、简单搭建)

前言 对于后端开发者最耻辱的是什么&#xff0c;是只会增删改查&#xff0c;只会CV&#xff0c;只会业务代码。没错&#xff0c;我就是被钉在耻辱柱上的一员&#xff0c;3年开发经验&#xff0c;不会搭建框架&#xff0c;只会写业务代码&#xff0c;丢人丢人啊&#xff0c;所以…

【XR】One More Thing:Vision Pro ,7年磨一剑,2023WWDC苹果发布Vision MR

One More Thing&#xff1a;Vision Pro &#xff0c;7年磨一剑&#xff0c;2023WWDC苹果发布Vision MR 1. 苹果MR Vision Pro&#xff1a;1. 专利布局&#xff1a;苹果表示在开发过程中申请了5000多项专利。2. 专属感知计算芯片3. 显示屏系统方面4. 续航方面5. Vision MR 的新框…

MATLAB安装配置MinGW-w64 C++编译器

文章目录 前言一、Mingw安装1、安装教程2、验证 二、MATLAB安装配置MinGW总结 #pic_center 前言 只是为方便学习&#xff0c;不做其他用途 一、Mingw安装 在网上找到的安装一直报错&#xff1a;The file has been downloaded incorrectly 1、安装教程 建议参考博客Mingw快捷安…