当前位置: 首页 > news >正文

tomcat8调优

环境说明

Jdk:1.8
Tomcat: 8.5.69
服务器 :2核 8G

方案

当调整Tomcat配置时,具体的配置方法可能会有所不同,因为它们受到许多因素的影响,例如Tomcat版本、操作系统、硬件配置等等。以下是每个建议的一些具体配置示例:

  1. 调整连接器配置:

  • 开启HTTP/2协议:将protocol属性设置为“org.apache.coyote.http2.Http2Protocol”即可。

  • 开启压缩功能:将compression属性设置为“on”,并在compressionMinSize、noCompressionUserAgents等属性中设置压缩的具体条件。

  • 使用NIO模式:将protocol属性设置为“org.apache.coyote.http11.Http11NioProtocol”即可。

  • 调整连接池大小:修改maxConnections属性值。

  • 调整超时时间:修改connectionTimeout属性值。

  1. 调整线程池配置:

  • 将Tomcat的线程池和JVM的线程池分开配置。

  • 调整线程池大小:修改maxThreads属性值。

  • 调整最大线程数:修改maxConnections属性值。

  • 可以使用executor元素配置自定义线程池。

示例
在下面配置中,我们配置了一个名为"tomcatThreadPool"的线程池,最大线程数为1000,最小空闲线程数为50,最大空闲时间为60000毫秒,最大队列大小为10000。我们还配置了连接器的最大线程数为1000,最小空闲线程数为50,并将连接器与上述线程池关联。
请注意,这只是一个参考配置,具体的配置可能需要根据您的实际应用场景进行调整。您可能需要根据应用程序的负载、硬件环境等因素进行微调。
同时,如果您使用的是高版本的Tomcat(如Tomcat 9),还可以考虑使用更先进的线程池实现,如Java的ForkJoinPool。具体实现可参考Tomcat文档。
<!--连接器配置-->
<Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443"maxThreads="1000"minSpareThreads="50"acceptCount="500"enableLookups="false"disableUploadTimeout="true"maxHttpHeaderSize="8192"useBodyEncodingForURI="true"compression="on"compressionMinSize="2048"compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript,application/json"URIEncoding="UTF-8"/><!--线程池配置-->
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"maxThreads="1000"minSpareThreads="50"prestartminSpareThreads="true"maxIdleTime="60000"maxQueueSize="10000"/><Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443"executor="tomcatThreadPool"/>
  1. 调整缓存配置:

  • 使用静态资源缓存:使用cache-control、expires、etag等属性来配置。

  • 使用会话缓存:使用sessionCookiePath、sessionCookieDomain等属性来配置。

  • 调整缓存过期时间:修改max-age或expires属性值。

  • 调整缓存大小:使用maxSize属性来限制缓存的最大大小。

  1. 调整JVM配置:

  • 调整内存大小:使用-Xms和-Xmx参数来调整JVM的最小和最大内存。

  • 调整垃圾回收方式:使用-XX:+UseConcMarkSweepGC或-XX:+UseG1GC参数来调整垃圾回收方式。

  • 调整线程栈大小:使用-Xss参数来调整线程栈大小。

  1. 使用性能分析工具:

  • 安装性能分析工具,例如JProfiler、VisualVM等。

  • 启动Tomcat并连接到性能分析工具。

  • 在性能分析工具中分析Tomcat的性能瓶颈,并进行优化。

  1. 调整操作系统配置:

  • 调整TCP参数:例如修改TCP连接超时时间、TCP缓存大小等参数。

  • 调整文件句柄数:使用ulimit命令来调整。

  • 调整内核参数:例如修改进程数、线程数等参数。

JVM参数配置

-Xms4G
-Xmx4G
-XX:NewRatio=3
-XX:SurvivorRatio=6
-XX:+DisableExplicitGC
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200
-XX:ParallelGCThreads=2
-XX:ConcGCThreads=2
-XX:InitiatingHeapOccupancyPercent=70
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/path/to/heapdump
-XX:ErrorFile=/path/to/errorfile

