tomcat简单性能调优

有时候配置tomcat的时候需要加入一段环境变量的配置,在tomcat/bin, vim catalina.sh 新增以下内容:

JAVA_OPTS="-Xms512m -Xmx1024m -Xss1024K -XX:PermSize=512m -XX:MaxPermSize=1024m"
export TOMCAT_HOME=/opt/tomcat
export CATALINA_HOME=/opt/tomcat
export JRE_HOME=/opt/java/jdk1.7.0_80/jre
export JAVA_HOME=/opt/java/jdk1.7.0_80

上面是因为有些时候启动tomcat时闪退,但是linux下很少出现.

修改tomcat/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"/>
开启tomcat进入查看server status


输入配置的用户名tomcat,密码tomcat.

进入状态页面



下面就是修改,真正的配置,在tomcat/conf目录下,修改server.xml文件

1,禁用AJP协议:

  (1)通过禁用AJP协议

  

  (2)启动tomcat后,不论从刚刚的管理员界面,还是从控制台上(如图1所示)都可以看出,AJP协议是开启的。

  我们要做的就是要将此协议禁用,禁用方法:在server.xml中,将  

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

  注释掉,重新启动tomcat,可以看出控制台上已经不存在上图 黑框中所示的。

2. 将BIO通讯模式修改为NIO通讯模式

  (1)tomcat通讯协议支持http1.0和1.1,tomcat默认走的是BIO通讯模式,tomcat7和tomcat8之所以默认的都是效率低下的BIO通讯模式,是因为和前面的就项目做兼容。

  (2)在控制台上(如图1所示)或者管理界面都可以看到,tomcat启动的通讯模式是bio的。

  (3)应用场景:tomcat集群的时候,若项目比较新,都是1.5类库之前,即JDK版本大于1.5,可将集群中每一个tomcat的启动模式设置为高并发高性能的应答模式(NIO)。

  (4)配置方法:在server.xml中 ,将 <Connector connectionTimeout="20000" port="8066" protocol="HTTP/1.1" redirectPort="8448"/> 改为:  

<Connector connectionTimeout="20000" port="8066" protocol="org.apache.coyote.http11.Http11NioProtocol" redirectPort="8448"/>

  其中,原来的protocol="HTTP/1.1"表示遵循http1.1协议,同时,也是一个最原始的未经优化的通信协议,

  修改之后的 protocol="org.apache.coyote.http11.Http11NioProtocol" ,表示以 NIO模式启动。


以下的方法我测试失败了.所以很尴尬.所以就先留着,抽个时间慢慢琢磨琢磨..


3. 启用外部连接池,来满足高并发已经复用的请求

  图2

    maxThreads:tomcat起动的最大线程数,即同时处理的任务个数,默认值为200。将  

<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="300" minSpareThreads="4"/>

  注释打开,并修改maxThreads的值,然后在<Connector connectionTimeout="20000" port="8066" protocol="org.apache.coyote.http11.Http11NioProtocol"/>

  中加入 executor="tomcatThreadPool",即最后为:  

<Connector connectionTimeout="20000" port="8066" executor="tomcatThreadPool" protocol="org.apache.coyote.http11.Http11NioProtocol"/>

      根据业务场景和服务器硬件资源条件可以适当的加大线程连接池,根据第三方工具去开启并发测试来确定一个最好的连接池数。

4. 优化连接器

  最佳实践:  

复制代码
<Connector port="8066" executor="tomcatThreadPool" protocol="org.apache.coyote.http11.Http11NioProtocol"
            connectionTimeout="20000"
            enableLookups="false"
            maxPostSize="10485760"
            URIEncoding="UTF-8" 
            useBodyEncodingForURI="true"
            acceptCount="100"
            acceptorThreadCount="2"
            disableUploadTimeout="true" 
            maxConnections="10000"
            SSLEnabled="false"
    />
复制代码

5. 在tomcat中设置JVM参数

  修改bin/catalina.bat文件设置参数(注释后第一行),增加  

复制代码
  set JAVA_OPTS=-Dfile.encoding=UTF-8 
  -server 
  -Xms1024m 
  -Xmx2048m 
  -XX:NewSize=512m 
  -XX:MaxNewSize=1024m 
  -XX:PermSize=256m 
  -XX:MaxPerPermSize=356m 
  -XX:NewRatio=2 
  -XX:MaxTenuringThreshold=50 
  -XX:+DisableExplicitGC
复制代码

   -Xms:设置JVM初始内存大小(默认是物理内存的1/64)

   -Xmx:设置JVM可以使用的最大内存(默认是物理内存的1/4,建议:物理内存80%)

   -Xmn:设置JVM最小内存(128-256m就够了,一般不设置)

   默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。因此服务器一般设置-Xms、

-Xmx相等以避免在每次GC 后调整堆的大小。  

   在较大型的应用项目中,默认的内存是不够的,有可能导致系统无法运行。常见的问题是报Tomcat内存溢出错误“java.lang.OutOfMemoryError:Java heap space”,从而

导致客户端显示500错误。  

  -XX:PermSize :为JVM启动时Perm的内存大小  

  -XX:MaxPermSize :为最大可占用的Perm内存大小(默认为32M) 

  -XX:MaxNewSize,默认为16M


  PermGen space的全称是Permanent Generationspace,是指内存的永久保存区域,这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到

PermGenspace中,它和存放类实例(Instance)的Heap区域不同,GC(GarbageCollection)不会在主程序运行期对PermGenspace进行清理,所以如果你的应用中有很CLASS的

话,就很可能出现“java.lang.OutOfMemoryError:PermGen space”错误。

对于WEB项目,jvm加载类时,永久域中的对象急剧增加,从而使jvm不断调整永久域大小,为了避免调整),你可以使用更多的参数配置。如果你的WEBAPP下都用了大量的第三

方jar, 其大小超过了jvm默认的大小,那么就会产生此错误信息了。


其它参数:

  -XX:NewSize :默认为2M,此值设大可调大新对象区,减少FullGC次数

  -XX:NewRatio :改变新旧空间的比例,意思是新空间的尺寸是旧空间的1/8(默认为8)

  -XX:SurvivorRatio :改变Eden对象空间和残存空间的尺寸比例,意思是Eden对象空间的尺寸比残存空间大survivorRatio+2倍(缺省值是10)

  -XX:userParNewGC 可用来设置并行收集【多CPU】

  -XX:ParallelGCThreads 可用来增加并行度【多CPU】

  -XXUseParallelGC 设置后可以使用并行清除收集器【多CPU】




后续补充20180223:

亲自测试经验是:



修改catalina.sh中的-xms参数和-xmx参数,参数可以是m单位也可以是g单位,减少tomcat的并发时间,提高效率.

增加maxThreads="800",默认是200,看到评论有讲的,windows最大是2000,linux最大是1000.其实真的没搞懂,弄个800先玩着.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值