Tomcat的优化相关配置

所谓优化就是发挥机器原本的性能。tomcat的优化既是正确的方式使用tomcat。

我参考其他博文整理了一篇关于tomcat优化的相关配置。

目录

一、内存优化

二、配置优化

三、使用APR组件


一、内存优化

内存优化既是通过配置JVM的堆内存大小的方式来实现。

(1)配置方式:

  • linux中修改bin/cateline.sh文件,添加以下内容:

JAVA_OPTS="-Xms2048m -Xmx2048m"  
  • windows中修改bin/cateline.bat文件,添加以下内容:
set JAVA_OPTS=-Xms2048m -Xmx2048m  

相关参数:

  • Xms:初始化的堆内存大小
  • Xmx:最大的堆内存大小

(2)windows下测试修改并查看:

修改完配置,启动tomcat,使用命令行进入%JAVA_HOME%/bin目录,

  • jps查看jvm的运行进程号
C:\Program Files\Java\jdk1.8.0_101\bin>jps
6128 Jps
1276 Bootstrap
  • jmap:观察运行中的JVM 物理内存的占用情况,即显示下面的内容
C:\Program Files\Java\jdk1.8.0_101\bin>jmap -heap 1276

修改前:

Heap Configuration:
   MinHeapFreeRatio         = 0
   MaxHeapFreeRatio         = 100
   MaxHeapSize              = 1046478848 (998.0MB) 《--修改前的最大值
   NewSize                  = 22020096 (21.0MB)
   MaxNewSize               = 348651520 (332.5MB)
   OldSize                  = 45088768 (43.0MB)
   NewRatio                 = 2
   SurvivorRatio            = 8
   MetaspaceSize            = 21807104 (20.796875MB)
   CompressedClassSpaceSize = 1073741824 (1024.0MB)
   MaxMetaspaceSize         = 17592186044415 MB
   G1HeapRegionSize         = 0 (0.0MB)

Heap Usage:
PS Young Generation
Eden Space:
   capacity = 227540992 (217.0MB) <--1
   used     = 30208568 (28.80913543701172MB)
   free     = 197332424 (188.19086456298828MB)
   13.276099279728903% used
From Space:
   capacity = 13107200 (12.5MB)  <--2
   used     = 0 (0.0MB)
   free     = 13107200 (12.5MB)
   0.0% used
To Space:
   capacity = 16252928 (15.5MB)  <--3
   used     = 0 (0.0MB)
   free     = 16252928 (15.5MB)
   0.0% used
PS Old Generation
   capacity = 69730304 (66.5MB)  <--4        将年轻代和老年代的内存(1-4)加起来就是默认的初始化的内存大小
   used     = 29030872 (27.685997009277344MB)
   free     = 40699432 (38.814002990722656MB)
   41.63307820943962% used

19129 interned Strings occupying 2404488 bytes.

修改后:

Heap Configuration:
   MinHeapFreeRatio         = 0
   MaxHeapFreeRatio         = 100
   MaxHeapSize              = 2147483648 (2048.0MB) <--修改后
   NewSize                  = 715653120 (682.5MB)
   MaxNewSize               = 715653120 (682.5MB)
   OldSize                  = 1431830528 (1365.5MB)
   NewRatio                 = 2
   SurvivorRatio            = 8
   MetaspaceSize            = 21807104 (20.796875MB)
   CompressedClassSpaceSize = 1073741824 (1024.0MB)
   MaxMetaspaceSize         = 17592186044415 MB
   G1HeapRegionSize         = 0 (0.0MB)

Heap Usage:     年轻代+老年代=2048m,正是自定义配置的2048m
PS Young Generation
Eden Space:
   capacity = 537395200 (512.5MB)
   used     = 65443752 (62.412025451660156MB)
   free     = 471951448 (450.08797454833984MB)
   12.177956185689787% used
From Space:
   capacity = 89128960 (85.0MB)
   used     = 0 (0.0MB)
   free     = 89128960 (85.0MB)
   0.0% used
To Space:
   capacity = 89128960 (85.0MB)
   used     = 0 (0.0MB)
   free     = 89128960 (85.0MB)
   0.0% used
