Centos Tomcat 调优

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

1、Tomcat内存优化:

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

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

参数说明:

-server启用jdk的server版;

-XmsJava虚拟机初始化时的最小内存;

-Xmx                                                      Java虚拟机可使用的最大内存;

-XX:PermSize内存永久保留区域

-XX:MaxPermSize内存最大永久保留区域

验证:

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

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

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

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

2、Tomcat并发优化:

Connector优化

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

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

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),NIO,NIO2和APR

maxHttpHeaderSize请求和响应的HTTP头的最大大小,以字节为单位指定。如果没有指定,这个属性被设置为8192(8 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在需要基于安全通道的场合,把客户请求转发到基于SSL的redirectPort端口

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

参数详解:

1)protocol

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

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

//NIO

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

//NIO2

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

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

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

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

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

QPS(Query 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等待时间组成。

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

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

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

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

3、Tomcat缓存优化:

compression="on"

compressionMinSize="2048"

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

connectionTimeout="20000"

参数说明:

compression打开压缩功能

compressionMinSize启用压缩的输出内容大小,这里面默认为2KB

compressableMimeType压缩类型

connectionTimeout定义建立客户连接超时的时间.如果为-1,表示不限制建立客户连接的时间

整合的配置:

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"/>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,585评论 18 139
  • Tomcat 的缺省配置是不能稳定长期运行的,也就是不适合生产环境,它会死机,让你不断重新启动,甚至在午夜时分唤醒...
    愤怒的_菜鸟阅读 2,108评论 0 24
  • Tomcat 的缺省配置是不能稳定长期运行的,也就是不适合生产环境,它会死机,让你不断重新启动,甚至在午夜时分唤醒...
    java面试收割机阅读 1,186评论 0 8
  • 常见的http服务器有apache,nginx,iis,tomcat等。HTTP服务器本质上也是一种应用程序——它...
    可乐爱上咖啡阅读 3,971评论 1 49
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,169评论 11 349