目录
优化思路
- conf/server.xml核心组件
- conf/server.xml非核心组件
- conf/web.xml
- JVM方面的优化
配置优化
减少web.xml/server.xml中标签
如果没有使用jsp或者servlet可以删除
-
servlet
<servlet> <servlet-name>default</servlet-name> <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>0</param-value> </init-param> <init-param> <param-name>listings</param-name> <param-value>false</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
-
JspServlet
<servlet> <servlet-name>jsp</servlet-name> <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class> <init-param> <param-name>fork</param-name> <param-value>false</param-value> </init-param> <init-param> <param-name>xpoweredBy</param-name> <param-value>false</param-value> </init-param> <load-on-startup>3</load-on-startup> </servlet> <servlet-mapping> <servlet-name>jsp</servlet-name> <url-pattern>*.jsp</url-pattern> <url-pattern>*.jspx</url-pattern> </servlet-mapping>
-
welcome-list-file
<welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> </welcome-file-list>
-
mime-mapping移除响应的内容
支持的下载打开类型<mime-mapping> <extension>123</extension> <mime-type>application/vnd.lotus-1-2-3</mime-type> </mime-mapping> <mime-mapping> <extension>3dml</extension> <mime-type>text/vnd.in3d.3dml</mime-type> </mime-mapping>
-
session-config
默认jsp页面有session,就是在于这个配置
<session-config> <session-timeout>30</session-timeout> </session-config>
调整优化server.xml中标签
Connector标签
- protocol属性
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
1.tomcat8中,protocol默认使用的是NIO,tomcat7中默认使用的是BIO。
- executor属性
acceptCount:达到最大连接数之后,等待队列中还能放多少连接,超过即拒绝,配置太大也没有意义,默认是100.
maxConnections:达到这个值之后,将继续接受连接,但是不处理,能继续接受多少根据acceptCount的值.
maxThreads::最大工作线程数,也就是用来处理request请求的,默认是200,如果自己配了executor,并且和Connector有关联了,则之前默认的200就会被忽略,取决于CPU的配置。监控中就可以看到所有的工作线程是什么状态,通过监控就能知道开启多少个线程合适.
minSpareThreads:最小空闲线程数
- Host标签
autoDeploy:Tomcat运行时,要用一个线程拿出来进行检查,生产环境之下一定要改成false,默认是true.
unpackWARS:自动解压WAR包,默认也是true.
- Context标签
reloadable:false
reloadable:如果这个属性设为true,tomcat服务器在运行状态下会监视在WEB-INF/classes和WEB-INF/lib目录下class文件的改动,如果监测到有class文件被更新的,服务器会自动重新加载Web应用。
在开发阶段将reloadable属性设为true,有助于调试servlet和其它的class文件,但这样用加重服务器运行负荷,建议在Web应用的发存阶段将reloadable设为false。
启动速度优化
webapps
目录介绍
-
docs
有关于Tomcat的介绍和操作文档等
-
examples
小程序示例:如websocket等host-manager
-
host-manager
进行 Host 管理
-
manager
进行 Server Status 和 Applications 管理,对服务器和其他应用进行启动、重启、关闭等操作,对 Session、JVM 性能参数等进行监听并管理
-
ROOT
根目录,即访问 localhost:8080/路径中的/下面,包括 WEB 的通用访问配置等
优化webapps
删除webapps下的所有的目录,提高tomcat的启动速度,删除完以后修改配置文件tomcat/conf/logging.properties
# ## handle 中需要删除的部分,注意后面的符号
# 删除:3manager.org.apache.juli.AsyncFileHandler,
# 删除:4host-manager.org.apache.juli.AsyncFileHandler,
handlers = 1catalina.org.apache.juli.AsyncFileHandler, 2localhost.org.apache.juli.AsyncFileHandler, 3manager.org.apache.juli.AsyncFileHandler, 4host-manager.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler
# ## Handler specific properties中需要删除的部分
# 如下所示
3manager.org.apache.juli.AsyncFileHandler.level = FINE
3manager.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
3manager.org.apache.juli.AsyncFileHandler.prefix = manager.
4host-manager.org.apache.juli.AsyncFileHandler.level = FINE
4host-manager.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
4host-manager.org.apache.juli.AsyncFileHandler.prefix = host-manager.
# ## Facility specific properties 中需要删除的部分
# 如下所示
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].handlers = 3manager.org.apache.juli.AsyncFileHandler
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].handlers = 4host-manager.org.apache.juli.AsyncFileHandler
如果在删除目录之前启动过 Tomcat,在 tomcat/conf/Catalina/localhost 里面或者其他文件夹里面可能也会有两个 xml 文件:host-manager.xml和manager.xml,删掉即可。
随机数优化
tomcat 获取随机值阻塞
tomcat的启动需要产生session id,这个产生需要通过java.security.SecureRandom
生成随机数来实现,随机数算法使用的是”SHA1PRNG”,但这个算法依赖于操作系统的提供的随机数据,在linux系统中,这个值又依赖于/dev/random 和/dev/urandom
/dev/random :阻塞型,读取它就会产生随机数据,但该数据取决于熵池噪声,当熵池空了,对/dev/random 的读操作也将会被阻塞。
/dev/urandom: 非阻塞的随机数产生器,它会重复使用熵池中的数据以产生伪随机数据。这表示对/dev/urandom的读取操作不会产生阻塞,但其输出的熵可能小于/dev/random的。它可以作为生成较低强度密码的伪随机数生成器,不建议用于生成高强度长期密码。
优化随机数
更换产生随机数的源
因为/dev/urandom 是非阻塞的随机数产生器,所以我们可以从这边获取,但是生产的随机数的随机性比较低。我们可以在 我们的tomcat启动脚本(catalina.sh)里面添加:
JAVA_OPTS="$JAVA_OPTS -Djava.security.egd=file:/dev/./urandom"
或者是更改java的java.security 文件,将securerandom.source=file:/dev/random
securerandom.source=file:/dev/./urandom
关闭websocket
比如没有使用的话,可以删除websocket-api.jar、tomcat-websocket.jar、servlet-api.jar
多个线程启动web应用
<Host startStopThreads="0">
</Host>
其他方面优化
- Connector
配置压缩属性compression=“500”,文件大于500bytes才会压缩 - 数据库优化
减少对数据库访问等待的时间,可以从数据库的层面进行优化,或者加缓存等等各种方案。 - 开启浏览器缓存,nginx静态资源部署
<Host startStopThreads="0">
</Host>