Tomcat7调优(含:JVM调优)

参数详细请参考官方文档>>传送门

前言

Tomcat7的默认配置是不适合生产环境的。对于优化来说,尽可能的增大可使用的内存减少GC、增加tomcat线程池增加并发等。
调优项说明:不仅包括Tomcat调优,还有JVM、服务器硬件配置、操作系统参数、中间件、数据库连接池、数据库调优(表、索引、分区等)。

Tomcat参数调优(栗子)

tomcat7/conf/server.xml

……
    <!-- 提示:允许的最大连接数还受制于操作系统的内核参数设置,通常windows是2000,linux是1000 -->
    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
        maxThreads="600" prestartminSpareThreads="true" minSpareThreads="100" maxQueueSize="1000"/>

    <!-- 根据系统情况参数值自行调整 -->
    <Connector executor="tomcatThreadPool" port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" 
           connectionTimeout="30000" maxConnections="10000" 
           enableLookups="false" 
           acceptCount="600" 
           disableUploadTimeout="true" 
           compression="on" compressionMinSize="2048" compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,image/gif,image/jpg,image/png" 
           maxPostSize="-1" 
           maxKeepAliveRequests="1" 
           acceptorThreadCount="2" 
           debug="0" URIEncoding="UTF-8" 
           redirectPort="8443" />

……

Tomcat连接器的三种运行模式

bio:默认的模式,性能非常的低下,没有经过任何优化的处理和支持;
nio:nio(new I/O),是Java SE 1.4及后续版本提供的一种新的I/O操作方式(即java.nio包及其子包)。Java nio是一个基于缓冲区、并能提供非阻塞I/O操作的Java API,因此nio也被看成是non-blocking I/O的缩写。它拥有比传统I/O操作更好的并发运行性能;
apr:安装起来最困难,但是从操作系统级别来解决异步的IO问题,大幅度的提高性能。

查看Tomcat的运行状态(可选)

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


Java 1.7的内存模型

Young,年轻代(易被 GC)。Young 区被划分为三部分,Eden 区和两个大小严格相同的 Survivor 区,其中 Survivor 区间中,某一时刻只有其中一个是被使用的,另外一个留做垃圾收集时复制对象用,在 Young 区间变满的时候,minor GC 就会将存活的对象移到空闲的Survivor 区间中,根据 JVM 的策略,在经过几次垃圾收集后,任然存活于 Survivor 的对象将被移动到 Tenured 区间。

Tenured,老年代。Tenured 区主要保存生命周期长的对象,一般是一些老的对象,当一些对象在 Young 复制转移一定的次数以后,对象就会被转移到 Tenured 区,一般如果系统中用了 application 级别的缓存,缓存中的对象往往会被转移到这一区间。

Perm,永久代。主要保存 class,method,filed 对象,这部门的空间一般不会溢出,除非一次性加载了很多的类,不过在涉及到热部署的应用服务器的时候,有时候会遇到 java.lang.OutOfMemoryError : PermGen space 的错误,造成这个错误的很大原因就有可能是每次都重新部署,但是重新部署后,类的 class 没有被卸载掉,这样就造成了大量的 class 对象保存在了 perm 中,这种情况下,一般重新启动应用服务器可以解决问题。

 

JVM 1.7参数调优(栗子)

修改catalina文件参数
Linux(tomcat/bin/catalina.sh):

JAVA_OPTS="-Dfile.encoding=UTF-8 -server -Xms10G -Xmx10G -Xss1024K -XX:NewSize=2048m -XX:MaxNewSize=2048m -XX:PermSize=1G -XX:MaxPermSize=1G -XX:MaxTenuringThreshold=10 -XX:NewRatio=2 -XX:+DisableExplicitGC"

Windows(tomcat/bin/catalina.bat):

set JAVA_OPTS=-Dfile.encoding=UTF-8 -server -Xms10G -Xmx10G -Xss1024K -XX:NewSize=2048m -XX:MaxNewSize=2048m -XX:PermSize=1G -XX:MaxPermSize=1G -XX:MaxTenuringThreshold=10 -XX:NewRatio=2 -XX:+DisableExplicitGC

另:Windows注册服务调整可参考>>传送门

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值