Tomcat调优技巧

前言

Tomcat调优技巧可以从两方面考虑优化,一个是Tomcat的自身调优,另一个就是调优JVM内存。下面介绍调优手段,更多详细的原理和实现以后用到的时候再来补充记录。

一、Tomcat的自身调优

  • 采用动静分离节约Tomcat的性能
  • 调整Tomcat的线程池
  • 调整Tomcat的连接器
  • 修改Tomcat的运行模式
  • 禁用AJP连接器

二、 JVM调优

  • 调优JVM内存

Tomcat自身调优

1、采用动静分离

静态资源如果让Tomcat处理的话,Tomcat的性能会被损耗很多,所以我们一般采用:Nginx+Tomcat实现动静分离,让Tomcat只负责JSP文件的解析工作,Nginx实现静态资源的访问

2、调优Tomcat的线程池

打开Tomcat的serve.xml——>配置Executor
Tomcat调优技巧

参数解释:

  • name
    给执行器(线程池)起一个名字
  • namePrefix
    指定线程池中的每一个线程的name前缀
  • maxThreads
    线程池中的最大线程数量
    假设:请求的数量超过了“750”,这将不是意味着将maxThreads属性值设置为“750”,它的最好的解决方法是使用“Tomcat集群”。也就是说,如果有“1000”个请求,两个Tomcat实例设置“maxThreads=500”,而不在单Tomcat实例的情况下设置 maxThreads=1000。
  • minSpareThreads
    线程池中允许空闲的线程数量(多余的线程都杀死)
  • maxIdleTime
    一个线程空闲多久算是一个空闲线程

3、调优Tomcat的连接器Connector

打开Tomcat的serve.xml——>配置Connector
Tomcat调优技巧Tomcat调优技巧

参数解释:

  • executor
    指定这个连接器所使用的执行器(线程池)
  • enableLookups=“false”
    关闭DNS解析,减少性能损耗
  • minProcessors
    服务器启动时创建的最少线程数
  • maxProcessors
    最大可以创建的线程数
  • acceptCount=“1000”
    线程池中的线程都被占用,允许放到队列中的请求数
  • maxThreads=“3000”
    最大线程数
  • minSpareThreads=“20”
    最小空闲线程数,这里是一直会允许的线程
  • 和压缩有关的配置
    如果已经对代码进行了动静分离,静态页面和图片等数据就不需要Tomcat处理了
    那么也就不需要在Tomcat中配置压缩了。

4、通过修改Tomcat的运行模式

(1)BIO
Tomcat8以下的版本,默认使用的就是BIO(阻塞式IO)模式
对于每一个请求都要创建一个线程来处理,不适合高并发。
Tomcat调优技巧
(2)NIO
Tomcat8以上的版本,默认使用的就是NIO模式。即非阻塞式IO模式。
(3)APR——(Apache Portable Runtime)

  • 是Tomcat生产环境运行的首选方式

  • 如果操作系统未安装APR或者APR路径未指到Tomcat默认可识别的路径,则APR模式无法启动,自动切换启动NIO模式。
    所以必须要安装APR和native,直接启动就支持APR

  • APR是从操作系统级别解决异步IO问题,APR的本质就是使用JNI(java native interface)
    技术调用操作系统底层的IO接口,所以需要提前安装所需要的依赖

  • 提升Tomcat对静态文件的处理性能,当然也可以采用动静分离

5、禁用AJP连接器

Apache JServer Protocol
使用Nginx+Tomcat的架构,所以用不着AJP协议,所以把AJP连接器禁用。
Tomcat调优技巧

JVM的调优

Tomcat是运行在JVM上的,所以对JVM的调优也是非常有必要的。

调优内存

  • 找到 catalina.sh文件
    Tomcat调优技巧

  • 添加的位置
    Tomcat调优技巧

  • 尝试参数的设置

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"

调整堆的大小的目的是最小化垃圾收集的时间,以在特定的时间内最大化处理客户的请求。

小结

本篇文章只是总结了调优有哪些途径,具体怎么调需要我们根据实际情况去验证调整。

转载:www.cnblogs.com/wangsen