码迷,mamicode.com
首页 > 其他好文 > 详细

Centos Tomcat 调优

时间:2016-12-23 23:29:17      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:centos tomcat 内存 参数优化

Tomcat可以从内存、并发、缓存等方面进行优化


1Tomcat内存优化:

tomcat 的启动脚本 catalina.sh 中设置java_OPTS 参数

JAVA_OPTS=’-Xms2048m-Xmx2048m -XX:PermSize=512M -XX:MaxPermSize=1024m’

 

参数说明:

-server                                                  启用jdk server 版; 
-Xms                                                      
Java虚拟机初始化时的最小内存; 
-Xmx                                                      Java
虚拟机可使用的最大内存; 
-XX:PermSize                                       
内存永久保留区域 
-XX:MaxPermSize                                
内存最大永久保留区域 

 

验证:

设置成功后我们可以利用JDK自带的工具进行验证,这些工具都在JAVA_HOME/bin目录下:

1jps:用来显示本地的java进程,以及进程号,进程启动的路径等。

2jmap:观察运行中的JVM物理内存的占用情况,包括Heapsize , Perm size 下载地址 等。

进入JAVA_HOME/bin目录下或者使用软链接等方式,然后输入jpsjmap命令。

 

2Tomcat并发优化:

Connector 优化

Connector是连接器,负责接收客户的请求,以及向客户端回送响应的消息。所以 Connector的优化是重要部分。默认情况下 Tomcat只支持200线程访问,超过这个数量的连接将被等待甚至超时放弃,所以我们需要提高这方面的处理能力。

Tomcat官网Connector参数属性:https://tomcat.apache.org/tomcat-8.0-doc/config/http.html,参数非常多,我们这里只介绍一些常用的

 

<Connector port="9027"

protocol="HTTP/1.1"

maxHttpHeaderSize="8192"

maxThreads="1000"

minSpareThreads="100"

maxSpareThreads="1000"

connectionTimeout="20000"

minProcessors="100"

maxProcessors="1000"

enableLookups="false"

URIEncoding="utf-8"

acceptCount="1000"

redirectPort="8443"

disableUploadTimeout="true"/>

 

参数说明:

port                                                         代表Tomcat监听端口,也就是网站的访问端口,默认为8080,可以根据需要改成其他

protocol                                                  代表协议类型,可选类型有四种,分别为BIO(阻塞型IO),NIONIO2APR

maxHttpHeaderSize                               请求和响应的HTTP头的最大大小,以字节为单位指定。如果没有指定,这个属性被设置为81928 KB)。

maxThreads                                      客户请求最大线程数,也就是可以处理的同时请求的最大数目,如果未指定,默认为200
minSpareThreads                                  Tomcat
初始化时创建的socket 线程数,线程的最小运行数目,这些始终保持运行,如果未指定,默认值为10
maxSpareThreads                                 Tomcat
连接器的最大空闲socket 线程数 
connectionTimeout                               
代表连接超时时间,单位为毫秒,默认值为60000。通常情况下设置为30000
minProcessors                                     
服务器创建时的最小处理线程数 
maxProcessors                                    
服务器同时最大处理线程数 

enableLookups                                     关闭DNS反向查询,若设为true,则支持域名解析,可把ip 地址解析为主机名 
URIEncoding                                         URL
统一编码

acceptCount                                         监听端口队列最大数,满了之后客户请求会被拒绝(不能小于maxSpareThreads),如果未指定,默认值为100 

redirectPort                                           在需要基于安全通道的场合,把客户请求转发到基于SSLredirectPort 端口 

disableUploadTimeout                           这个标志允许servlet Container在一个servlet执行的时候,使用一个不同的,更长的连接超时。最终的结果是给servlet更长的时间以便完成其执行,或者在数据上载的时候更长的超时时间。如果没                                                                有指定,设为false

 

参数详解:

1protocol

aBIOBIO(BlockingI/O),顾名思义,即阻塞式I/O操作,表示Tomcat使用的是传统的Java I/O操作(java.io包及其子包)Tomcat在默认情况下,是以bio模式运行的。遗憾的是,就一般而言,bio模式是三种运行模式中性能最低的一种。BIO配置采用默认即可。

bNIONIO(NewI/O),是Java SE 1.4及后续版本提供的一种新的I/O操作方式(java.nio包及其子包)Javanio是一个基于缓冲区、并能提供非阻塞I/O操作的JavaAPI,因此nio也被看成是non-blockingI/O的缩写。它拥有比传统I/O操作(bio)更好的并发运行性能。要让Tomcatnio模式来运行也比较简单,我们只需要protocol类型修改为:

//NIO

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

//NIO2

protocol="org.apache.coyote.http11.Http11Nio2Protocol"

cAPRAPR(ApachePortable Runtime/Apache可移植运行时),是ApacheHTTP服务器的支持库。你可以简单地理解为:Tomcat将以JNI的形式调用Apache HTTP服务器的核心动态链接库来处理文件读取或网络传输操作,从而大大地提高 Tomcat对静态文件的处理性能。 与配置 NIO运行模式一样,也需要将对应的Connector节点的 protocol属性值改为:

