Tomcat8的jvm和线程池配置

目标

  • 配置Tomcat的jvm的响应时间较短
  • 配置Tomcat的连接池尽可能的高效

jvm启动参数

沿用文章tomcat中配置文件之setenv.sh提到的setenv.sh配置文件,配置如下:

# 使用的jdk目录
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home
# 使用的Tomcat目录
export CATALINA_HOME=/Users/zhangyalin/Documents/tomcat8
# JAVA_OPTS参数需要CATALINA_PID参数
export CATALINA_PID="$CATALINA_HOME/tomcat.pid"
# Tomcat的JVM参数设置
export JAVA_OPTS="-server -XX:+UseG1GC -XX:MaxGCPauseMillis=500 -XX:+AggressiveOpts -Xms8g -Xmx8g"

增加的参数作用:
-XX:+UseG1GC:优先启用G1垃圾回收器。它是一种服务器式垃圾回收器,针对具有大量RAM的多处理器机器。它以高概率满足GC暂停时间为目标,同时保持良好的吞吐量。G1垃圾回收器推荐用于需要大内存(大小约6 GB或更大)的应用,并要求有限的GC延迟要求(稳定和可预测的暂停时间低于0.5秒)。
-XX:MaxGCPauseMillis=500:设置最大GC暂停时间的目标值(以毫秒为单位)。这是一个柔和的目标,JVM将尽其最大努力来实现它。默认情况下,没有最大暂停时间值。
-XX:+AggressiveOpts:允许使用积极的性能优化功能,预计这些功能将在即将发布的版本中成为默认功能。默认情况下,此选项被禁用,并且不使用这些带实验性的性能优化功能。

Tomcat连接池

Executor

conf/server.xml文件中找到:

<!--The connectors can use a shared executor, you can define one or more named thread pools-->
<!--
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
    maxThreads="150" minSpareThreads="4"/>
-->

取消掉注释修改为:

<!--The connectors can use a shared executor, you can define one or more named thread pools-->

<Executor 
  name="tomcatThreadPool" 
  namePrefix="catalina-exec-" 
  maxThreads="500" 
  minSpareThreads="100" 
  prestartminSpareThreads="true" 
  maxQueueSize="100"/>
  • name:连接池名称;
  • namePrefix:连接池创建的每个线程的名称前缀。单个线程的线程名称将为namePrefix + threadNumber
  • maxThreads:此池中活动线程的最大数量,默认值为200;
  • minSpareThreads:此池中始终保持活动状态的线程最小数量,默认值为25;
  • prestartminSpareThreads:启动连接池是是否让最小活跃线程minSpareThreads也同时生效,也就是Tomcat启动时初始化这些线程,而不是等到需要的时候再启动线程;
  • maxQueueSize:最大的队列长度,默认值是Integer.MAX_VALUE。

Connector

conf/server.xml文件中找到:

<!-- A "Connector" represents an endpoint by which requests are received
     and responses are returned. Documentation at :
     Java HTTP Connector: /docs/config/http.html
     Java AJP  Connector: /docs/config/ajp.html
     APR (HTTP/AJP) Connector: /docs/apr.html
     Define a non-SSL/TLS HTTP/1.1 Connector on port 8080
-->
<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />

修改为:

<!-- A "Connector" represents an endpoint by which requests are received and responses are returned. Documentation at : Java HTTP Connector: /docs/config/http.html Java AJP Connector: /docs/config/ajp.html APR (HTTP/AJP) Connector: /docs/apr.html
Define a non-SSL/TLS HTTP/1.1 Connector on port 8080 -->
<Connector 
  port="80" 
  protocol="org.apache.coyote.http11.Http11Nio2Protocol" 
  connectionTimeout="20000" 
  maxConnections="10000" 
  acceptCount="100" 
  acceptorThreadCount="2" 
  enableLookups="false" 
  executor="tomcatThreadPool" 
  redirectPort="8443"/>
  • port:使用的端口;
  • protocol:默认是HTTP/1.1,这个会在让tomcat自动选择NIO,NIO2,APR/native:
    1. org.apache.coyote.http11.Http11NioProtocol- non blocking Java NIO connector
    2. org.apache.coyote.http11.Http11Nio2Protocol- non blocking Java NIO2 connector
    3. org.apache.coyote.http11.Http11AprProtocol- the APR/native connector.
  • connectionTimeout:连接超时时间,单位是毫秒;
  • maxConnections:服务器在任何给定时间接受和处理的最大连接数。请注意,一旦达到限制,操作系统仍然可以接受基于acceptCount设置的连接。默认值因连接器类型而异。对于NIO和NIO2,默认值为10000.对于APR /本机,默认值为8192;
  • acceptCount:所有可能的请求处理线程正在使用时传入连接请求的最大队列长度。队列满时收到的任何请求都将被拒绝。默认值是100;
  • acceptorThreadCount:用于接受连接的线程数。在多CP​​U机器上使用这个值,不要超过2个;
  • enableLookups:如果代码里面没有request.getRemoteHost()可以使用禁止DNS查询;
  • executor:连接池的名字;
  • redirectPort:重定向端口。
    **Note:**如果org.apache.coyote.http11.Http11Nio2Protocol在控制台有警告,就改为org.apache.coyote.http11.Http11NioProtocol尝试一下。

感受

还有关于Tomcat的压缩算法配置,这里没有使用。以后有机会遇到,再去配置。这里使用G1垃圾回收器,这个G1垃圾回收会根据程序需要自动配比伊甸园代,老年代和old代内存空间之配比,所以,不需要手动再去配置了。

参考:
Tomcat 8 安装和配置、优化
Apache Tomcat 8 Configuration Reference

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值