Tomcat的优化

Tomcat作为一款常用的web容器,对其进行优化是提升性能的重要手段;对其进行优化可以从以下方面入手:

  • 调整内存;
  • 调整线程池(Executor);
  • 调整连接器(Connector);
  • 调整运行模式;

调整内存

如果内存设置过小,极有可能导致项目无法启动,会报OOM异常;所以可以适当增大内存;

Windows下修改Tomcat_Home/bin/catalina.sh文件,在@echo off添加如下配置;

Linux下修改Tomcat_Home/bin/catalina.bat文件,在cygwin=false之前添加如下配置;

JAVA_OPTS="-server -Xms256m -Xmx512m -XX:PermSize=64M -XX:MaxPermSize=128m"

参数详解:

  • -server:一定要作为第一个参数,在多个 CPU 时性能佳,还有一种叫 -client 的模式,特点是启动速度比较快,但运行时性能和内存管理效率不高,通常用于客户端应用程序或开发调试,在 32 位环境下直接运行 Java 程序默认启用该模式。Server 模式的特点是启动速度比较慢,但运行时性能和内存管理效率很高,适用于生产环境,在具有 64 位能力的 JDK 环境下默认启用该模式,可以不配置该参数;
  • -Xms: Java虚拟机初始化时堆的最小内存,一般与 Xmx配置为相同值,这样的好处是GC不必再为扩展内存空间而消耗性能;
  • -Xmx: 表示最大 Java 堆大小,当应用程序需要的内存超出堆的最大值时虚拟机就会提示内存溢出,并且导致应用服务崩溃,因此一般建议堆的最大值设置为可用内存的最大值的80%。如何知道我的 JVM 能够使用最大值,使用java -Xmx512M -version 命令来进行测试,然后逐渐的增大512的值,如果执行正常就表示指定的内存大小可用,否则会打印错误信息,默认值为物理内存的 1/4,默认(MinHeapFreeRatio参数可以调整)空余堆内存大于 70% 时,JVM 会减少堆直到-Xms 的最小限制。使用java -Xmx命令测试java最大堆大小
  • -XX:PermSize: Java虚拟机永久代大小;
  • -XX:MaxPermSize:Java虚拟机永久代大小最大值;
    在idea、eclipse等开发工具中设置见解决内存溢出OutOfMemoryError异常

调整线程池(Executor)

打开Tomcat_home/conf/server.xml文件,配置Executor,参数如下:

    <Executor 
		name="tomcatThreadPool" namePrefix="catalina-exec-"
        maxThreads="150" minSpareThreads="20"
		maxSpareThreads="50"/>

参数详解:

  • name:线程池名称,用于Connector中指定;
  • namePrefix:所创建的每个线程的名称前缀;
  • maxThreads:线程池中最大线程数;
  • minSpareThreads:最小空闲线程数,是tomcat启动时初始化的线程数;
  • maxSpareThreads:最大备用线程数,一旦创建的线程超过这个值,Tomcat 就会关闭不再需要的 socket 线程。

注:

  1. 该部分配置也可以直接配置在Connector中,但是不可重复配置
  2. 上述配置的参数,最大线程数要根据实际情况合理设置,并不是越大越好,设置越大会耗费内存和cpu,导致cpu疲于切换线程上下文,无力提供请求服务。

调整连接器(Connector)

Connector是连接器,负责接收客户的请求,以及向客户端回送响应的消息。所以Connector的优化是重要部分。
打开Tomcat_home/conf/server.xml文件,配置Connector,参数如下:

<Connector 
	port="8080" 
	redirectPort="8443"
	executor="tomcatThreadPool"
	protocol="HTTP/1.1"
	URIEncoding = "UTF-8"
    connectionTimeout="20000"
	enableLookups="false"
	minProcessors="100"
	maxProcessors="1000"
	disableUploadTimeout = "false"
	connectionUploadTimeout = "150000"
	
	<!-- 与压缩相关额配置 -->
	compression = "on"
    compressionMinSize = "2048"
    compressableMimeType = "text/html,text/xml,text/javascript,text/css,text/plain,image/gif,image/jpg,image/png" 
    />

参数详解:

  • executor:指定使用的执行器(线程池);
  • URIEncoding:指定tomcat容器的url编码格式;
  • connectionTimeout:网络连接超时,单位:毫秒,设置为 0 表示永不超时;
  • enableLookups:是否支持域名解析,建议设置为false,减少性能损耗;
  • minProcessors/maxProcessors:服务器初始化时创建的最小/最大线程数,与上述Executor中不同的是,一个是线程池的配置,而这是服务器的配置;
  • disableUploadTimeout:上传时是否启用超时机制;
  • connectionUploadTimeout :上传超时时间,与上面一个配置搭配使用

以下配置都与压缩相关,一般为了提升性能,都会对代码进行动静分离,将html、图片等静态交由Nginx处理,此时就不需要进行这部分配置;

  • compression:是否启用压缩功能;
  • compressionMinSize:压缩文件的最小值,只有当文件大于这个值时才会对其进行压缩;
  • compressableMimeType:压缩类型,指定对哪些文件进行压缩。

调整运行模式

主要是对Connector中protocol参数进行调整;tomcat主要有三种模式:

  • BIO:同步阻塞IO,服务器实现模式为每有一个连接就创建一个线程来处理,并不适合高并发,适用于连接数少的架构;
    tomcat中默认启用BIO模式

  • NIO:非阻塞IO,可以复用一个线程处理多个连接(多路复用),适用于连接数多且短的架构;

  • APR:全称 Apache Portable Runtime,是Tomcat生产环境运行的首选方式,APR是从操作系统级别解决异步 IO 问题,APR 的本质就是使用 JNI 技术调用操作系统底层的 IO 接口,所以需要提前安装所需要的依赖。

更多参数上优化可以查阅官方文档:

https://tomcat.apache.org/tomcat-7.0-doc/config/http.html

https://tomcat.apache.org/tomcat-7.0-doc/config/ajp.html

猜你喜欢

转载自blog.csdn.net/Wyunpeng/article/details/121794095
今日推荐