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

相关文章

Web服务器-Nginx-高并发问题

《Web服务器-Nginx-高并发问题》Nginx通过事件驱动、I/O多路复用和异步非阻塞技术高效处理高并发,结合动静分离和限流策略,提升性能与稳定性... 目录前言一、架构1. 原生多进程架构2. 事件驱动模型3. IO多路复用4. 异步非阻塞 I/O5. Nginx高并发配置实战二、动静分离1. 职责2

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

Java实现复杂查询优化的7个技巧小结

《Java实现复杂查询优化的7个技巧小结》在Java项目中,复杂查询是开发者面临的“硬骨头”,本文将通过7个实战技巧,结合代码示例和性能对比,手把手教你如何让复杂查询变得优雅,大家可以根据需求进行选择... 目录一、复杂查询的痛点:为何你的代码“又臭又长”1.1冗余变量与中间状态1.2重复查询与性能陷阱1.

Python内存优化的实战技巧分享

《Python内存优化的实战技巧分享》Python作为一门解释型语言,虽然在开发效率上有着显著优势,但在执行效率方面往往被诟病,然而,通过合理的内存优化策略,我们可以让Python程序的运行速度提升3... 目录前言python内存管理机制引用计数机制垃圾回收机制内存泄漏的常见原因1. 循环引用2. 全局变

Spring Security 前后端分离场景下的会话并发管理

《SpringSecurity前后端分离场景下的会话并发管理》本文介绍了在前后端分离架构下实现SpringSecurity会话并发管理的问题,传统Web开发中只需简单配置sessionManage... 目录背景分析传统 web 开发中的 sessionManagement 入口ConcurrentSess

Python多线程应用中的卡死问题优化方案指南

《Python多线程应用中的卡死问题优化方案指南》在利用Python语言开发某查询软件时,遇到了点击搜索按钮后软件卡死的问题,本文将简单分析一下出现的原因以及对应的优化方案,希望对大家有所帮助... 目录问题描述优化方案1. 网络请求优化2. 多线程架构优化3. 全局异常处理4. 配置管理优化优化效果1.

MySQL中优化CPU使用的详细指南

《MySQL中优化CPU使用的详细指南》优化MySQL的CPU使用可以显著提高数据库的性能和响应时间,本文为大家整理了一些优化CPU使用的方法,大家可以根据需要进行选择... 目录一、优化查询和索引1.1 优化查询语句1.2 创建和优化索引1.3 避免全表扫描二、调整mysql配置参数2.1 调整线程数2.

MySQL中处理数据的并发一致性的实现示例

《MySQL中处理数据的并发一致性的实现示例》在MySQL中处理数据的并发一致性是确保多个用户或应用程序同时访问和修改数据库时,不会导致数据冲突、数据丢失或数据不一致,MySQL通过事务和锁机制来管理... 目录一、事务(Transactions)1. 事务控制语句二、锁(Locks)1. 锁类型2. 锁粒

深入解析Java NIO在高并发场景下的性能优化实践指南

《深入解析JavaNIO在高并发场景下的性能优化实践指南》随着互联网业务不断演进,对高并发、低延时网络服务的需求日益增长,本文将深入解析JavaNIO在高并发场景下的性能优化方法,希望对大家有所帮助... 目录简介一、技术背景与应用场景二、核心原理深入分析2.1 Selector多路复用2.2 Buffer