转自:https://www.cnblogs.com/myseries/p/11480203.html
1.动静分离
静态资源如果让tomcat处理的话tomcat的性能会被损耗很多,所以我们一般都是采用:nginx+tomcat实现动静分离,让 Tomcat 只负责 jsp 文件的解析工作,nginx实现静态资源的访问。
(springboot好像没法这样操作)
2.线程池调优
打开serve.xml
配置Executor
参数解释
name 给执行器(线程池)起一个名字
namePrefix 指定线程池中的每一个线程的name前缀
maxThreads 线程池中最大的线程数量
如果请求过多,不要在单个tomcat中设置过高的maxThreads数量,而是应该去考虑tomcat集群
minSpareThreads 线程池中允许空闲的线程数量(多余的线程都杀死)
maxIdLeTime 一个线程空闲多久算是一个空闲线程
上面两个参数没什么,主要是下面三个,最大线程数,最大空闲线程数,空闲线程时间定义
3.连接器Connector调优
打开tomcat的serve.xml
配置Connector
executor 指定这个连接器所使用的执行器(线程池)
哦,所以刚才的name属性还是有用的……,可以知道是哪个executor用的
enableLookups=“false” 关闭dns解析,减少性能损耗
connectionTimeout 连接超时时间
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"
/>
4.运行模式调优
1.BIO与NIO
BIO就是使用的http1.1协议,也就是protocol=“HTTP/1.1”
tomcat8之后自动默认是使用nio的
2.APR
是Tomcat生产环境运行的首选方式
如果操作系统未安装apr或者apr路径未指到Tomcat默认可识别的路径,
则apr模式无法启动,自动切换启动nio模式。
所以必须要安装apr和native,直接启动就支持apr
apr是从操作系统级别解决异步IO问题,apr的本质就是使用jni(java native interface)技术调用操作系统底层的IO接口,所以需要提前安装所需要的依赖
5.JVM调优
在catalina.sh上加入JAVA_OPTS= …去调整tomcat的JVM参数
如JAVA_OPTS="-server -XX:PermSize=512M -XX:MaxPermSize=1024m -Xms2048m -Xmx2048m
其中
-server:启用 JDK的 server 版本;
-Xms:Java虚拟机初始化时堆的最小内存,一般与 Xmx配置为相同值,这样的好处是GC不必再为扩展内存空间而消耗性能;
-Xmx:Java虚拟机可使用堆的最大内存;
-XX:PermSize:Java虚拟机永久代大小;
-XX:MaxPermSize:Java虚拟机永久代大小最大值;
还有比如调整堆大小,垃圾回收机制等,这些就都是JVM的内容了
6.springboot上tomcat调优
springboot中内置了tomcat,所以肯定直接在application.yml里面修改就行了
格式大概如下
在server.comcat下配置
# Tomcat
server:
tomcat:
uri-encoding: UTF-8
#最小线程数
min-spare-threads: 500
#最大线程数
max-threads: 2500
#最大链接数
max-connections: 6500
#最大等待队列长度
accept-count: 1000
#请求头最大长度kb
max-http-header-size: 1048576
#请请求体最大长度kb
#max-http-post-size: 2097152
#服务http端口
port: 8080
#链接建立超时时间
connection-timeout: 12000
servlet:
#访问根路径
context-path: /song
在高并发下:要增大最大线程,最大连接,增大最大等待队列长度,增大连接超时时间,在最开始要有足够的线程保证,启动的时候,如果有大量用户来,tomcat也不会被压垮。
等待队列长度,最大线程数,最小空闲线程数,最大连接数,连接超时时间