Tomcat 调优技巧:1、Tomcat自身调优: ①采用动静分离节约Tomcat的性能; ②调整Tomcat的线程池; ③调整Tomcat的连接器; ④修改Tomcat的运行模式; ⑤禁用AJP连接器;2、JVM调优
具体调优过程:1、采用动静分离: 静态资源如果都让Tomcat处理的话,Tomcat的性能会被损耗很多,所以我们一般都是采用:NGINX+Tomcat实现动静分离,让Tomcat只负责jsp文件的解析工作,Nginx实现静态资源的访问。
2、调优Tomcat线程池: 打开Tomcat的server.xml,配置Executor: <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="500" minSpareThreads="20" maxIdleTime="60000"/> name:给执行器(线程池)起一个名字; namePrefix:指定线程池中的每一个线程的name前缀; maxThreads:线程池中最大的线程数量,假设请求的数量超过了750,这将不是意味着将maxThreads属性值设置为750,它的最好解决方案是使用【Tomcat集群】; 也就是说,如果有1000请求,两个Tomcat实例的情况下设置maxThreads=500,而不在单Tomcat实例的情况下设置maxThreads=1000; minSpareThreads:线程池中允许空闲的线程数量(多余的线程都杀死); maxldLeTime:一个线程空闲多久算是一个空闲线程;3、 调优Tomcat的连接器Connector: 打开Tomcat的server.xml,配置Connector: <Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1" connectionTimeout="20000" enableLookups="false" URIEncoding="UTF-8"/> executor:指定这个连接器所使用的执行器(线程池); enableLookups=false:关闭DNS解析,减少性能损耗; minProcessors:服务器启动时创建的最少线程数; maxProcessors:最大可以创建的线程数; acceptCount=1000:线程池中的线程都被占用,允许放到队列中的请求数; maxThreads=3000:最大线程数; minSpareThreads=20:最小空闲线程数,这里是一直会运行的线程;
4、修改Tomcat的运行模式: Tomcat8以下版本,默认使用的就是BIO(阻塞式IO)模式,对于每一个请求都要创建一个线程来进行处理,不适合高并发。 Tomcat8以上版本,默认使用的就是NIO模式(非阻塞式IO) APR: 全称Apache Portable Runtime,是Tomcat生产环境运行的首选方式,如果操作系统未安装APR或者APR路径未指到Tomcat默认可以识别的路径, 则APR模式无法启动,自动切换启动NIO模式。所以必须要安装APR和Native,直接启动就支持APR,APR是从操作系统级别解决异步IO问题, APR的本质就是使用JNI技术调用操作系统底层的IO接口,所以需要提前安装所需要的依赖,提升Tomcat对静态文件的处理性能,当然也可以采用动静分离。5、禁用AJP连接器: AJP的全称Apache JServer Protocol,使用Nginx+Tomcat的架构,所以用不着AJP协议,所以把AJP连接器禁用。 <Connector port="8009" protocol="AJP/1.3" redirectPort="8442"/>
6、JVM调优: Tomcat是运行在JVM上的,所以对JVM的调优也是非常有必要的。 找到catalina.sh,在cygwin=false前面添加: JAVA_OPTS="-Xms256m -Xms512m -Xss1024K -XX:PermSize=128m -XX:MaxPermSize=256m" 调整堆大小的目的是最小化垃圾收集的时间,以在待定的时间内最大化处理用户的请求。