PS Old Generation
   capacity = 1431830528 (1365.5MB)
   used     = 36072216 (34.401145935058594MB)
   free     = 1395758312 (1331.0988540649414MB)
   2.519307648118535% used

二、配置优化

(1)connector配置:

<Connector port="8080" protocol="HTTP/1.1"   
          maxThreads="1000"   
          minSpareThreads="100"   
          acceptCount="1000"  
          maxConnections="1000"  
          connectionTimeout="20000" 
          tcpNoDelay="true"  
          compression="on"  
          compressionMinSize="2048"
          redirectPort="8443"/>  

相关参数:

  • maxThreads:此Connector要创建的最大请求处理线程数。如果未指定,则此属性默认设置为200.如果Executor与此连接器关联,则忽略此属性,因为连接器将使用Executor而不是内部线程池执行任务。
  • minSpareThreads:最小的始终保持运行的线程数。这包括活动和空闲线程。如果未指定, 则使用默认值10。如果这个Connector使用了Executor则忽略此属性。
  • acceptCount:当所有可能的请求处理线程都在使用时,传入连接请求的最大队列长度。队列已满时收到的任何请求都将被拒绝。默认值为100。
  • maxConnections:服务器在任何给定时间接受和处理的最大连接数。
  • connectionTimeout:超时时间。
  • tcpNoDelay:如果设置为true,则将在服务器套接字上设置TCP_NO_DELAY选项,这样可以在大多数情况下提高性能。默认设置为true
  • compression:所述连接器可在试图节省服务器的带宽使用HTTP / 1.1 GZIP压缩。参数的可接受值是“off”(禁用压缩),“on”(允许压缩,导致文本数据被压缩),“force”(在所有情况下强制压缩)或数字整数值(这是等效于“on”,但指定压缩输出之前的最小数据量)。
  • compressionMinSize:如果压缩设置为“on”,则此属性可用于指定压缩输出之前的最小数据量。如果未指定,则此属性默认为“2048”。
  • redirectPort:如果此连接器支持非SSL请求,并且收到匹配 <security-constraint>需要SSL传输的请求,则Catalina将自动将请求重定向到此处指定的端口号。
  • protocol:这个参数配置此连接器处理哪种协议的请求,有四个值可选,为下图

更多详细的connector参数,参考官方文档:https://tomcat.apache.org/tomcat-8.0-doc/config/http.html

(2)executor配置:

<Executor name="tomcatThreadPoolName"  
         className="org.apache.catalina.core.StandardThreadExecutor" 
         namePrefix="catalina-exec-"   
         maxThreads="1000"   
         minSpareThreads="100"  
         maxIdleTime="60000"  
         maxQueueSize="Integer.MAX_VALUE"  
         prestartminSpareThreads="false"  
         threadPriority="5"/>
  • name:用于在server.xml中的其他位置引用此池的名称。该名称是必需的,必须是唯一的。
  • className:实现的类。实现必须实现 org.apache.catalina.Executor接口。此接口确保可以通过其name属性引用对象并实现Lifecycle,以便可以使用容器启动和停止对象。className的默认值是org.apache.catalina.core.StandardThreadExecutor
  • namePrefix: (字符串)执行程序创建的每个线程的名称前缀。单个线程的线程名称将是namePrefix+threadNumber
  • maxThreads:同上
  • minSpareThreads:同上
  • maxIdleTime:(int)空闲线程关闭毫秒数,除非活动线程数小于或等于minSpareThreads。默认值为60000(1分钟)
  • maxQueueSize:(int)在我们拒绝之前可以排队等待执行的可运行任务的最大数量。默认值是Integer.MAX_VALUE
  • prestartminSpareThreads:(boolean)是否应该在启动Executor时启动minSpareThreads,默认值为 false
  • threadPriority:(int)执行程序中线程的线程优先级,默认为 5Thread.NORM_PRIORITY常量的值)

更多参数,参考官方文档:https://tomcat.apache.org/tomcat-8.0-doc/config/executor.html

Executor可以在Tomcat组件之间共享。配置了Executor需要在connector中引用

<Connector executor="tomcatThreadPoolName"  ....../>

三、使用APR组件

关于使用apr,这有篇博文很好:Tomcat中如何配置使用APR

参考博文:

猜你喜欢

转载自blog.csdn.net/kavierPeng/article/details/86523256