站在微服务架构对Tomcat进行性能调优

上一篇 << 下一篇 >>>Tomcat的AJP连接器的漏洞


SpringBoot内嵌入Tomcat比引入外部Tomcat容器部署性能要好.
因为外部tomcat非常臃肿,把一些没有必要的组件全部都开启,而为我们在使用SpringBoot构建微服务的时候是没有视图层的,所以SpringBoot关闭了很多没有必要的插件,比如jsp。
tips:我们在使用springboot项目开发的时候,不要将jar包放入到外部tomcat运行。

1.删除无效配置,借鉴springboot的做法

1.1 移除tomcat安装目录的conf/web.xml视图层组件JspServlet及相关映射

JspServlet: 编译并且执行我们jsp页面

jsp
org.apache.jasper.servlet.JspServlet

fork
false


xpoweredBy
false

3


jsp
*.jsp
*.jspx

1.2去除conf/web.xml中的welcome-file-list配置,springboot是没有默认的


index.html
index.htm
index.jsp

1.3 mime-mapping作用就是告诉给浏览器处理的格式,conf/web.xml中只保留一个json的就行了


jpg
image/jpeg

……

1.4 session在微服务下用的很少,几乎都是采用token替代Session,可删除conf/web.xml配置session-config


30

1.5 conf/server.xml 中的reloadable配置为false

如果为true时直接实现热部署,开发环境可以,但在生成环境设置为false,黑客注入class文件可能不安全。

1.6 减少日志请求记录

在tomcat中日志文件分为:catalina、localhost_access_log
Catalina属于tomcat最核心的配置文件
localhost_access_log 记录每次请求,交给nginx记录即可
建议移除localhost_access_log日志配置文件 conf/server.xml 中的

prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" />

2.线程池的配置


相关参数配置:
name:线程池名称.
namePrefix:创建的每个线程的名称前缀, 单独的线程名称为 namePrefix + threadNumber.
maxThreads:线程池中最大并发线程数, 默认值为200, 一般建议设置400~ 800 , 要根据服务器配置和业务需求而定.
minSpareThreads:最小活跃线程数, 也就是核心线程数, 不会被销毁, 会一直存在.
prestartminSpareThreads:是否在启动程序时就生成minSpareThreads个线程, 默认为false, 即不启动. 若不设置为true, 则minSpareThreads的设置就不起作用了.
maxIdleTime:线程最大空闲时间, 超过该时间后, 空闲线程会被销毁, 默认值为6000, 单位为毫秒.
maxQueueSize: 最大的等待队列数, 超过则拒绝请求. 默认值为int类型的最大值(Integer.MAX_VALUE), 等同于无限大. 一般不作修改, 避免发生部分请求未能被处理的情况.
threadPriority:线程池中线程的优先级, 默认值为5, 取值范围: 1 ~ 10.

如何设置:
a.如果并发量比较大的情况下 最小活跃线程建议设置比较大,可以避免重复处理线程 可以增加吞吐量;如果最小活跃的线程如果比较大的情况下,非常占用cpu资源;
b.如果是项目的并发量比较小的情况下,最小活跃线程可以设置小一点,可以节约cpu内存

tips:更多线程相关内容,请阅读并发编程-线程池

3.Connector优化

默认情况下Tomcat开启了两个Connector
分别为:
Connector 监听8080 Http协议
Connector 监听8009 AJP协议 (tomcat内部之间通讯)
建议可以将Connecto8009连接器移除,能够减少内存的消耗

Connector:
Endpoint:监听网络接口、接受网络连接请求、读取请求网络字节流、将响应字节流写回服务
Processor:生成统一的Tomcat Request对象
Adapter:将Tomcat Request转换成标准的ServletRequest、将ServletResponse转成Tomcat Response

4.IO线程模型优化

配置方法:在tomcat conf 下找到server.xml,在修改protocol的值。
可选值:
BIO: protocol =" org.apache.coyote.http11.Http11Protocol"阻塞式IO,采用传统的java IO进行操作,该模式下每个请求都会创建一个线程,适用于并发量小的场景。【Tomcat7及以下linux环境默认该模式,JDK1.4之前唯一选择】NIO: protocol ="org.apache.coyote.http11.Http11NioProtocol"同步非阻塞式io 效率比BIO提高非常多倍 采用多路复合机制【tomcat8在linux系统默认采用该模式,JDK1.4开始支持】
AIO: protocol ="org.apache.coyote.http11.Http11Nio2Protocol"异步非阻塞形式 【tomcat8后支持,JDK1.7开始支持】
APR: protocol ="org.apache.coyote.http11.Http11AprProtocol" tomcat以JNI形式调用http服务器的核心动态链接库来处理文件读取或网络传输操作,从而大大提高了tomcat对静态文件的处理性能,但需要编译安装APR库【Tomcat7或Tomcat8在Win7或以上的系统中启动默认使用这种方式】

Tomcat7的默认IO模型:


Tomcat8的默认IO模型:


站在微服务架构对Tomcat进行性能调优_第1张图片

Springboot的默认IO模型:


站在微服务架构对Tomcat进行性能调优_第2张图片

推荐阅读:
<< << << <<

你可能感兴趣的:(站在微服务架构对Tomcat进行性能调优)