Tomcat 的两类调优方式

【建议收藏】Tomcat 优化总结 Tomcat作为一个稳定、高性能且易于使用的Servlet容器,适用于各种类型的Java Web应用程序,并且在许多不同的应用场景中都得到了广泛的应用和认可。例如企业级Web应用程序、电子商务平台、 教育和培训项目等。后端开发人员通常需要针对 Tomcat 来做优化,V 哥今天整理了 Tomcat的优化策略给你参考,上干货!(备注:有想跳槽的兄弟文末联系)。Tomcat作为Java应用程序运行在JVM上,通过调整JVM参数来优化内存、垃圾回收等方面的性能。这包括设置堆大小、垃圾回收算法、线程池参数等。通过- 阅读详情

一、Tomcat 调优大致分为两大类:

1️⃣Tomcat 的自身调优:

  1. 采用动静分离节约 Tomcat 的性能
  2. 禁用 AJP 连接器
  3. 调整 Tomcat 的线程池
  4. 调整 Tomcat 的连接器
  5. 修改 Tomcat 的运行模式

2️⃣JVM 的调优 :调优 JVM 内存

二、Tomcat 自身调优

1️⃣采用动静分离

静态资源如果也让 Tomcat 处理的话,Tomcat 的性能会被损耗很多。所以一般都是采用:Nginx+Tomcat 实现动静分离。Nginx 实现静态资源的访问,让 Tomcat 只负责 jsp 文件的解析工作。

2️⃣禁用 AJP 连接器

AJP 的全称 Apache JServer Protocol。使用 Nginx+Tomcat 的架构,用不着 AJP,所以禁用。

  1. Linux 下修改 TOMCAT_HOME/bin/catalina.sh,在其中加入如下代码,可以放在 CLASSPATH = 下面:
JAVA_OPTS="-server -XX:PermSize=512M -XX:MaxPermSize=1024m -Xms2048m -Xmx2048m"
  1. windows 下修改 TOMCAT_HOME/bin/catalina.bat,在其中加入如下代码,可以放在 set CLASSPATH = 下面:
set JAVA_OPTS=-server -XX:PermSize=512M -XX:MaxPermSize=1024m -Xms2048m -Xmx2048m

参数说明:

  • -server:启用 JDK 的 server 版本;
  • -Xms:Java 虚拟机初始化时堆的最小内存,一般与 Xmx 配置为相同值,这样的好处是 GC 不必再为扩展内存空间而消耗性能;
  • -Xmx:Java 虚拟机可使用堆的最大内存;
  • -XX:PermSize:Java 虚拟机永久代大小;
  • -XX:MaxPermSize:Java 虚拟机永久代大小最大值;

3️⃣调优 Tomcat 线程池

打开 tomcat 的 server.xml,配置 Executor,相关参数说明如下:

​​<Executor 
     name="tomcatThreadPool" 
     namePrefix="catalina-exec-" 
     maxThreads="150" 
     minSpareThreads="4" 
     maxIdLeTime="60000"/>

参数解释:

  • name:给执行器(线程池)起一个名字
  • namePrefix:指定线程池中的每一个线程的 name 前缀
  • maxThreads:线程池中最大的线程数量
    假设:请求的数量超过了“750”,这不是意味着将 maxThreads 属性值设置为“750”,它的最好解决方案是使用“Tomcat集群”。也就是说,如果有“1000”请求,两个 Tomcat 实例设置“maxThreads= 500”,而不是在单 Tomcat 实例的情况下设置 maxThreads=1000。
  • minSpareThreads:线程池中允许空闲的线程数量(多余的线程都杀死)
  • maxIdLeTime:一个线程空闲多久算是一个空闲线程

4️⃣调优 Tomcat 的连接器 Connector

打开 Tomcat 的 server.xml,(比较完整)配置 Connector,参数说明如下:

<Connector 
     executor = "tomcatThreadPool"
     port="8081" 
     protocol="HTTP/1.1" 
     connectionTimeout="20000"
     enableLookups="false"
     URIEncoding="UTF-8" 
     redirectPort="8443"
     maxThreads="600" 
     minSpareThreads="100" 
     acceptCount="700"
     maxSpareThreads="500" 
     server="None" />