protocol="org.apache.coyote.http11.Http11AprProtocol"

 

2maxThreads:由该连接器创建的处理请求线程的最大数目,也就是可以处理的同时请求的最大数目。如果未配置默认值为200。如果一个执行器与此连接器关联,则忽略此属性,因为该属性将被忽略,所以该连接器将使用执行器而不是一个内部线程池来执行任务。maxThreads是一个重要的配置属性,maxThreads配置的合理直接影响了Tomcat的相关性能,所以这里我们重点讨论下。

       maxThreads并不是配置的越大越好,事实上你即使配置成999999也是没有用的,因为这个最大值是受操作系统及相关硬件所制约的,并且最大值并不一定是最优值,所以我们追寻的应该是最优值而不是最大值。

       QPSQuery Per Second):每秒查询率QPS是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。我们常常使用 QPS值来衡量一个服务器的性能。

       QPS = 并发数 / 平均响应时间

       或者

       并发数 = QPS * 平均响应时间

       一个系统吞吐量通常由QPS、并发数两个因素决定,每套系统的这两个值都有一个相对极限值,在应用场景访问压力下,只要某一项达到系统最高值,系统的吞吐量就上不去了,如果压力继续增大,系统的吞吐量反而会下降,原因是系统超负荷工作,上下文切换、内存等等其它消耗导致系统性能下降。所谓吞吐量这里可以理解为每秒能处理请求的次数。

       所以选择一个合理的 maxThreads值,其实并不是那么容易的事。因为过多的线程只会造成,更多的内存开销,更多的CPU开销,但是对提升QPS确毫无帮助;找到最佳线程数后通过简单的设置,可以让web系统更加稳定,得到最高,最稳定的QPS输出。

       我们可以通过以下几种方式来获取 maxThreads的最佳值:

       1)通过线上系统不断使用和用户的不断增长来进行性能测试,观察QPS,响应时间,这种方式会在爆发式增长时系统崩溃,如双12等。

       2)根据公式计算,服务器端最佳线程数量=((线程等待时间+线程cpu时间)/线程cpu时间) *cpu数量,这种方式有时会被误导,因为某些系统处理环节可能会耗时比较长,从而影响公式的结果。

       3)单、多用户压力测试,查看CPU的消耗,然后直接乘以百分比,再进行压测,一般这个值的附近应该就是最佳线程数量,这种方式理想场景比较适用,实际情况会比这个复杂的多。

       4)根据系统的自身情况调整,如硬件限制,系统限制,程序处理能力限制等。

       5)定期修改为不同的 maxThreads值,看服务器响应结果及用户反应。

       QPS和线程数的关系

       1)在最佳线程数量之前,QPS和线程是互相递增的关系,线程数量到了最佳线程之后,QPS持平,不在上升,甚至略有下降,同时相应时间持续上升。

       2)同一个系统而言,支持的线程数越多(最佳线程数越多而不是配置的线程数越多),QPS越高。

       QPS和响应时间的关系

       1)对于一般的web系统,响应时间一般有CPU执行时间+IO等待时间组成。

       2CPU的执行时间减少,对QPS有实质的提升,IO时间的减少,对QPS提升不明显。如果要想明显提升QPS,优化系统的时候要着重优化CPU消耗大户。

       所以想要找出 maxThreads的最优值可并不容易,没有最好只有更好,更好的值只能通过时间来显现,如果你不想考虑那么多,一般情况下设置成1000即可。

 

3acceptCount:当所有可能的请求处理线程都在使用时传入连接请求的最大队列长度。如果未指定,默认值为100。一般是设置的跟 maxThreads一样或一半,此值设置的过大会导致排队的请求超时而未被处理。所以这个值应该是主要根据应用的访问峰值与平均值来权衡配置。

 

4maxConnections:在任何给定的时间内,服务器将接受和处理的最大连接数。当这个数字已经达到时,服务器将接受但不处理,等待进一步连接。NIONIO2的默认值为10000APR默认值为8192

 

 

3Tomcat缓存优化:

  compression="on"

compressionMinSize="2048"

compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"

connectionTimeout="20000"


参数说明:

compression                                          打开压缩功能 
compressionMinSize                            
启用压缩的输出内容大小,这里面默认为2KB 
compressableMimeType                      
压缩类型 
connectionTimeout                               
定义建立客户连接超时的时间.如果为 -1,表示不限制建立客户连接的时间

 

整合的配置:

<Connectorport="9027"

protocol="HTTP/1.1"

maxHttpHeaderSize="8192"

maxThreads="1000"

minSpareThreads="100"

maxSpareThreads="1000"

minProcessors="100"

maxProcessors="1000"

enableLookups="false"

compression="on"

compressionMinSize="2048"

compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"

connectionTimeout="20000"

URIEncoding="utf-8"

acceptCount="1000"

redirectPort="8443"

disableUploadTimeout="true"/>



Centos Tomcat 调优

标签:centos tomcat 内存 参数优化

原文地址:http://12270625.blog.51cto.com/12260625/1885565

(0)
(0)
   
举报
评论 一句话评论(0
0条  
登录后才能评论!
© 2014 mamicode.com 版权所有 京ICP备13008772号-2
迷上了代码!