转载:www.cnblogs.com/wangsenhtml
最近,看到一篇讲述 Tomcat 调优的文章,写得挺不错的,因为以前写了好几篇关于 Tomcat 的文章,这篇分享给各位读者,作一下补充。java
原文以下。面试
1、描述apache
最近,在补充本身的短板,恰好整理到 Tomcat 调优这块,基本上面试必问,因而就花了点时间去搜集一下 Tomcat 调优都调了些什么,先记录一下调优手段,更多详细的原理和实现之后用到时候再来补充记录,下面就来介绍一下,Tomcat 调优大体分为两大类。tomcat
一、Tomcat的自身调优服务器
采用动静分离节约 Tomcat 的性能架构
调整 Tomcat 的线程池并发
调整 Tomcat 的链接器less
修改 Tomcat 的运行模式异步
禁用 AJP 链接器
二、JVM的调优
调优Jvm内存
2、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:一个线程空闲多久算是一个空闲线程;
其余的配置其实阅读官方文档是最好的「见参考连接」。
三、调优 Tomcat 的链接器 Connector
打开 Tomcat 的 serve.xml,配置 Connector,参数说明以下。
executor:指定这个链接器所使用的执行器(线程池);
enableLookups=false:关闭 DNS 解析,减小性能损耗;
minProcessors:服务器启动时建立的最少线程数;
maxProcessors:最大能够建立的线程数;
acceptCount=1000:线程池中的线程都被占用,容许放到队列中的请求数;
maxThreads=3000:最大线程数;
minSpareThreads=20:最小空闲线程数,这里是一直会运行的线程;
与压缩有关系的配置:若是已经对代码进行了动静分离,静态页面和图片等数据就不须要 Tomcat 处理了,那么也就不须要配置在 Tomcat 中配置压缩了;
一个完整的配置以下。
四、经过修改 Tomcat 的运行模式
BIO
Tomcat8 如下版本,默认使用的就是 BIO「阻塞式IO)」模式。
对于每个请求都要建立一个线程来进行处理,不适合高并发。
NIO
Tomcat8 以上版本,默认使用的就是NIO模式「非阻塞式 IO」。
APR
全称 Apache Portable Runtime,是Tomcat生产环境运行的首选方式,若是操做系统未安装 APR 或者 APR 路径未指到 Tomcat 默承认识别的路径,则 APR 模式没法启动,自动切换启动 NIO 模式。因此必需要安装 APR 和 Native,直接启动就支持 APR,APR是从操做系统级别解决异步 IO 问题,APR 的本质就是使用 JNI 技术调用操做系统底层的 IO 接口,因此须要提早安装所须要的依赖
提高 Tomcat 对静态文件的处理性能,固然也能够采用动静分离。
五、禁用 AJP 链接器
AJP的全称 Apache JServer Protocol,使用 Nginx+Tomca t的架构,因此用不着 AJP 协议,因此把AJP链接器禁用。
3、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"
调整堆大小的的目的是最小化垃圾收集的时间,以在特定的时间内最大化处理客户的请求。
参考
https://tomcat.apache.org/tomcat-8.0-doc/config/executor.html
https://tomcat.apache.org/tomcat-8.0-doc/config/index.html