参数解释:

  • executor:指定这个连接器所使用的执行器(线程池)。对应“Executor ”配置中的name值。
  • enableLookups=“false”:关闭 DNS 解析,减少性能损耗。
  • maxThreads=“X” 表示最多同时处理 X 个连接。相当于最大线程数。
  • minSpareThreads=“X” 初始化 X 个连接。最小空闲线程数,这里是一直会运行的线程。
  • acceptCount=“X” 当同时连接的人数达到 maxThreads 时,还可以排队,队列大小为 X。超过 X 就不处理。
  • maxSpareThreads=“X” 表示如果最多可以有 X 个线程,一旦超过 X 个,则会关闭不再需要的线程。
  • minProcessors:服务器启动时创建的最少线程数;
  • maxProcessors:最大可以创建的线程数;

注意:
与压缩有关系的配置:如果已经对代码进行了动静分离,静态页面和图片等数据就不需要 Tomcat 处理了,那么也就不需要在 Tomcat 中配置压缩了。

###5️⃣通过修改 Tomcat 的运行模式

同步阻塞IO (JAVA BIO)
Tomcat8 以下版本,默认使用的就是 BIO 模式。服务器实现模式为一个连接一个线程(one connection one thread),对于每一个请求都要创建一个线程来进行处理,不适合高并发。当然可以通过线程池机制改善。

同步非阻塞IO (JAVA NIO)
又分为异步阻塞 IO。与 BIO 最大的区别 one request one thread。可以复用同一个线程处理多个 connection(多路复用)。Tomcat8 以上版本,默认使用的就是NIO模式「非阻塞式 IO」。

异步非阻塞IO (Java NIO2又叫AIO)
与NIO的区别主要是操作系统的底层区别。可以做个比喻:比作快递,NIO就是网购后要自己到官网查下快递是否已经到了(可能是多次),然后自己去取快递;AIO就是快递员送货上门了(不用关注快递进度)。

##适用:

BIO 方式适用于连接数目比较小且固定的架构。这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4 以前的唯一选择,但程序直观简单易理解。

NIO 方式适用于连接数目多且连接比较短(轻操作)的架构。比如聊天服务器,并发局限于应用中,编程比较复杂,JDK1.4 开始支持。

AIO 方式使用于连接数目多且连接比较长(重操作)的架构。比如相册服务器,充分调用 OS 参与并发操作,编程比较复杂,JDK7 开始支持。

在server.xml中:

<Connector 
    executor = "tomcatThreadPool"
    port="8081" 
    protocol="HTTP/1.1"  
    connectionTimeout="20000" 
    URIEncoding="UTF-8"
    enableLookups="false" />

实现对Tomcat的IO切换。

###APR(Apache Portable Runtime)

APR 是一个高可移植库。它是 Apache HTTP Server 2.x 的核心,能更好地和其它本地 web 技术集成,总体上让 Java 更有效率作为一个高性能 web 服务器平台而不是简单作为后台容器。是 Tomcat 生产环境运行的首选方式,如果操作系统未安装 APR 或者 APR 路径未指到 Tomcat 默认可识别的路径,则 APR 模式无法启动,自动切换启动 NIO 模式。所以必须要安装 Apache Tomcat Native Library,直接启动就支持 APR,APR 是从操作系统级别解决异步 IO 问题,排除代码问题 Tomcat 优化到这个层次,可以大幅度的提高性能。APR 的本质就是使用 JNI 技术调用操作系统底层的 IO 接口,所以需要提前安装所需要的依赖。

在产品环境中,特别是直接使用 Tomcat 做 WEB 服务器的时候,应该使用 Tomcat Native 来提高其性能。如果不配 APR,基本上 300 个线程很快就会用满,以后的请求就只好等待。但是配上 APR 之后,并发的线程数量明显下降,从原来的 300 可能会马上下降到只有几十,新的请求会毫无阻塞的进来。
在局域网环境测,就算是 400 个并发,也是一瞬间就处理/传输完毕,但是在真实的 Internet 环境下,页面处理时间只占 0.1% 都不到,绝大部分时间都用来页面传输。如果不用 APR,一个线程同一时间只能处理一个用户,势必会造成阻塞。所以生产环境下用 APR 是非常必要的。

三、JVM 调优

