Linux Tomcat 优化

JDK

export JAVA_HOME=/usr/java/jdk1.8.0_92
export JRE_HOME=/usr/java/jdk1.8.0_92/jre
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib:/jedis-2.9.0.jar
export PATH=$JAVA_HOME/bin:$PATH:$MAVEN_HOME/bin:

优化

Tomcat方面

基本的:server.xml 配置文件中的参数,调整最大连接数,超时等

高级优化:

  1. 工作方式选择

首先就要对代码进行动静分离,让 Tomcat 只负责 jsp 文件的解析工作。
如采用 Apache 和 Tomcat 的整合方式,他们之间的连接方案有三种选择,JK、http_proxy 和 ajp_proxy。
相对于 JK 的连接方式,后两种在配置上比较简单的,灵活性方面也一点都不逊色。但就稳定性而言不像JK 这样久经考验,所以建议采用 JK 的连接方式。

2. Connector 连接器的配置

Tomcat 连接器的三种方式: bio、nio 和 apr,三种方式性能差别很大。
apr 的性能最优, bio 的性能最差。
而 Tomcat 7 使用的 Connector 默认就启用的 Apr 协议,但需要系统安装 Apr 库,否则就会使用 bio 方式。

3. 配置文件优化

默认配置下,Tomcat 会为每个连接器创建一个绑定的线程池(最大线程数 200),服务启动时,默认创建了 5 个空闲线程随时等待用户请求。

调整为
    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
        maxThreads="500" minSpareThreads="20" maxSpareThreads="50" maxIdleTime="60000"/>

maxThreads : 使用线程来处理接收的每个请求,表示 Tomcat 可创建的最大的线程数,默认值是 200
设置越大会耗费内存和 CPU
minSpareThreads : 最小空闲线程数,启动时的初始化的线程数,
表示即使没有人使用也开这么多空线程等待,默认值 10。
maxSpareThreads : 最大备用线程数,一旦创建的线程超过这个值,Tomcat 就会关闭不再需要的 socket 线程。

注意, Tomcat 7 在开启线程池前,一定要安装好 Apr 库,并可以启用,否则会有错误报出,shutdown.sh 脚本无法关闭进程。

修改节点,增加 executor 属性,搜索【port="8080"】,调整为

<Connector executor="tomcatThreadPool"
           port="8080" protocol="HTTP/1.1"
           URIEncoding="UTF-8"
           connectionTimeout="30000"
           enableLookups="false"
           disableUploadTimeout="false"
           connectionUploadTimeout="150000"
           acceptCount="300"
           keepAliveTimeout="120000"
           maxKeepAliveRequests="1"
           compression="on"
           compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,image/gif,image/jpg,image/png" 
           redirectPort="8443" />

URIEncoding :指定 容器的 URL 编码格式
connnectionTimeout: 网络连接超时,单位:毫秒,设置为 0 表示永不超时,通常设置为 30000 毫秒
enableLookups: 是否反查域名,以返回远程主机的主机名,取值为:true 或 false
如果设置为false,则直接返回IP地址,为了提高处理能力,应设置为 false。
disableUploadTimeout:上传时是否使用超时机制。
connectionUploadTimeout:上传超时时间,毕竟文件上传可能需要消耗更多的时间。
acceptCount:指定当所有可以使用的处理请求的线程数都被使用时,可传入连接请求的最大队列长度,
超过这个数的请求将不予处理,默认为100个。
keepAliveTimeout:长连接最大保持时间(毫秒),表示在下次请求过来之前,保持该连接多久
默认是使用 connectionTimeout 时间,-1 为不限制超时。
maxKeepAliveRequests:表示在服务器关闭之前,该连接最大支持的请求数。
超过该请求数的连接也将被关闭,1表示禁用,-1表示不限制个数,默认100个,
一般设置在100~200之间。
compression:是否对响应的数据进行 GZIP 压缩,off:表示禁止压缩;
on:表示允许压缩(文本将被压缩)、force:表示所有情况下都进行压缩,默认值为off,
压缩数据后可以有效的减少页面的大小,一般可以减小1/3左右,节省带宽。
compressionMinSize:表示压缩响应的最小值,只有当响应报文大小大于这个值的时候才会对报文进行压缩,
如果开启了压缩功能,默认值就是2048。
compressableMimeType:压缩类型,指定对哪些类型的文件进行数据压缩。
noCompressionUserAgents="gozilla, traviata": 对于以下的浏览器,不启用压缩。

参考

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