Tomcat8的优化
对于tomcat的优化从2个方面入手,
1是tomcat自身的配置,
2是jvm虚拟机的调优
1.1禁用AJP连接
什么是AJP?
AJP(Apache JServer Protocol)
用户请求先请求到WEB服务器再请求到Tomcat服务器
如果WEB服务器和Tomcat服务器是短连接,性能就比较低,
所以,Tomcat对WEB服务器提供了一个端口为8009的连接器来提高长连接.
AJP的缺点:
AJP是Apache服务器才可以使用,但是我们一般都是Nginx+tomcat架构,用不到AJP协议,所以需要禁用AJP
如何禁用?
修改conf下的server.xml文件把端口为8009的注释掉,重启tomcat
查看AJP
首先点击Server Status
就会弹出下面
禁用之后
1.2执行器线程池
每一个用户请求都是一个线程,可以使用线程池提高性能
修改server.xml文件
首先’
打开这段注释
参数说明:
maxThreads:最大并发数,默认设置 200,一般建议在 500 ~ 1000,根据硬件设施和业 务来判断
minSpareThreads:Tomcat 初始化时创建的线程数,默认设置 25
prestartminSpareThreads: 在 Tomcat 初始化的时候就初始化 minSpareThreads 的 参数值,如果不等于 true,minSpareThreads 的值就没啥效果了
maxQueueSize,最大的等待队列数,超过则拒绝请求
然后
在这里添加executor属性指向上面的执行器
重启tomcat
至于为什么显示最大线程数为-1,其实只是显示问题请看
https://blog.youkuaiyun.com/weixin_38278878/article/details/80144397
1.3tomcat的运行模式
bio
默认模式,性能不太行,没有任何的除了优化
nio
(new i/o),是一个基于缓冲区,并能提供非阻塞I/O操作的java API,比传统I/O(bio)更好的处理并发运行性能
apr
从操作系统级别解决异步IO问题大幅度提高性能,但是安装困难
在tomcat8中有最新的nio2,建议使用nio2(速度更快)
设置nio2
把8080连接器的HTTP/1.1改成org.apache.coyote.http11.Http11Nio2Protocol
重启tomcat
成功!
2.1调整JVM参数的优化
将初始堆大小设置为128m,最大为1024m 初始年轻代大小64m,年轻代最大256m
JAVA_OPTS="‐XX:+UseParallelGC ‐XX:+UseParallelOldGC ‐Xms128m ‐Xmx1024m XX:NewSize=64m ‐XX:MaxNewSize=256m ‐XX:+PrintGCDetails XX:+PrintGCTimeStamps ‐XX:+PrintGCDateStamps ‐XX:+PrintHeapAtGC Xloggc:…/logs/gc.log"
设置G1回收器
设置了最大停顿时间100毫秒,初始堆内存128m,最大堆内存1024m JAVA_OPTS="‐XX:+UseG1GC ‐XX:MaxGCPauseMillis=100 ‐Xms128m ‐Xmx1024m XX:+PrintGCDetails ‐XX:+PrintGCTimeStamps ‐XX:+PrintGCDateStamps XX:+PrintHeapAtGC ‐Xloggc:…/logs/gc.log"