Tomcat 是运行在 JVM 上的,所以对 JVM 的调优也是非常有必要的。启动时告诉 JVM 要一块大内存,调优内存是最直接的方式。调整堆大小的目的是最小化垃圾收集的时间,以在特定的时间内最大化处理客户的请求。找到 catalina.sh:

添加:

JAVA_OPTS='-Xms256m -Xmx512m'

完整参数设置:

JAVA_OPTS="-Djava.awt.headless=true 
-Dfile.encoding=UTF-8-server 
-Xms1024m 
-Xmx1024m 
-XX:NewSize=512m 
-XX:MaxNewSize=512m 
-XXermSize=512m 
-XX:MaxPermSize=512m 
-XX:+DisableExplicitGC"
  • -Xms Java 虚拟机初始化时堆的最小内存,一般与 Xmx 配置为相同值,这样的好处是 GC 不必再为扩展内存空间而消耗性能;
  • -Xmx Java 虚拟机可使用堆的最大内存。实际参数大小根据服务器配置或者项目具体设置。
Tomcat调优 请注意,上述步骤仅提供了基本的调优指导,并且具体的配置可能因应用程序的需求和环境而有所不同。在进行调优之前,建议备份相关的配置文件,并在测试环境中进行验证,以确保更改不会对生产环境造成负面影响。此外,还可以使用Tomcat提供的监控工具和日志来分析和诊断性能问题,以便进行更精确的调优。Tomcat调优是一个涉及多个方面的过程,主要包括JVM内存调整、线程池调整、禁用DNS查询、优化缓存设置以及启用静态资源缓存等。 阅读详情

相关推荐

Tomcat线程模型及调优

一、Tomcat线程模型 1. BIO   同步阻塞式I/O操作,表示Tomcat使用的是传统Java I/O操作(即Java.io包及其子包)。Tomcat7以下版本默认情况下是以bio模式运行的,由于每个请求都要创建一个线程来处理,线程开销较大,不能处理高并发的场景,在三种模式中性能也最低。启动tomcat看到如下日志,表示使用的是BIO模式。   tomcat6默认采用的。每个请求都要创建一个线程来处理,线程开销较大,不能处理高并发的场景。 2. NIO   同步非阻塞I/O操作。是

javalingyu的博客 1299

tomcat如何调优

Tomcat是一个流行的开源Java Servlet容器,用于部署和管理Java Web应用程序。调优Tomcat可以提高性能、并发处理能力和稳定性。

2301_78102191的博客 2221

HFSS螺旋线圈的优化设计与高效仿真实践

本文详细介绍了HFSS螺旋线圈的优化设计与高效仿真实践,涵盖核心参数设置、参数化建模、仿真加速技巧及结果分析。通过HFSS软件实现螺旋线圈的高效仿真,特别适用于无线充电和RFID系统设计,提升设计效率与性能验证准确性。

weixin_30235225的博客 445

JVM-优化

1、Tomcat8优化 tomcat服务器在JavaEE项目中使用率非常高,所以在生产环境对tomcat的优化也变得非常重要了。 对于tomcat的优化,主要是从2个方面入手,一是,tomcat自身的配置,另一个是tomcat所运行的jvm虚拟机的调优。 下面我们将从这2个方面进行讲解。 1.1、Tomcat配置优化 1.1.1、部署安装tomcat8 下载并安装: https://tomcat....

Thread_v的博客 1440

从牛顿冷却定律到热传导方程:一维热传导方程的物理直觉与数学推导

本文从牛顿冷却定律出发,结合傅里叶热传导定律和能量守恒原理,系统推导了一维热传导方程的数学形式。通过微元分析和物理直觉,揭示了温度随时间变化与空间二阶导数之间的关系,并阐释了热扩散率α的物理意义。文章还探讨了方程的边界条件、数值解法及其在材料科学和工程中的应用,为理解热量传递提供了清晰的物理图像和数学框架。

palm99的专栏 839

AutoCAD二次开发(.Net)之XData

对于CAD中的实体进行筛选等操作,常常会用到实体的XData属性,下面介绍一下实体的XData的增删改。 //XData的新增,修改跟新增一样,new一个ResultBuffer,赋值即可 Document doc=Application.DocumentManager.MdiActiveDocument; using (DocumentLock dl = doc.LockDocument()) { using (Transaction trans = doc.TransactionManager.S.

qq_21489689的博客 2594

Tomcat 调优的技巧