在上述配置中,我们设置了初始堆大小和最大堆大小为4GB,NewRatio为3,SurvivorRatio为6,禁用了显式GC,启用了G1垃圾收集器,设置了最大GC暂停时间为200毫秒,设置了并行GC线程数为2,设置了并发GC线程数为2,设置了当堆使用率达到70%时开始GC。此外,我们还启用了堆转储(HeapDump)功能,并指定了转储文件的路径,以及指定了错误文件的路径。

请注意,这只是一个参考配置,具体的配置可能需要根据您的实际应用场景进行调整。此外,JVM参数的优化也需要综合考虑其他因素,如应用程序的特点、硬件环境等。因此,建议在进行JVM参数调整时,结合实际场景,多进行实验和测试,以找到最优的配置。

Tomcat设置

  1. 打开Tomcat的bin目录,并找到catalina.sh(Linux)或catalina.bat(Windows)文件。

  1. 打开文件,找到JAVA_OPTS参数的定义。如果没有定义,您可以在文件末尾添加以下行:

export JAVA_OPTS="-Xms4G -Xmx4G -XX:NewRatio=3 -XX:SurvivorRatio=6 -XX:+DisableExplicitGC -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:ParallelGCThreads=2 -XX:ConcGCThreads=2 -XX:InitiatingHeapOccupancyPercent=70 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/heapdump -XX:ErrorFile=/path/to/errorfile"

或者在Windows下使用以下行:

set JAVA_OPTS=-Xms4G -Xmx4G -XX:NewRatio=3 -XX:SurvivorRatio=6 -XX:+DisableExplicitGC -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:ParallelGCThreads=2 -XX:ConcGCThreads=2 -XX:InitiatingHeapOccupancyPercent=70 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/heapdump -XX:ErrorFile=/path/to/errorfile

请注意,这只是一个参考配置,您需要根据自己的实际情况进行调整。

http://www.lryc.cn/news/36299.html

相关文章:

  • VS Code 解决 SpringBoot 项目启动时报 Failed to refresh live data from process **** 的问题
  • [ 红队知识库 ] 各种重要文件路径
  • Ajax和JSON的基本用法
  • 【项目实战】基于netty-websocket-spring-boot-starter实现WebSocket服务器长链接处理
  • BC双驱、ChatGPT大火,AI独角兽撬开盈利大门?
  • 1/4车、1/2车、整车悬架H2/H∞控制仿真合集
  • Git使用教程、命令
  • 《c++ primer笔记》第九章 顺序容器
  • QML动画(弹动和翻转效果)
  • GPS启动方式、定位速度、定位精度介绍
  • 深度学习零基础学习之路——第五章 个人数据集的制作
  • 女神节 | PHP和Java算什么,女工程师才是最美最好的语言!
  • 【Python】装饰器
  • Spring事务及传播机制
  • 43-Golang中的goroutine!!!
  • [深入理解SSD系列 闪存实战2.1.5] NAND FLASH基本读操作及原理_NAND FLASH Read Operation源码实现
  • pandas库中的read_csv函数读取数据时候的路径问题详解(ValueError: embedded null character)
  • 【量化交易笔记】4.移动平均值的实现
  • 2023年3月份的野兔在线工具系统版本更新
  • 科技成果赋智中小企业深度行 边界无限靖云甲ADR入选十大优秀案例
  • 我们的理性何处安放
  • RecyclerView的详细使用
  • 一、向量及其线性运算
  • Spring Cloud/Spring Cloud Alibaba核心知识总结
  • Locust框架从0到1入门
  • C++:整数(short ,int,long,long long)表示范围
  • 会声会影2023旗舰版新功能介绍,Corel VideoStudio Ultimate2023以及电脑系统配置要求
  • 软件测试用例篇(5)
  • 三个修饰符
  • JVM调优面试题——参数命令专题