Tomcat性能调优(windows)

1、目录:
a、基础调优
b、JVM 优化
c、高级调优
2、基础调优:
2.1、tomcat的各版本的优化参数有点不一样,可以启动tomcat之后访问[http://127.0.0.1:8080/docs/config]查看说明
2.2、配置tomcat管理员账户(查看 Tomcat 的运行状态),编辑 /opt/tomcat7/bin/conf/tomcat-users.xml 文件,在里面添加下面信息:

<role rolename="manager"/>
<role rolename="manager-gui"/>
<role rolename="admin"/>
<role rolename="admin-gui"/>
<user username="tomcat" password="tomcat" roles="admin-gui,admin,manager-gui,manager"/>
配置好之后登录http://127.0.0.1:8080/进入到主界面:
tomcat管理界面.png

如图所示有标记的三个按钮,点击登录之后,分别进入到服务状态查看界面,Tomcat Web应用管理界面,主机管理界面。我们接下来会提到前两个的部分功能,第三个就是配置虚拟机,跟直接在server.xml配置效果一样
2.3、配置
先登录上面配置的管理员账号进入Server Status界面

服务状态管理界面.png

界面可以看到 "ajp-nio-8009"和"http-nio-8081",由于我是用的最新的tomcat9做的演示,所以我们看到的IO类型直接就是非阻塞的同步IO(nio),Tomcat6/7/8默认的都是阻塞式的同步IO(bio),因为nio效果要远大于bio,所以我们要改为nio,之所以之前默认为bio,知识为了兼容jdk1.4以下版本。
2.3.1修改bio为nio,只需要修改/conf/server.xml中的

<Connector 
  port="8080" 
  protocol="HTTP/1.1" 
  connectionTimeout="20000" 
  redirectPort="8443" 
/>

变为

<Connector 
  port="8080" 
  protocol="org.apache.coyote.http11.Http11NioProtocol" 
<!-- 或者protocol="org.apache.coyote.http11.Http11Nio2Protocol" -->
<!--或者protocol="org.apache.coyote.http11.Http11AprProtocol"-->
  connectionTimeout="20000" 
  redirectPort="8443" 
/>

注意:Tomcat 8 设置 nio2 更好:(如果这个用不了,就用nio)Tomcat 6、7 设置 nio 更好,nio2也就是非阻塞的异步IO,性能比nio更好一点,APR(ApachePortable Runtime/Apache可移植运行时),是ApacheHTTP服务器的支持库。你可以简单地理解为:Tomcat将以JNI的形式调用Apache HTTP服务器的核心动态链接库来处理文件读取或网络传输操作,从而大大地提高Tomcat对静态文件的处理性能。
2.3.2 enableLookups,禁用DNS查询
2.3.3 acceptorThreadCount,用于接收连接的线程的数量,默认值是1。一般这个指需要改动的时候是因为该服务器是一个多核CPU,如果是多核 CPU 一般配置为 2
2.3.4 acceptCount,指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理,默认设置 100

<Connector 
  port="8080" 
  protocol="org.apache.coyote.http11.Http11NioProtocol" 
  enableLookups="false"
  acceptCount="100"
  acceptorThreadCount="2" 
  connectionTimeout="20000" 
  redirectPort="8443" 
/>
  2.3.5 Tomcat缓存优化

compression打开压缩功能

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

compressableMimeType压缩类型

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

compression="on"

compressionMinSize="2048"

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

connectionTimeout="20000"
  2.3.6配置最大线程数量(默认200)

maxThreads:由该连接器创建的处理请求线程的最大数目,也就是可以处理的同时请求的最大数目。如果未配置默认值为200。如果一个执行器与此连接器关联,则忽略此属性,因为该属性将被忽略,所以该连接器将使用执行器而不是一个内部线程池来执行任务。maxThreads是一个重要的配置属性,maxThreads配置的合理直接影响了Tomcat的相关性能,所以这里我们重点讨论下。
maxThreads并不是配置的越大越好,事实上你即使配置成999999也是没有用的,因为这个最大值是受操作系统及相关硬件所制约的,并且最大值并不一定是最优值,所以我们追寻的应该是最优值而不是最大值。

  2.3.7禁用 AJP(如果你服务器没有使用 Apache)

AJP是为了配合Apache处理静态文件服务器,进行服务器间文件传输的协议,用不上的话就注销它,后面我会讲述Tomcat配合Nginx处理静态文件(动静分离和负载均衡)
把下面这一行注释掉,默认 Tomcat 是开启的。

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

禁用之后我们可以看一下服务状态页面:

图三.png

发现AJP协议已经没有了,nio转换为nio2了
2.3.8整合:

protocol="HTTP/1.1"

maxHttpHeaderSize="8192"

maxThreads="1000" //最大线程数,默认200

minSpareThreads="100" //Tomcat初始化时创建的socket线程数,线程的最小运行数目,这些始终保持运行,如果未指定,默认值为10

maxSpareThreads="1000"//Tomcat连接器的最大空闲socket线程数

minProcessors="100"//服务器创建时的最小处理线程数

maxProcessors="1000"//服务器同时最大处理线程数

enableLookups="false"//关闭DNS反向查询,若设为true,则支持域名解析,可把ip地址解析为主机名

compression="on"//打开压缩功能

compressionMinSize="2048"

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

connectionTimeout="20000"//代表连接超时时间,单位为毫秒,默认值为60000。通常情况下设置为30000

URIEncoding="utf-8"//URL统一编码

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

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

disableUploadTimeout="true"/>//这个标志允许servlet[Container](http://lib.csdn.net/base/4)在一个servlet执行的时候,使用一个不同的,更长的连接超时。最终的结果是给servlet更长的时间以便完成其执行,或者在数据上载的时候更长的超时时间。如果没有指定,设为false
    2.3.9 Web应用管理

用管理员账号进入web应用管理界面:

web应用管理界面.png

如图所示,我们可以看到Applications模块,在这个里面可以对tomcat中部署的应用的启动状态做修改,把不需要的应用可以暂时关闭,同时也可以对session缓存时间进行配置
3、JVM 优化
修改/bin/catalina.bat 文件,如:

jvm优化参数.png

如果服务器只运行一个 Tomcat
机子内存如果是 8G,一般 PermSize 配置是主要保证系统能稳定起来就行(如果是Linux系统,等号后的值要用引号引起来)

set JAVA_OPTS=-Dfile.encoding=UTF-8 -server -Xms6144m -Xmx6144m -XX:NewSize=1024m -XX:MaxNewSize=2048m -XX:PermSize=512m -XX:MaxPermSize=512m -XX:MaxTenuringThreshold=10 -XX:NewRatio=2 -XX:+DisableExplicitGC
机子内存如果是 16G,一般 PermSize 配置是主要保证系统能稳定起来就行:
set JAVA_OPTS=-Dfile.encoding=UTF-8 -server -Xms13312m -Xmx13312m -XX:NewSize=3072m -XX:MaxNewSize=4096m -XX:PermSize=512m -XX:MaxPermSize=512m -XX:MaxTenuringThreshold=10 -XX:NewRatio=2 -XX:+DisableExplicitGC
机子内存如果是 32G,一般 PermSize 配置是主要保证系统能稳定起来就行:
set JAVA_OPTS=-Dfile.encoding=UTF-8 -server -Xms29696m -Xmx29696m -XX:NewSize=6144m -XX:MaxNewSize=9216m -XX:PermSize=1024m -XX:MaxPermSize=1024m -XX:MaxTenuringThreshold=10 -XX:NewRatio=2 -XX:+DisableExplicitGC
如果是开发机
set JAVA_OPTS=-Xms550m -Xmx1250m -XX:PermSize=550m -XX:MaxPermSize=1250m

参数说明:

-Dfile.encoding:默认文件编码
-server:表示这是应用于服务器的配置,JVM 内部会有特殊处理的
-Xmx1024m:设置JVM最大可用内存为1024MB
-Xms1024m:设置JVM最小内存为1024m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。
-XX:NewSize:设置年轻代大小
-XX:MaxNewSize:设置最大的年轻代大小
-XX:PermSize:设置永久代大小
-XX:MaxPermSize:设置最大永久代大小
-XX:NewRatio=4:设置年轻代(包括 Eden 和两个 Survivor 区)与终身代的比值(除去永久代)。设置为 4,则年轻代与终身代所占比值为 1:4,年轻代占整个堆栈的 1/5
-XX:MaxTenuringThreshold=10:设置垃圾最大年龄,默认为:15。如果设置为 0 的话,则年轻代对象不经过 Survivor 区,直接进入年老代。对于年老代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在 Survivor 区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概论。
-XX:+DisableExplicitGC:这个将会忽略手动调用 GC 的代码使得 System.gc() 的调用就会变成一个空调用,完全不会触发任何 GC

4、高级调优
以上内容足以应付绝大多数情景,熟悉以上内容,你也就步入了服务器优化的大门了,且水平会远强于其他菜鸟,但要进一步提升,则需继续学习以下内容
4.1、Tomcat配合Nginx做负载均衡
4.2、Tomcat配合Nginx做动静分离
4.3、Tomcat配合Nginx和Redis做tomcat集群和session共享
4.4、Jmeter做压力测试
如需交流学习,请留言看我私文:

2017-07-05_154855.png

如有问题或有想相互学习交流的,可以联系本人(邮箱:18986837482@163.com,微信:18986837482,QQ:785553790)
文档参考:http://www.jianshu.com/p/c8613d17e5fe

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

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,594评论 18 139
  • Tomcat 的缺省配置是不能稳定长期运行的,也就是不适合生产环境,它会死机,让你不断重新启动,甚至在午夜时分唤醒...
    java面试收割机阅读 1,186评论 0 8
  • Tomcat可以从内存、并发、缓存等方面进行优化 1、Tomcat内存优化: 在tomcat的启动脚本catali...
    心云间丶聆听阅读 1,624评论 0 7
  • 概述 Tomcat是一个JSP/Servlet容器。其作为Servlet容器,有三种工作模式:独立的Servlet...
    jiangmo阅读 2,221评论 0 13
  • 01【先讲个小故事】 三年前,家里面的人翻出了一本破旧的本子,上面记下了家里面发生的一些重大事件的时间,也是这本不...
    轻言卿语阅读 251评论 0 2