tomcat 8 性能优化参考 ( 限制最大并发会话连接数为 1000 )

本文详细介绍如何通过调整Tomcat的JVM参数、配置文件及会话超时时间,实现服务器性能优化。涵盖内存配置、I/O模式切换、线程池管理及最大连接数设置等关键环节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

1、内存优化(调整配置堆的大小,修改文件:catalina.sh)

参数如下:

JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8

-server -XX:MinHeapFreeRatio=80 -XX:MaxHeapFreeRatio=80 -XX:ThreadStackSize=512

-XX:NewSize=128m

-XX:MaxPermSize=64m

-XX:NewRatio=4 -XX:SurvivorRatio=8

-XX:+AggressiveOpts -XX:+UseBiasedLocking

-XX:+UseConcMarkSweepGC -XX:+ScavengeBeforeFullGC

-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:../logs/performance_gc.log

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=../logs/performance_heapdump.hprof  
-XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:FlightRecorderOptions=defaultrecording=true"

开启飞行记录

-XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:FlightRecorderOptions=defaultrecording=true

参数说明,可参考jvm的配置:

-server:服务器模式,该参数放置在配置项的首位置

-Xms:堆的初始大小,单位MB 配置-Xms与-Xmx一致,为可用内存的80%

-XmX:堆的最大大小,单位MB

-Xmn:新生代的初始大小,单位MB 为堆大小的3/8

在使用jmc工具时,如需要打开飞行记录,需要配置以下3个参数,不用时可以先不配置:

-XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:FlightRecorderOptions=defaultrecording=true

 

2、配置文件中配置项的优化(修改文件:server.xml)

a) 更改IO模式

将bio协议模式更改为nio/nio2协议模式

bio模式协议:HTTP1.1

nio模式协议:org.apache.cotyote.http11.Http11NioProtocol

nio2模式协议:org.apache.cotyote.http11.Http11Nio2Protocol

apr模式协议:org.apache.coyote.http11.Http11AprProtocol

bio协议模式,适用于简单流程

nio协议模式,适用于后台耗时的请求的操作

ARP模式:tomcat以jni方式调用apache http服务器的核心动态链接库来处理文件或网络传输操作

b) 调整连接器模式

Executor方面 可在tomcat组件之间共享,减少创建销毁线程的消耗,提高线程的使用效率

 

3、设置会话超时时间(修改文件:web.xml)

配置项:<session-timeout>30</session-timeout> 单位为分钟

 

4、文件配置说明

a) tomcat-user.xml

<role rolename="manager-gui" />

<role rolename="manager-script" />

<role rolename="manager-status" />

<role rolename="manager-jmx"/>

<user username="admin" password="123456" roles="manager-gui,manager-script,manager-status,manager-jmx" />
</tomcat-users>

b) web.xml

#配置项:<session-timeout>30</session-timeout> 单位为分钟

<session-config>
<session-timeout>30</session-timeout>
</session-config>

c) server.xml

<!-- Prevent memory leaks due to use of particular java/javax APIs 防止jre内存泄漏-->
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />

 c-1) 单一配置方式

<!--连接器设置-->

<Connector 
port="8080" 
protocol="org.apache.coyote.http11.Http11AprProtocol" --协议类型 
disableUploadTimeout="true"

keepAliveTimeout="20000"

connectionTimeout="20000" --已接受,但未被处理的请求的等待超时时间 ms
redirectPort="8443" --安全通信的转发端口 
URIEncoding="UTF-8"--URL编码字符集
minSpareThreads="100" --默认初始化和保持空闲的线程数
enableLookups="false"--关闭DNS反向查询
useURIValidationHack="false" --关闭不必要的检查
maxThreads="1000" --处理请求线程的最大数目 未配置为200 此属性会被忽略
acceptCount="1000" --所用可能的线程都在使用时传入连接请求的最大长度
disableUploadTimeout="true" --设置允许更长的超时连接
maxConnections="1000"--接受和处理的最大连接数(nio/nio2 1000,apr 8192)
maxHttpHeaderSize="8192"--请求和响应http头的最大大小 8k
tcpNoDelay="true" --tcp不延迟
compression="on"--是否启用压缩 on off force 
compressionMinSize="2048" --压缩前数据最小值 2k byte
noCompressionUserAgents="gozilla,traviata" --设置哪些浏览器不压缩
compressableMimeType="text/html,text/xml,text/css,application/javascript,text/plain" --设置压缩的文件类型
/>

