tomcat8并发优化

2024-01-01 20:32
文章标签 优化 并发 tomcat8

本文主要是介绍tomcat8并发优化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、tomcat JVM优化

详见JVM优化

      http://blog.csdn.net/sinlff/article/details/62038816



2、tomcat线程池
TOMCAT_HOME/conf/server.xml
name:线程池名称,用于 Connector中指定。
namePrefix:所创建的每个线程的名称前缀,一个单独的线程名称为 namePrefix+threadNumber。
maxThreads:池中最大线程数。
minSpareThreads:活跃线程数,也就是核心池线程数,这些线程不会被销毁,会一直存在。
maxIdleTime:线程空闲时间,超过该时间后,空闲线程会被销毁,默认值为6000(1分钟),单位毫秒。
maxQueueSize:在被执行前最大线程排队数目,默认为Int的最大值,也就是广义的无限。除非特殊情况,这个值不需要更改,否则会有请求不会被处理的情况发生。
prestartminSpareThreads:启动线程池时是否启动 minSpareThreads部分线程。默认值为false,即不启动。
threadPriority:线程池中线程优先级,默认值为5,值从1到10。
className:线程池实现类,未指定情况下,默认实现类为org.apache.catalina.core.StandardThreadExecutor。如果想使用自定义线程池首先需要实现 org.apache.catalina.Executor接口。
线程池配置完成后需要在 Connector中指定


3、tomcat并发Connector,参数说明http://1632004.blog.163.com/blog/static/29991497201201912858468/ 官网参数说明http://tomcat.apache.org/tomcat-7.0-doc/config/http.html
org.apache.coyote.http11.Http11NioProtocol
org.apache.coyote.http11.Http11AprProtocol
keepAliveTimeout - 表示在下次请求过来之前,tomcat保持该连接多久。这就是说假如客户端不断有请求过来,且未超过过期时间,则该连接将一直保持。
maxKeepAliveRequests -表示该连接最大支持的请求数。超过该请求数的连接也将被关闭(此时就会返回一个Connection: close头给客户端)。 (maxKeepAliveRequests="1"代表禁用长连接)(1表示禁用,-1表示不限制个数,默认100个。一般设置在100~200之间)the maximum number of HTTP requests that can be held in the pipeline until the connection is closed by the server. Setting this attribute to 1 disables HTTP/1.0 keep-alive, as well as HTTP/1.1 keep-alive and pipelining. Setting this to -1 allows an unlimited number of pipelined or keep-alive HTTP requests. If not specified, this attribute is set to 100.
maxQueueSize:在被执行前最大线程排队数目,默认为Int的最大值,也就是广义的无限。除非特殊情况,这个值不需要更改,否则会有请求不会被处理的情况发生。
acceptCount:当所有可能的请求处理线程都在使用时传入连接请求的最大队列长度。如果未指定,默认值为100。一般是设置的跟 maxThreads一样或一半,此值设置的过大会导致排队的请求超时而未被处理。所以这个值应该是主要根据应用的访问峰值与平均值来权衡配置。
响应报文压缩 compression="on"


<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="3000" minSpareThreads="500" maxIdleTime="180000" prestartminSpareThreads="true" threadPriority="5"/>
<Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol" 
connectionTimeout="30000" asyncTimeout="30000" keepAliveTimeout="10000" maxKeepAliveRequests="200" 
executor="tomcatThreadPool" maxConnections="3000" acceptCount="3000" 
acceptorThreadCount="4" acceptorThreadPriority="5"
maxHttpHeaderSize="4096" socketBuffer="10240" 
SSLEnabled="false" URIEncoding="UTF-8" useBodyEncodingForURI="true" tcpNoDelay="true" enableLookups="false" disableUploadTimeout="true" 
compression="off" compressionMinSize="512" noCompressionUserAgents="gozilla,traviata" compressableMimeType="text/html,text/xml,text/javascript,application/javascript,text/css,text/plain,application/json"/>

