性能优化之Tomcat优化策略

news2024/11/23 1:09:49

一、优化策略

系统性能的衡量指标,主要是响应时间和吞吐量。

1)响应时间:执行某个操作的耗时;

2) 吞吐量:系统在给定时间内能够支持的事务数量,单位为TPS(Transactions PerSecond的缩写,也就是事务数/秒,一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。

Tomcat优化从两个方面进行

1)JVM虚拟机优化(优化内存模型)

2)Tomcat自身配置的优化(比如是否使用了共享线程池?IO模型?)

调优是一个过程,不是目的也不是一蹴而就的,必须根据自己的真实生产环境来进行调整。

二、Jvm虚拟机运行优化

Java 虚拟机的运行优化主要是内存分配和垃圾回收策略的优化:

  • 内存直接影响服务的运行效率和吞吐量
  • 垃圾回收机制会不同程度地导致程序运行中断(垃圾回收策略不同,垃圾回收次数和回收效率都是不同的

1) Java 虚拟机内存模型和相关参数

参数调整示例:

JAVA_OPTS = "-server -Xms2048m -Xnx2048m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m"
参数参数作用优化建议
-server启动Server,以服务端模式运行服务端模式建议开启
-Xms最小堆内存建议与-Xmx设置相同
-Xmx最大对内存建议设置为可用内存的80%
-XX:MetaspaceSize元空间初始值
XX:MaxMetaspaceSize元空间最大堆内存默认无限
-XX:NewRatio年轻代和老年代大小比值。取值为整数,默认为2不需要修改
-XX:SurvivorRatioEden区与Survivor区大小的比值。取值为整数,默认为8不需要修改

2) 垃圾回收(GC)策略垃圾回收性能指标吞吐量:

  • 工作时间(排除GC时间)占总时间的百分比, 工作时间并不仅是程序运行的时间,还包含内存分配时间。
  • 暂停时间:由垃圾回收导致的应用程序停止响应次数/时间。

垃圾收集器

  • 串行收集器(Serial Collector)
  1. 单线程执行所有的垃圾回收工作, 适用于单核CPU服务器工作进程
  2. 工作进程-----|(单线程)垃圾回收线程进行垃圾收集|---工作进程继续
  • 并行收集器(Parallel Collector)
  1. 工作进程-----|(多线程)垃圾回收线程进行垃圾收集|---工作进程继续
  2. 又称为吞吐量收集器(关注吞吐量), 以并行的方式执行年轻代的垃圾回收, 该方式可以显著降低垃圾回收的开销(指多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态)。
  3. 适用于多处理器或多线程硬件上运行的数据量较大的应。
  • 并发收集器(Concurrent Collector)
  1. 以并发的方式执行大部分垃圾回收工作,以缩短垃圾回收的暂停时间。
  2. 适用于那些响应时间优先于吞吐量的应用,因为该收集器虽然最小化了暂停时间(指用户线程与垃圾收集线程同时执行,但不一定是并行的,可能会交替进行),但是会降低应用程序的性能。
  • CMS收集器(Concurrent Mark Sweep Collector)
  1. 并发标记清除收集器,适用于那些更愿意缩短垃圾回收暂停时间并且负担的起与垃圾回收共享处理器资源的应用。
  • G1收集器(Garbage-First Garbage Collector)
  1. 适用于大容量内存的多核服务器,可以在满足垃圾回收暂停时间目标的同时,以最大可能性实现高吞吐量( JDK1.7之后)。

工作在新生代的垃圾回收器:SerialGC、ParallelGC、ParNewGC。

工作在老年代的垃圾回收器:ConcMarkSweepGC(CMS)、SerialGC、ParallelOldGC。

G1同时工作在新生代和老年代。

使用jstat -gc pid或jstat -gcutil pid查看java堆情况。

垃圾回收器参数
参数描述
-XX:+UseSerialGC启动串行垃圾收集器。
-XX:+UseParallelGC启动并行垃圾收集器。配置了该选项,那么-XX:+UseParallelOldGC默认启用
-XX:+UseParNewGC年轻代采用并行收集器。如果设置了-XX:+UseConcMarkSweepGC选项,自动启动
-XX:+ParallelGCThreads年轻代及老年代垃圾回收使用的线程数。默认值依赖于JVM使用的CPU个数。
-XX:+UseConcMarkSweepGC(CMS)对于老年代,启用CMS垃圾收集器。当并行收集器无法满足应用的延迟需求是,推荐使用CMS或G1收集器。启用该选项后,-XX:+UseParNewGC白动启用。
-XX:+UseG1GC启用G1收集器。G1是服务器类型的收集器,用于多核、大内存的机器它在保持高吞吐量的情况下,高概率满足GC暂停时间的目标。

在bin/catalina.sh的脚本中,追加如下配置:

JAVA OPTS="-XX:+UeeConcMarkSweepGC"

三、Tomcat配置调优

  • 调整tomcat线程池

  • 调整tomcat的连接器

调整tomcat/conf/server.xml 中关于链接器的配置可以提升应用服务器的性能

