性能优化|tomcat 优化点整理记录

性能优化|tomcat 优化点整理记录

整理

提高并发能力

设置线程池

在配置文件的 Service

<executor name="tomcatThreadPool" namePrefix="catalina-exec-"
        maxThreads="500" minSpareThreads="20" maxIdleTime="60000"/>
	
    <Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1"
               connectionTimeout="200000"
               redirectPort="8443" 
			   URIEncoding="UTF-8"
			   maxHttpHeaderSize="95536" maxPostSize="209715200"
			   server="Neo App Srv 1.0"/>

参数说明:

AttributeDescription
threadPriority ``(优先级)(int)线程的线程优先级执行程序,默认是5(NORM_PRIORITY常数)
daemon``(守护进程)(布尔)是否应该守护程序线程,线程默认是true
namePrefix``(名称前缀)(String) The name prefix for each thread created by the executor. The thread name for an individual thread will be namePrefix+threadNumber
maxThreads``(最大线程数)(int) The max number of active threads in this pool, default is 200
minSpareThreads``(最小活跃线程数)(int) The minimum number of threads always kept alive, default is 25
maxIdleTime``(空闲线程等待时间)(int) The number of milliseconds before an idle thread shutsdown, unless the number of active threads are less or equal to minSpareThreads. Default value is 60000(1 minute)一个空闲的线程shutsdown之前的毫秒数,除非活动线程的数量不等于minSpareThreads。默认值为60000(1分钟)
maxQueueSize``(最大的等待队里数,超过则请求拒绝)(int) The maximum number of runnable tasks that can queue up awaiting execution before we reject them. Default value is Integer.MAX_VALUE可运行的最大数量可以排队等待执行的任务之前,我们拒绝他们。默认值是Integer.MAX_VALUE
prestartminSpareThreads``(是否在启动时就生成minSpareThreads个线程)(boolean) Whether minSpareThreads should be started when starting the Executor or not, the default is falseminSpareThreads是否应该开始在开始执行程序,默认是false
threadRenewalDelay``(重建线程的时间间隔)(long) If a ThreadLocalLeakPreventionListener is configured, it will notify this executor about stopped contexts. After a context is stopped, threads in the pool are renewed. To avoid renewing all threads at the same time, this option sets a delay between renewal of any 2 threads. The value is in ms, default value is 1000 ms. If value is negative, threads are not renewed.。重建线程池内的线程时,为了避免线程同时重建,每隔threadRenewalDelay(单位: ms )重建一个线程。默认值为1000 ,设置为负则不重建
设置启动模式
设置NIO模式

Tomcat8在Linux系统中默认使用这种方式。

强制声明

<Connector port="8080"protocol="org.apache.coyote.http11.Http11NioProtocol"

        connectionTimeout="20000" redirectPort="8443"/>


设置apr 模式

安装起来最困难,但是从操作系统级别来解决异步的IO问题,大幅度的提高性能.

即Apache PortableRuntime,从操作系统层面解决io阻塞问题。

Tomcat7或Tomcat8在Win7或以上的系统中启动默认使用这种方式。

Linux如果安装了apr和native,Tomcat直接启动就支持apr。

具体安装办法 参见这个地址:https://my.oschina.net/lsw90/blog/181161

在那里看我们的tomcat以何种工作模式启动的啊?

Tomcat启动的时候,可以通过log看到Connector使用的是哪一种运行模式:

StartingProtocolHandler [“http-bio-8080”]

StartingProtocolHandler [“http-nio-8080”]

StartingProtocolHandler [“http-apr-8080”]

禁用tomcat的AJP协议

使用Nginx+tomcat的架构,所以用不着AJP协议,所以把AJP连接器禁用。

[root@tomcat1 conf]# vim server.xml

注释:

<!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> -->

AJP(Apache JServerProtocol)

AJPv13协议是面向包的。WEB服务器和Servlet容器通过TCP连接来交互;为了节省SOCKET创建的昂贵代价,WEB服务器会尝试维护一个永久TCP连接到servlet容器,并且在多个请求和响应周期过程会重用连接。

连接器(Connector)优化

最佳实践:

# <Connector executor="tomcatThreadPool"下面添加:

port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"

#最多同时处理的连接数,Tomcat使用线程来处理接收的每个请求。这个值表示Tomcat可创建的最大的线程数。如果没有指定,该属性被设置为200。如果使用了execute将忽略此连接器的该属性,连接器将使用execute,而不是一个内部线程池来处理请求。
maxThreads="1000" 

# (最小活跃线程数)
minSpareThreads="100"

maxSpareThreads="200"
             
# 当所有可能的请求处理线程都在使用时,传入连接请求的最大队列长度
acceptCount="1000" 

# 禁用上传超时时间
disableUploadTimeout="true" 
             
# 连接超时,单位毫秒,0代表不限制
connectionTimeout="20000"
             
# URI地址编码使用UTF-8
URIEncoding="UTF-8"
             
# 关闭dns解析,提高响应时间
enableLookups="false"
             
#启用压缩功能: 如果没有指定,该属性被设置为“关” ; 开启压缩GZIP  js
compression="on"

             
# 最小压缩大小,单位Byte: 如果压缩被设置为“on”,那么该属性可以用于指定在输出之前被压缩的数据的最小量。如果未指定,此属性默认为“2048”
compressionMinSize="2048"
#压缩的文件类型: 该值是一个被用于HTTP压缩的逗号分隔的MIME类型列表。默认值是text / html类型,为text / xml,text / plain。
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,image/gif,image/jpg,image/png"

redirectPort="8443" />

JVM调优生产配置

适当调整Tomcat的运行JVM参数可以提升整体性能。

在默认不配置 JVM 堆内存大小的情况下,JVM 根据默认值来配置当前内存大小

在性能测试过程中逐步调整最合适的参数。

编辑catalina.sh配置文件

[root@tomcat1 ~]# vim /usr/local/tomcat8/bin/catalina.sh

# OS specific support. $var _must_ be set to either true or false.下面添加

JAVA_OPTS="-server -Xms1024m -Xmx2048m -XX:PermSize=512m -XX:MaxPermSize=512m -XX:+UseConcMarkSweepGC -XX:+UseParallelGCThreads=8 -XX:CMSInitiatingOccupancyFraction=80 -XX:
+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -XX:-PrintGC -XX:-PrintGCDetails -XX:-PrintGCTimeStamps -Xloggc:../logs/gc.log"


参数

描述

-Xms

堆内存初始大小,单位m、g

-Xmx

堆内存最大允许大小,一般不要大于物理内存的80%:

设置堆内存大小,根据实际业务调整,不宜过大,也不宜过小。

-XX:PermSize

非堆内存初始大小,一般应用设置初始化200m,最大1024m就够了

-XX:MaxPermSize

非堆内存最大允许大小

-XX:+UseParallelGCThreads=8

并行收集器线程数,同时有多少个线程进行垃圾回收,一般与CPU数量相等

-XX:+UseParallelOldGC

指定老年代为并行收集

-XX:+UseConcMarkSweepGC

CMS收集器(并发收集器)

-XX:+UseCMSCompactAtFullCollection

开启内存空间压缩和整理,防止过多内存碎片

-XX:PrintGCTimeStamps

打印 GC 具体时间

-XX:PrintGCDetails

打印出 GC 详细日志

-Xloggc: path

GC 日志生成路径

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值