您现在的位置是:网站首页> 内容页

小计Tomcat的调优思路

  • u乐平台登录网址
  • 2019-03-25
  • 62人已阅读
简介描述最近在补充自己的短板,刚好整理到Tomcat调优这块,基本上面试必问,于是就花了点时间去搜集一下tomcat调优都调了些什么,先记录一下调优手段,更多详细的原理和实现以后用到时候再

描述

最近在补充自己的短板,刚好整理到Tomcat调优这块,基本上面试必问,于是就花了点时间去搜集一下tomcat调优都调了些什么,先记录一下调优手段,更多详细的原理和实现以后用到时候再来补充记录,下面就来介绍一下,tomcat调优大致分为两大类:

一、tomcat的自身调优

采用动静分离节约tomcat的性能调整tomcat的线程池调整tomcat的连接器修改tomcat的运行模式禁用AJP连接器

二、jvm的调优

调优Jvm内存

tomcat自身调优

采用动静分离

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

调优tomcat的线程池

打开tomcat的serve.xml配置Executor

参数解释

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

调优tomcat的连接器Connector

打开tomcat的serve.xml配置Connector

参数解释

executor指定这个连接器所使用的执行器(线程池)

enableLookups="false"关闭dns解析,减少性能损耗minProcessors服务器启动时创建的最少线程数maxProcessors最大可以创建的线程数acceptCount="1000"线程池中的线程都被占用,允许放到队列中的请求数maxThreads="3000"最大线程数minSpareThreads="20"最小空闲线程数,这里是一直会运行的线程和压缩有关系的配置如果已经对代码进行了动静分离,静态页面和图片等数据就不需要 Tomcat 处理了,那么也就不需要配置在 Tomcat 中配置压缩了一个完整的配置

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" ##超时时间,毫秒,这里是20秒 redirectPort="443" maxThreads="3000" ##最大线程数 minSpareThreads="20" ##最小空闲线程数,这里是一直会运行的线程 acceptCount="1000" ##接收的队列数 enableLookups="false" ##关闭dns解析,减少性能损耗 server="None" URIEncoding="UTF-8" />

*关于Connector的配置文档

通过修改tomcat的运行模式

BIO

Tomcat8以下版本,默认使用的就是BIO(阻塞式IO)模式

对于每一个请求都要创建一个线程来进行处理,不适合高并发

NIO

Tomcat8以上版本,默认使用的就是NIO模式非阻塞式Io

APR(Apache Portable Runtime)

是Tomcat生产环境运行的首选方式如果操作系统未安装apr或者apr路径未指到Tomcat默认可识别的路径,则apr模式无法启动,自动切换启动nio模式。所以必须要安装apr和native,直接启动就支持aprapr是从操作系统级别解决异步IO问题,apr的本质就是使用jni(java native interface)技术调用操作系统底层的IO接口,所以需要提前安装所需要的依赖提升Tomcat对静态文件的处理性能,当然也可以采用动静分离

禁用AJP连接器

Apache JServer Protocol使用Nginx+tomcat的架构,所以用不着AJP协议,所以把AJP连接器禁用

JVM的调优

tomcat是运行在jvm上的,所以对jvm的调优也是非常有必要的。

调优内存

找到:catalina.sh

添加的位置

尝试的参数设置

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"

调整堆大小的的目的是最小化垃圾收集的时间,以在特定的时间内最大化处理客户的请求,

结尾

这里只是简单记录一下调优都有哪些途径,更多的是找出思路,具体怎么调需要我们根据实际情况去验证调整。推荐书籍:HowTomcatWorks

文章评论

Top