Tomcat调优

Posted by ZhangShun Blog on September 27, 2018

Tomcat 配置相关说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/usr/local/tomcat 主目录(安装目录)

bin:存放windows或linux平台上启动或关闭的Tomcat的脚本文件
conf:存放Tomcat的各种全局配置文件,其中最主要的是server.xml和web.xml
lib:存放Tomcat运行需要的库文件(JARS)
logs:存放Tomcat执行时的LOG文件
webapps:Tomcat的主要Web发布目录(包括应用程序事例)htdocs(html php)
work:存放jsp编译后产生的class文件

ls /usr/local/tomcat/conf/

catalina.policy:权限控制配置文件
catalina.properties:Tomcat属性配置文件
context.xml:上下文配置文件(selinux)
logging.properties:日志log相关配置文件
server.xml:主配置文件
tomcat-users.xml:manager-gui管理用户配置文件(Tomcat安装后生成的管理界面,该文件可开启访问)
web.xml:Tomcat的servlet,servlet-mapping,filter,MIME等相关配置

server.xml 主要配置文件,可修改启动端口,设置网站根目录,虚拟主机,开启https等功能。

JVM内存优化

默认情况下Tomcat的相关内存配置较低,这对于一些大型项目显然是不够用的,这些项目运行就已经耗费了大部分内存空间,何况大规模访问的情况

  1. 修改内存等 JVM相关配置

Linux下修改TOMCAT_HOME/bin/catalina.sh,在其中加入,可以放在CLASSPATH=下面:

1
JAVA_OPTS="-server -XX:PermSize=512M -XX:MaxPermSize=1024m -Xms2048m -Xmx2048m -XX:+UseParallelGCThreads=8 -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection"
  • server参数:表示以服务模式启动,启动速度会稍微慢一点,但性能会高很多。不加这个参数,默认是以客户端模式启动
  • Xms:Java虚拟机初始化时堆的最小内存,一般与 Xmx配置为相同值,这样的好处是GC不必再为扩展内存空间而消耗性能
  • Xmx:Java虚拟机可使用堆的最大内存,一般建议堆的最大值设置为可用内存的最大值的80%
  • XX:PermSize:Java虚拟机永久代大小
  • XX:MaxPermSize:Java虚拟机永久代大小最大值
  • -XX:+UseParallelGCThreads:并行收集器线程数,同时有多少个线程进行垃圾回收,一般与CPU数量相等
  • -XX:+UseConcMarkSweepGC:CMS收集器(并发收集器)
  • -XX:+UseCMSCompactAtFullCollection:开启内存空间压缩和整理,防止过多内存碎片

Tomcat 本身优化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    <Connector port="80" protocol="HTTP/1.1"
               connectionTimeout="20000"
               maxConnections="3000"
               maxThreads="400"
               minSpareThreads="200"
               redirectPort="8443"
               enableLookups="false" 
               acceptCount="100" 
               maxPostSize="10485760" 
               compression="on" 
               disableUploadTimeout="true" 
               compressionMinSize="2048" 
               acceptorThreadCount="8" 
               compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript" 
               URIEncoding="utf-8" />
  1. connnectionTimeout:网络连接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为20000毫秒
  2. maxConnections:当Tomcat接收的连接数达到maxConnections时,Acceptor线程不会读取accept队列中的连接;这时accept队列中的线程会一直阻塞着,直到Tomcat接收的连接数小于maxConnections
  3. maxThreads:Tomcat线程池最多能起的线程数
  4. minSpareThreads:Tomcat初始化的线程池大小或者说Tomcat线程池最少会有这么多线程
  5. enableLookups:是否允许DNS查询反查域名,为了提高处理能力,应设置为false
  6. acceptCount:指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,就是被排队的请求数,超过这个数的请求将拒绝连接。
  7. maxPostSize:对post请求参数大小做出限制
  8. compression:打开压缩功能
  9. disableUploadTimeout:对POST请求发送数据超时使用其他参数来设置,这样在发送数据的过程中最大可以等待的时间间隔就不再由connectionTimeout决定,而是由connectionUploadTimeout决定
  10. compressionMinSize:启用压缩的输出内容大小,默认为2KB
  11. acceptorThreadCount:接收Socket连接的线程数。默认值是1,这个值不需要太大,最大值与CPU核心数一样就行了,没有必要太大
  12. compressableMimeType:压缩的类型

其他优化

1.禁用tomcat的AJP协议

1
2
3
注释:

<!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> -->

2.修改通讯模式BIO修改为NIO提高并发处理能力

1
2
3
#去掉注释

<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"