参数说明
maxConnections最大连接数,当到达该值后,服务器接收但不会处理更多的请求,额外的请求将会阻塞直到连接数低于maxConnections。可通过ulimit-a 查看服务器限制。对于CPU要求更高(计算密集型)时,建议不要配置过大;对于CPU要求不是特别高时,建议配置在2000左右(受服务器性能影响)。 当然这个需要服务器硬件的支持
maxThreads最大线程数需要根据服务器的硬件情况,进行一个合理的设置
acceptCount最大排队等待数当服务器接收的请求数量到达maxConnections,此时Tomcat会将后面的请求,存放在任务队列中进行排序,acceptCount指的就是任务队列中排队等待的请求数。一台Tomcat的最大的请求处理数量是maxConnectionstacceptCount
  • 禁用 AJP 连接器
<!-- Define an AJP 1.3 Connector on port 8089 -->
<!-- 禁用AJP协议 -->
<!-- 
<Connector port="8009" protocol="AIP/1.3" executor="comnonThreadpoal" redirectPort="443"/>
-->

  • 调整 IO 模式

Tomcat8之前的版本默认使用BIO(阻塞式IO),对于每一个请求都要创建一个线程来处理,不适合高并发;Tomcat8以后的版本默认使用NIO模式(非阻塞式IO)

<!--org.apache.coyote.http11.Http11NioProtocal,非阻塞式Java NIO链接器 -->
<Connector port="8080"protocol="HTTP/1.1" executor="commonThreadPool"
        connectionTmeout="2000"
        redirectPort="8443" />

当Tomcat并发性能有较高要求或者出现瓶颈时,我们可以尝试使用APR模式,APR(Apache PortableRuntime)是从操作系统级别解决异步IO问题,使用时需要在操作系统上安装APR和Native(因为APR原理是使用使用JNI技术调用操作系统底层的IO接口)

  • 动静分离

可以使用Nginx+Tomcat相结合的部署方案,Nginx负责静态资源访问,Tomcat负责Jsp等动态资源访问处理(因为Tomcat不擅⻓处理静态资源)

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

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

相关文章

WhatsApp App Vs WhatsApp API,哪一个更适合你?

WhatsApp在全球拥有超过20亿月度活跃用户&#xff0c;是一个深受欢迎、可靠和安全的跨平台信息服务&#xff0c;使其成为与朋友、家人、同事和客户通信的首选移动信息程序。使用WhatsApp聊天机器人使推销你的公司和获得新客户变得更简单。 一、让我们先来看看WhatsApp个人应用…

VR全景的价值体现在哪里?VR全景创业有市场吗?

在这个5G时代&#xff0c;思维一定要快&#xff0c;动作还得要帅&#xff0c;动作快的现在已经挣到钱了。VR全景行业赶上了风口&#xff0c;在5G的搭载下发展非常迅速。 随着时代的发展&#xff0c;各行各业百花齐放&#xff0c;而创业的门槛也越来越低&#xff0c;作为创业项目…

怎样使用CAD在nVisual中创建楼层场景

nVisual是一款网络基础设施可视化管理软件&#xff0c;通过模型可规划即将建设的机房效果&#xff0c;或者将已有的机房场景复刻至系统中&#xff0c;便于运维管理者清晰的了解数据中心/机房设备及线缆路由连接关系。 用户手里的资料一般都会有机房的CAD图纸&#xff0c;在nVi…

玩转Typora

玩转Typora 文章目录 玩转Typora我的用法安装typoraMath行内公式&#xff1a;块公式&#xff1a;矩阵行列式 DiagramsFlowMermaidClass DiagramFlowchartPie ChartSequence Diagram SequenceIframeAudio 文本颜色、居中设置Typora修改css格式主题修改滚动条颜色背景色**webkit下…

使用 Jetson Orin Nano 在 Ubuntu 20.04 中编译安装 ROS2 Foxy

本文详细介绍了在 Jetson Orin Nano 类似的 ARM 设备上编译安装 ROS2 的 Foxy 分支的过程&#xff0c;包括从源代码编译、安装依赖库、设置环境变量等方面。同时&#xff0c;针对安装过程中可能遇到的问题&#xff0c;提供了相应的解决方案&#xff0c;以帮助读者顺利完成 ROS2…

calHist()-使用OpenCV和C++计算直方图

calHist()-使用OpenCV和C计算直方图 在计算机视觉中&#xff0c;几乎处处都使用直方图。对于阈值计算&#xff0c;我们使用灰度直方图。对于白平衡&#xff0c;我们使用直方图。对于图片中的对象跟踪&#xff0c;比如CamShift技术&#xff0c;我们使用颜色直方图&#xff0c;采…

SpringCloud Alibaba 之 Config配置中心,Redis分布式锁详解

目录 1.服务配置中心 1.1 服务配置中心介绍 1.2 Nacos Config 实践 1.2.1 Nacos config 入门案例 1.2.2 Nacos 配置动态刷新 1.2.3 配置共享 1.2.4 nacos 几个概念 2.分布式锁 2.1 分布式锁介绍 2.2 Redisson 2.2.1 Redisson 实践 2.2.2 Redisson 原理 1.服务配置中心…