描述 最近在补充自己的短板,刚好整理到Tomcat调优这块,基本上面试必问,于是就花了点时间去搜集一下tomcat调优 都调了些什么,先记录一下调优手段,更多详细的原理和实现以后用到时候再来补充记录,下面就来介绍一下, tomcat调优大致分为两大类: 一、tomcat的自身调优 采用动静分离节约tomcat的性能 调整tomcat的线程池 调整tomcat的连接器 修改tomcat的运行模式 禁用AJP连接器 二、jvm的调优 调优Jvm内存 tomcat自身调优 采用动静分离 静态资

javalingyu的博客 2838

Spring AI Alibaba实战训练营-16 NL2SQL (自然语言转 SQL)应用开发指南

本文介绍了一个基于AI的智能BI应用开发项目,主要实现自然语言转SQL(NL2SQL)功能,包含对话模块、MCP模块、向量数据管理模块。项目采用Spring AI Alibaba框架,集成通义千问大模型,支持内存向量库和AnalyticDB向量数据库两种存储方案。重点展示了chat模块的三个控制器实现:AnalyticNl2SqlController用于生产环境,SimpleChatController适用于开发测试,Nl2sqlForGraphController支持基于图的复杂对话流程。系统通过将业务知

program哲学 1588

tomcat9调优2:Tomcat线程模型分析及其性能调优