maxSpareThreads 在线程池开始停止不必要的线程之前,允许存在的最大未使用的请求处理线程
acceptCount 当所有可能的请求处理线程都被使用的时候,连接请求队列的最大长度。如果该队列为满,所有的请求都被拒绝,缺省值为10。(不能小于maxSpareThreads ) 
maxKeepAliveRequests最大长连接个数(1表示禁用,-1表示不限制个数,默认100个)
KeepAliveTimeout长连接超时时间
enableLookups 若设为true, 则支持域名解析,可把 ip 地址解析为主机名 
redirectPort 在需要基于安全通道的场合,把客户请求转发到基于SSL 的 redirectPort 端口 


4、关闭tomcat多余的log
TOMCAT_HOME/conf/server.xml -> <Valve className="org.apache.catalina.valves.AccessLogValve"注释掉
TOMCAT_HOME/conf/logging.properties -> handlers=java.util.logging.ConsoleHandler 、修改log日志指向路径


5、Apr  I/O

tomcat8/conf/server.xml放开注释
<Listener SSLEngine="on" className="org.apache.catalina.core.AprLifecycleListener"/>

apr、apr-util、native
apr(Apache Portable Runtime/Apache可移植运行时),是Apache HTTP服务器的支持库。你可以简单地理解为,Tomcat将以JNI的形式调用Apache HTTP服务器的核心动态链接库来处理文件读取或网络传输操作
,从而大大地提高Tomcat对静态文件的处理性能。 
Tomcat apr也是在Tomcat上运行高并发应用的首选模式。
tomcat-native.tar.gz 可以在tomcat/bin目录下找到
windows安装:
http://www.blogjava.net/tinguo002/archive/2014/07/17/415939.html?utm_source=tuicool
步骤一:tcnative-1.dll放入tomcat/bin目录
步骤二:windows环境变量Path增加;D:\soft\tomcat7\bin
步骤三:protocol="org.apache.coyote.http11.Http11AprProtocol"