HTTPS协议详解

https是http over TLS&#xff08;transport security layer&#xff09;的缩写。也即说明http协议是不安全的&#xff0c;是TLS协议保证的安全。协议层级图如下: 我们常说https协议是安全的&#xff0c;主要是指两点&#xff1a; 第一&#xff0c;通信两端可以进行身份验证。…

复习一周,面了京东和百度,不小心都拿了Offer...

我个人情况是5年软件测试经验&#xff0c;在家复习了一周&#xff0c;面了京东和百度&#xff0c;都顺利拿下offer&#xff0c;下面是我的面试经历分享&#xff0c;希望能带来一些不一样的启发和帮助。 两家公司最常问的就是下面这些问题&#xff1a; 请介绍一下你之前做过哪些…

万用表位数的定义以及对应的ADC位数

万用表的精度通常会用几位半来描述&#xff1a; 比如大部分普通的万用表是 3 / 的精度&#xff0c;也就是俗称的3位半。 也就是说这个万用表最多显示4个数字&#xff0c;其中3位可以显示完整的0~9&#xff0c; 而这位是4个数字中的最高位&#xff0c;2代表只能显示0和1两个数…

【OAI】OAI5G核心网VPP-UPF网元分析

文章目录 VPP_UPF_CONFIG_GENERATION.mdVPP UPF Configuration GenerationEnvironment variablesInterfacesInterface Configuration ExamplesCentral UPFA-UPFI-UPFUL CL FEATURE_SET.mdVPP_UPG_CLI参考文献 VPP_UPF_CONFIG_GENERATION.md VPP UPF Configuration Generation …

(十三)地理数据库创建——进一步定义数据库①

地理数据库创建——进一步定义数据库① 目录 地理数据库创建——进一步定义数据库① 1.建立索引1.1建立属性索引1.2修改空间索引 2.创建子类和属性域2.1属性域2.2子类型2.3属性分割和合并2.4属性域操作2.4.1建立属性域2.4.2修改属性域2.4.3关联属性域 2.5子类型操作2.5.1建立子…

动态规划--青蛙跳台阶

青蛙跳台阶 前言青蛙跳台阶题目最优解结构性质画图分析发现规律验证规律 动规表达式青蛙跳台阶与斐波那契数列的不同之处 递归实现代码实现测试结果递归过程画图分析 非递归实现代码实现对比分析 前言 斐波那契数列每次学都有不一样的体会&#xff0c;从最开始简单理解就是&am…

无监督域适应 (UDA)(2)

本帖介绍UDA 的一个分支&#xff1a;bi-classifier adversarial learning。 一、回顾 在介绍 bi-classifier adversarial learning 之前&#xff0c;先来回忆一下 adversarial generation framework, 因为前者是基于后者的改进。 如图1所示&#xff0c;左边表示的是1&#xf…

DeepSORT 论文精读

摘要 SORT&#xff08;Simple Online and Realtime Tracking&#xff09; we integrate appearance information to improve the performance of SORT 集成外观信息来提高SORT的表现 we are able to track objects through longer periods of occlusions, effectively reduci…

JVM学习05:内存模型

JVM学习05&#xff1a;内存模型 1、java内存模型 很多人将java 内存结构与java 内存模型傻傻分不清&#xff0c;java 内存模型是 **Java Memory Model&#xff08;JMM&#xff09;**的意思。 JMM 定义了一套在多线程读写共享数据时&#xff08;成员变量、数组&#xff09;时…

UE4/5对背景音乐的调整设置

音乐是一个游戏必不可少的因素。 而在游戏设置中&#xff0c;必不可少的就有对背景音乐的声音大小进行设置&#xff0c;而我们需要的就是如何对背景音乐进行设置&#xff1a; 准备两个蓝图&#xff0c;分别是音效类和音效类混合。 然后打开音效类&#xff0c;我们可以看见下图…

如何用postman进行http接口测试,这篇文章绝对会颠覆你的认知

目录 前言 优点&#xff1a; 1、什么是POSTMAN 2、新建一个项目 2、新增一个用例 3、添加请求信息 4、post请求参数 5、添加头信息 6、预处理和结果检查 7、全局变量与环境变量 8、导出用例为代码 9、批量执行用例 前言 HTTP的接口测试工具有很多&#xff0c;可以进…

贪心法——黑白连线问题

一、问题描述 黑白连线Time Limit: 1000 MSMemory Limit: 1000 KB Description 给定直线上2n个点的序列P[1,2,… ,2n]&#xff0c;每个点P[i]要么是白点要么是黑点&#xff0c;其中共有n个白点和n个黑点&#xff0c; 相邻两个点之间距离均为1&#xff0c;请设计一个算法将每…

第六章:C语言的数组

在我的生活中&#xff0c;有许许多多的东西&#xff0c;有强迫症的小伙伴们&#xff0c;喜欢把它们分类到一个地方保存&#xff0c;这样一来&#xff0c;用的时候就按分类的形式来找自己需要的东西&#xff0c;而C语言也是如此&#xff0c;当有多个整形的数字是&#xff0c;就可…