Tomcat容器优化手记

优化思路

  • 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>
发布了60 篇原创文章 · 获赞 1 · 访问量 3319

猜你喜欢

转载自blog.csdn.net/qq_16438883/article/details/103860937