一般只需要进行上面的配置即可

c-2) 使用线程池的方式

<!--连接池设置-->
<Executor 
name="tomcatThreadPool" --线程池名
namePrefix="catalina-exec-" --线程名称前缀 namePrefix+threaNumber
maxThreads="1000" --池中最大线程数
minSpareThreads="100" --活跃线程数 会一直存在
maxIdleTime="60000" --线程空闲时间,超过该时间,线程会被销毁 ms
maxQueueSize="Integer.MAX_VALUE" --被执行前线程的排队数目
prestartminSpareThreads="false" --启动线程池时,是否启用minSpareThreads部分线程
threadPriority="5" --线程池中线程优先级 1~10
className="org.apache.catalina.core.StandardThreadExecutor" --线程实现类 自定义线程需时间 org.apache.catalina.Executor类
/>
<!--当配置了连接池时,需要配置该连接器-->
<Connector 
executor="tomcatThreadPool" --线程池名
port="8080" 
protocol="org.apache.coyote.http11.Http11AprProtocol"
connectionTimeout="20000"
redirectPort="8443" />

 


原文链接:https://www.pianshen.com/article/24901206929/

 

 

限制最大并发会话连接数为 1000

tomcat最大线程数、最大等待数和最大连接数

tomcat是目前较为常用的Web容器,那么怎么配置tomcat才能使得自己的服务效率更高,今天我主要解释一下tomcat的最大线程数(maxThreads)、最大等待数(acceptCount)和最大连接数(maxConnections)。

    maxThreads(最大线程数):每一次HTTP请求到达Web服务,tomcat都会创建一个线程来处理该请求,那么最大线程数决定了Web服务可以同时处理多少个请求,默认200.

    accepCount(最大等待数):当调用Web服务的HTTP请求数达到tomcat的最大线程数时,还有新的HTTP请求到来,这时tomcat会将该请求放在等待队列中,这个acceptCount就是指能够接受的最大等待数,默认100.如果等待队列也被放满了,这个时候再来新的请求就会被tomcat拒绝(connection refused)。

    maxConnections(最大连接数):这个参数是指在同一时间,tomcat能够接受的最大连接数。一般这个值要大于maxThreads+acceptCount。

  • 增加线程是有成本的,JVM中默认情况下在创建新线程时会分配大小为1M的线程栈,所以更多的线程异味着更多的内存;
  • 更多的线程会带来更多的线程上下文切换成本。

可以通过设置tomcat下conf文件夹的server.xml文件,对请求连接数和请求超时时间进行设置。

<Connector port="8080" protocol="HTTP/1.1"

connectionTimeout="20000"

redirectPort="8443" acceptCount="1000" maxThreads="1000" />

connectionTimeout以毫秒为单位,默认设置为20秒。通过修改该参数,可以修改tomcat的请求超时时间;

关于修改最大并发请求连接数,需要修改maxThreads和acceptCount两个参数,两者的默认值分别是200和100,要调整Tomcat的默认最大连接数,可以增加这两个属性的值,并且使acceptCount大于等于maxThreads

 

项目中使用配置(内存优化,参考步骤1)

windwos服务器下,tomcat版本号为 8.0.53  jdk版本为1.8.0_131,找到 catalina.bat 文件 ( D:\server\apache-tomcat-8.0.53\bin\catalina.bat ) 和 service.bat 文件( D:\server\apache-tomcat-8.0.53\bin\ service.bat )

以下是调整内存为 4 G 的参考:

步骤1:打开 catalina.bat 文件,在文件的 第 142行添加 JAVA_OPTS 参数:

set JAVA_OPTS=%JAVA_OPTS% -server -Xms512m -Xmx4096m -Xmn1024m

步骤1:打开 service.bat 文件,在文件的 第 181、182行修改 jvm 参数

更多JVM参数配置信息,请参考下面的文章(有详细说明)

jboss4内存溢出处理(jboss 4.2.3.GA)及jvm参数大全

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值