目的
现在Tomcat容器在企业中的应用还占据很高比例,如何对Tomcat优化配置,让其实现高并发的同时,安全也能兼顾呢。本篇就详细介绍Tomcat高并发和安全配置。
变量配置
设置 Tomcat 相关变量:
1  | vim bin/catalina.sh  | 
在配置文件的可编辑内容最上面(98 行开始),加上如下内容(具体参数根据你服务器情况自行修改):
1  | JAVA_HOME=/usr/program/jdk1.8.0_72  | 
如果使用 shutdown.sh 还无法停止 tomcat,可以修改其配置:
1  | vim bin/shutdown.sh  | 
JVM 优化
Java 的内存模型分为:
1  | Young,年轻代(易被 GC)。Young 区被划分为三部分,Eden 区和两个大小严格相同的 Survivor 区,其中 Survivor 区间中,某一时刻只有其中一个是被使用的,另外一个留做垃圾收集时复制对象用,在 Young 区间变满的时候,minor GC 就会将存活的对象移到空闲的Survivor 区间中,根据 JVM 的策略,在经过几次垃圾收集后,任然存活于 Survivor 的对象将被移动到 Tenured 区间。  | 
Linux 修改 bin/catalina.sh 文件,把下面信息添加到文件第一行。Windows 和 Linux 有点不一样的地方在于,在 Linux 下,下面的的参数值是被引号包围的,而 Windows 不需要引号包围。
如果服务器只运行一个 Tomcat
机子内存如果是 8G,一般 PermSize 配置是主要保证系统能稳定起来就行:
1  | JAVA_OPTS="-Dfile.encoding=UTF-8 -server -Xms6144m -Xmx6144m -XX:NewSize=1024m -XX:MaxNewSize=2048m -XX:PermSize=512m -XX:MaxPermSize=512m -XX:MaxTenuringThreshold=10 -XX:NewRatio=2 -XX:+DisableExplicitGC"  | 
机子内存如果是 16G,一般 PermSize 配置是主要保证系统能稳定起来就行:
1  | JAVA_OPTS="-Dfile.encoding=UTF-8 -server -Xms13312m -Xmx13312m -XX:NewSize=3072m -XX:MaxNewSize=4096m -XX:PermSize=512m -XX:MaxPermSize=512m -XX:MaxTenuringThreshold=10 -XX:NewRatio=2 -XX:+DisableExplicitGC"  | 
机子内存如果是 32G,一般 PermSize 配置是主要保证系统能稳定起来就行:
1  | JAVA_OPTS="-Dfile.encoding=UTF-8 -server -Xms29696m -Xmx29696m -XX:NewSize=6144m -XX:MaxNewSize=9216m -XX:PermSize=1024m -XX:MaxPermSize=1024m -XX:MaxTenuringThreshold=10 -XX:NewRatio=2 -XX:+DisableExplicitGC"  | 
如果是开发机
1  | -Xms550m -Xmx1250m -XX:PermSize=550m -XX:MaxPermSize=1250m  | 
参数说明:
1  | -Dfile.encoding:默认文件编码  | 
禁用8005端口
1  | vim conf/server.xml  | 
关闭自动部署
1  | 默认值:  | 
线程池限制
1  | 默认为注释:  | 
1  | 参数解释:  | 
连接器配置
1  | 默认值:  | 
1  | 参数解释:  | 
建议:压缩会增加Tomcat负担,最好采用Nginx + Tomcat 或者 Apache + Tomcat 方式,压缩交由Nginx/Apache 去做。
Tomcat 的压缩是在客户端请求服务器对应资源后,从服务器端将资源文件压缩,再输出到客户端,由客户端的浏览器负责解压缩并浏览。相对于普通的 浏览过程 HTML、CSS、Javascript和Text,它可以节省40% 左右的流量。更为重要的是,它可以对动态生成的,包括CGI、PHP、JSP、ASP、Servlet,SHTML等输出的网页也能进行压缩,压缩效率也很高。
禁用 AJP
前提:如果你服务器没有使用 Apache或不用ajp
AJP是为 Tomcat 与 HTTP 服务器之间通信而定制的协议,能提供较高的通信速度和效率。如果tomcat前端放的是apache的时候,会使用到AJP这个连接器。 默认是开启的。如果不使用apache,注释该连接器。
1  | 把下面这一行注释掉,默认 Tomcat 是开启的。  | 
隐藏或修改版本号
1  | cd /usr/local/tomcat/lib/  | 
管理页面安全
1  | rm -rf /usr/local/apache-tomcat-8.5.16/webapps/*  | 