linux安装:
http://blog.csdn.net/god123209/article/details/8784289
启动不报一下提示,表示Apr插件已安装
Jul 27, 2012 7:19:34 PM org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
(1)安装APR tomcat-native
    apr-1.3.8.tar.gz   安装在/usr/local/apr
    #tar zxvf apr-1.3.8.tar.gz
    #cd apr-1.3.8
    #./configure;make;make install
    
    apr-util-1.3.9.tar.gz  安装在/usr/local/apr/lib
    #tar zxvf apr-util-1.3.9.tar.gz
    #cd apr-util-1.3.9  
    #./configure --with-apr=/usr/local/apr ----with-java-home=JDK;make;make install
    
    #cd apache-tomcat-6.0.20/bin  
    #tar zxvf tomcat-native.tar.gz  
    #cd tomcat-native/jni/native  
    #./configure --with-apr=/usr/local/apr;make;make install
    
  (2)设置 Tomcat 整合 APR
    修改 tomcat 的启动 shell (startup.sh),在该文件中加入启动参数:
      CATALINA_OPTS="$CATALINA_OPTS -Djava.library.path=/usr/local/apr/lib" 。


  (3)判断安装成功:
    如果看到下面的启动日志,表示成功。
   org.apache.coyote.http11.Http11AprProtocol init
   Loaded APR based Apache Tomcat Native library
   Starting ProtocolHandler ["http-apr


6、设置session过期时间、redis集群会话共享:TOMCAT_HOME/conf/context.xml -> Valve Manager Session Redis 
tomcat8/conf/context.xml
<Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve"/>  
<Manager className="com.radiadesign.catalina.session.RedisSessionManager" 
expireSessionSecond="604800"
isCluster="false"
redisInfo="172.16.1.19:6381"
redisPwd=""
appId="10000"
minIdle="5"
minEvictableIdleTimeMillis="1500"
maxIdle="10"
maxTotal="30"
maxWaitMillis="3000"
testOnBorrow="true"/>

7、关闭自动部署功能
<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
改为
autoDeploy="false"

8、关闭自动热更新reloadable="false"
server.xml <Context>部署,设置reloadable="false"

9、禁止tomcat扫描jar包的tld文件,
tomcat/conf/logging.properties 取消注释org.apache.jasper.compiler.TldLocationsCache.level=FINE
tomcat/conf/catalina.properties   修改tomcat.util.scan.StandardJarScanFilter.jarsToSkip=*.jar
server.xml开启<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on"/>


10、jsp development设置为false,或者checkInterval配置后台编译的触发频率
  genStringAsCharArray=true
  trimSpace=true
  enablePooling=true
  jsp标签池


11、增大TCP连接内核参数:web server允许的最大连接数还受制于操作系统的内核参数设置,通常Windows是2000个左右,Linux是1000个左右。


12、与web服务器集成
12.1、nginx实现Keep-Alive keepAliveTimeout="8000" maxKeepAliveRequests="50" 
12.2、nginx-SSL支持
12.3、处理静态文件

13、nginx_AJP_mode
nginx ajp tomcat

这篇关于tomcat8并发优化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/560436

相关文章

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

HDFS—存储优化(纠删码)

纠删码原理 HDFS 默认情况下,一个文件有3个副本,这样提高了数据的可靠性,但也带来了2倍的冗余开销。 Hadoop3.x 引入了纠删码,采用计算的方式,可以节省约50%左右的存储空间。 此种方式节约了空间,但是会增加 cpu 的计算。 纠删码策略是给具体一个路径设置。所有往此路径下存储的文件,都会执行此策略。 默认只开启对 RS-6-3-1024k

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

springboot3打包成war包,用tomcat8启动

1、在pom中,将打包类型改为war <packaging>war</packaging> 2、pom中排除SpringBoot内置的Tomcat容器并添加Tomcat依赖,用于编译和测试,         *依赖时一定设置 scope 为 provided (相当于 tomcat 依赖只在本地运行和测试的时候有效,         打包的时候会排除这个依赖)<scope>provided

MySQL高性能优化规范

前言:      笔者最近上班途中突然想丰富下自己的数据库优化技能。于是在查阅了多篇文章后,总结出了这篇! 数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名识意,并且最后不要超过32个字符 临时库表必须以tmp_为前缀并以日期为后缀,备份

高并发环境中保持幂等性

在高并发环境中保持幂等性是一项重要的挑战。幂等性指的是无论操作执行多少次,其效果都是相同的。确保操作的幂等性可以避免重复执行带来的副作用。以下是一些保持幂等性的常用方法: 唯一标识符: 请求唯一标识:在每次请求中引入唯一标识符(如 UUID 或者生成的唯一 ID),在处理请求时,系统可以检查这个标识符是否已经处理过,如果是,则忽略重复请求。幂等键(Idempotency Key):客户端在每次

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动

Java并发编程之——BlockingQueue(队列)

一、什么是BlockingQueue BlockingQueue即阻塞队列,从阻塞这个词可以看出,在某些情况下对阻塞队列的访问可能会造成阻塞。被阻塞的情况主要有如下两种: 1. 当队列满了的时候进行入队列操作2. 当队列空了的时候进行出队列操作123 因此,当一个线程试图对一个已经满了的队列进行入队列操作时,它将会被阻塞,除非有另一个线程做了出队列操作;同样,当一个线程试图对一个空

java线程深度解析(五)——并发模型(生产者-消费者)

http://blog.csdn.net/Daybreak1209/article/details/51378055 三、生产者-消费者模式     在经典的多线程模式中,生产者-消费者为多线程间协作提供了良好的解决方案。基本原理是两类线程,即若干个生产者和若干个消费者,生产者负责提交用户请求任务(到内存缓冲区),消费者线程负责处理任务(从内存缓冲区中取任务进行处理),两类线程之