文章目录Tomcat线程模型分析及其性能调优Tomcat的IO模型tomcat设计精髓点Tomcat调优 Tomcat线程模型分析及其性能调优 Tomcat的IO模型 Tomcat 支持的多种 I/O 模型和应用层协议。Tomcat 支持的 I/O 模型有: IO模型 描述 BIO (JIoEndpoint) 同步阻塞式IO,即Tomcat使用传统的java.io进行操作。该模式下每个请求都会创建一个线程,对性能开销大,不适合高并发场景。优点是稳定,适合连接数目小且固定架构。 NIO(N

admin522043032的博客 3469

微信小程序 - 解决报错 operateAudio:fail audioInstance is not set(wx.getRecorderManager苹果ios真机调试运行,播放音频播放出错解决)

微信小程序,苹果ios系统,真机测试报错,播放音频报错operateAudio:fail audioInstance not exist,errCode: -1,小程序生成音频播放报错errMsg,真机调试报错开发者工具没问题,wx.getRecorderManager,音频实例,InnerAudioContext,各种方法都试了不行,只有ios苹果手机有这个问题,IOS 出现 operateAudio,在iOS无法播放的解决方案,更新到最新版本了还是不行,链接没有特殊字符,微信小程序全局音频设置,手机上播

🏆 前端领域优质创作者 1万+

R语言coxph函数对加权数据集进行竞争风险模型拟合、regplot包的regplot函数可视化竞争风险回归模型的列线图nomogram、计算特定病例的事件概率(控制了竞争风险的累计事件概率)

R语言coxph函数对加权数据集进行竞争风险模型拟合、regplot包的regplot函数可视化竞争风险回归模型的列线图nomogram、计算特定病例的事件概率(控制了竞争风险的累计事件概率)

statistics+insight+vista+power 359

【面试总结】--tomcat调优方案

前段时间参加面试,面试过程中提到服务器的调优方案,这里总结一下。         首先说一下tomcat的调优方案:         Tomcat本身的优化,Java虚拟机调优,Tomcat 优化分为系统优化,接下来一个个介绍:          一、Tomcat本身的优化    Tomcat 的自身参数的优化,这块很像 ApacheHttp Server。修改

努力成为自己的榜样。 1万+

在 Eclipse 里快速用上 SAP Joule:ABAP 开发者的 AI 助手上手指南

本文介绍了SAP Joule for developers如何集成在ABAP开发工具中,为开发者提供AI辅助能力。主要内容包括: Joule作为ADT的增强层,直接嵌入开发流程,支持在项目资源管理器、代码编辑器等场景下通过上下文菜单调用AI功能。 核心使用方式:打开Joule视图后,可在开发对象、代码片段等上下文中使用自然语言交互,请求解释、生成测试或获取示例代码。 重点功能: Explain:解释现有代码逻辑,降低理解成本 ABAP Unit测试生成:快速创建与上下文相关的测试用例 支持在传输管理器等完整

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 397

Tomcat调优教程

本文基于Tomcat 9.0编写,理论兼容Tomcat 8.x及更高版本。本文来探讨Tomcat的调优。

itScholar001的博客 1447

用 ABAP OAuth 2.0 Client 直连 SAP SuccessFactors:从体系到落地的一条龙实践指南

ABAP SMI允许在后端对外部服务的OData端点进行定义与自定义化配置,并以受信连接的方式暴露给ABAP应用调用。它并不替代OAuth,而是扮演端点与自定义参数的集中化定义者,最终认证依旧由完成。对于需要在ABAP后端发起临时或补充型OData调用的场景,SMI是一个轻量而清晰的集成入口。scope的客户端应用已经完成注册,API DomainCompany ID、证书或密钥都已归档。ABAP的Profile与Client已建立并绑定,OA2C_GRANT可见绿色访问状态。SMI。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 286

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Tomcat调优(详细)

Tomcat 的缺省配置是不能稳定长期运行的,也就是不适合生产环境,它会死机,让你不断重新启动,甚至在午夜时分唤醒你。对于操作系统优化来说,是尽可能的增大可使用的内存容量、提高CPU 的频率,保证文件系统的读写速率等。经过压力测试验证,在并发连接很多的情况下,CPU 的处理能力越强,系统运行速度越快。 Tomcat 的优化不像其它软件那样,简简单单的修改几个参数就可以了,它的优化主要有三方面,分为系统优化,Tomcat 本身的优化,Java 虚拟机(JVM)调优。系统优化就不在介绍了,接下来就详细的介绍一下

weixin_45537987的博客 3827

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

nginx、tomcat、mysql、redis调优

调优Nginx、Tomcat、MySQL和Redis是确保系统稳定性和性能的重要工作。

linux 1578

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

tomcat调优_Tomcat 调优的技巧 | 必学必知

原创:程序员私房菜最近,看到一篇讲述 Tomcat 调优的文章,写得挺不错的,分享给大家。1 描述最近,在补充自己的短板,刚好整理到 Tomcat 调优这块,基本上面试必问,于是就花了点时间去搜集一下 Tomcat 调优都调了些什么,先记录一下调优手段,更多详细的原理和实现以后用到时候再来补充记录,下面就来介绍一下,Tomcat 调优大致分为两大类。1.1 Tomcat的自身调优 采用动静分离节约...

weixin_39575737的博客 237

Tomcat调优技巧,实用

人工智能,零基础入门!http://www.captainbed.net/inner 一、描述 最近,在学习接触到一些项目开发中的调优过程,刚好整理到 Tomcat 调优这块,有时候面试也会问到问,于是就花了点时间去搜集一下 Tomcat 调优都调了些什么,先记录一下调优手段,更多详细的原理和实现以后用到时候再来补充记录,下面就来介绍一下,Tomcat 调优大致分为两大类。 1、Tomcat的自身调优 采用动静分离节约 Tomcat 的性能 调整 Tomcat 的线程池 调整 Tomcat 的连接器 修.

m0_67401660的博客 1109

tomcat内存一直增长_小计Tomcat的调优思路

作者:王森来源:https://www.cnblogs.com/wangsen/p/9337969.html描述最近在补充自己的短板,刚好整理到Tomcat调优这块,基本上面试必问,于是就花了点时间去搜集一下tomcat调优都调了些什么,先记录一下调优手段,更多详细的原理和实现以后用到时候再来补充记录,下面就来介绍一下,tomcat调优大致分为两大类:一、tomcat的自身调优采用动静分离节约to...

weixin_39616056的博客 2314

Tomcat 调优及 JVM 参数优化

目录 一、Tomcat 本身优化 1、工作方式选择 2、Connector 连接器的配置 3、配置文件优化 二、JVM 优化 1、JVM 参数配置方法 2、JVM 参数属性 3、设置系统属性 4、常见的 Java 内存溢出有以下三种 Tomcat 的缺省配置是不能稳定长期运行的,也就是不适合生产环境,它会死机,让你不断重新启动,甚至在午夜时分唤醒你。对于操作系统优化来说,是尽...

凡是过往,皆为序章 3068
上一篇: JVM 调优
下一篇: 如何处理Dubbo调用超时
JFS_Study
博客等级 码龄6年 363粉丝 359原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JFS_Study

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值