tomcat 性能优化

来源:互联网 发布:求导软件手机版 编辑:程序博客网 时间:2024/04/28 13:41

1.tomcat 内存参数的管理与设置
   tomcat/bin/catalina.bat
   在rem 的后面增加如下参数
  set JAVA_OPTS= -Xms256m -Xmx256m -XX:MaxPermSize=64m

JAVA_OPTS='-Xms256m -Xmx512m'

set JAVA_OPTS=-Xms1024m -Xmx1024m -XX:PermSize=128M -XX:MaxPermSize=256m

 

startup.bat

SET JAVA_HOME=C:\Program Files\Java\jdk1.6.0_24
#SET CATALINA_HOME=D:\Program Files\Apache Software Foundation\tomcat5.0.28


2.JDK的设置
   tomcat/bin/catalina.bat
   在最后一个rem后面增加
  set JAVA_HOME=C:\Program Files\Java\jdk1.6.0
3.虚拟目录的管理
   /tomcat/conf/server.xml
   第一行是以前默认存在的,第二行是新增的
<Context path="" docBase="ROOT" debug="0" reloadable="true"></Context> <Context path="/jsp/a" reloadable="true" docBase="D:\workplace\WebContent" />

4、设置tomcat下的连接数:
   tomcat/conf/server.xml
minProcessors:最小空闲连接线程数,用于提高系统处理性能,默认值为10
maxProcessors:最大连接线程数,即:并发处理的最大请求数,默认值为75
acceptCount:允许的最大连接数,应大于等于maxProcessors,默认值为100
enableLookups:是否反查域名,取值为:true或false。为了提高处理能力,应设置为false
connectionTimeout:网络连接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒。

其中和最大连接数相关的参数为maxThreads和acceptCount。如果要加大并发连接数,应同时加大这两个参数。web server允许的最大连接数还受制于操作系统的内核参数设置,通常Windows是2000个左右,Linux是1000个左右。

  1. maxThreads="150"       表示最多同时处理150个连接    
  2. minSpareThreads="25"    表示即使没有人使用也开这么多空线程等待    
  3. maxSpareThreads="75"    表示如果最多可以空75个线程,例如某时刻有80人访问,之后没有人访问了,则tomcat不会保留80个空线程,而是关闭5个空的。    

<Connector className="org.apache.coyote.tomcat.CoyoteConnector" port="8080" minProcessors="10" maxProcessors="1024" enableLookups="false" redirectPort="8080" acceptCount="1024" debug="0" connectionTimeout="30000"maxThreads=300minSpareThreads="25"  />

 

 

2\示例如下:
    <Connector port="80" protocol="HTTP/1.1"
        maxThreads="600" 最多运行线程数  
        minSpareThreads="100" 初始化创建的线程数
        maxSpareThreads="500"
          最多能创建的线程数,一旦创建的线程超过这个值,Tomcat就会关闭不再需要socket线程.
        acceptCount="700" 指定当所有可以使用的处理请求的线程数都被使用时
          可以放到处理队列中的请求数,超过这个数的请求将不予处理
        connectionTimeout="20000"
        enableLookups="false"
        redirectPort="8443" />

  4.加速JSP编译速度
    在元素中定义一个名字叫“compiler”,并且在value中有一个支持编译的编译器名字.
    示例如下: vi web.xml
      <init-param>
      <param-name>compiler</param-name>
      <param-value>jikes</param-value>
      </init-param>

 

  5.Tomcat6线程池(Executor Thread pool)的配置 

    第一步,打开共享的线程池

        <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" 

            maxThreads="1000" minSpareThreads="50" maxIdleTime="600000"/>

      name 这个是线程池的名字,必须唯一,后面的配置里要用到这个东西 

      namePrefix 线程的名字前缀,用来标记线程名字,每个线程就用这个前缀加上线程编号了,比如 

        catalina-exec-1 

        catalina-exec-2 

      maxThreads 允许的最大线程池里的线程数量,默认是200

        大的并发应该设置的高一些,只是限制而已,不占用资源 

      minSpareThreads 最小的保持活跃的线程数量,默认是25.

        要根据负载情况自行调整了:太小影响反应速度,太大占用资源。 

      maxIdleTime 超过最小活跃线程数量的线程,空闲时间超过这个设置后,会被关闭,默认是1分钟。 

      threadPriority 线程的等级。默认是Thread.NORM_PRIORITY 

    第二步在Connector里指定使用共享线程池

      <Connector port="8009" ... maxThreads="5000" executor="tomcatThreadPool" ... />

      注意,一旦使用了线程池,则其它的线程属性,比如 maxThreads等将被忽略


  6.在tomcat中设置session过期时间
    在confweb.xml中通过参数指定:
    <session-config>   
        <session-timeout>180</session-timeout>     
    </session-config> 单位为分钟。

其他参考资料: http://www.iteye.com/topic/190329

 

性能调优总结

1、对于中间件为tomcat的应用系统,尽量采用较高版本的tomcat进行部署(如tomcat6),并开启tomcat6的nio模块
2、采用tomcat自身的连接池进行http连接的分配,不要采用手工的方式进行http连接的释放和分配
3、对于读多写少的应用系统,尽量需要采用memcache来缓解数据库的读压力
4、对于高并发的写操作,尽量将写操作,放入缓存队列,不要直接插入数据到数据库,可采用后台程序定时取队列数据入数据库
5、对于涉及到事务操作的表,mysql的表类型尽量采用innodb,若事务性不强的操作尽量采用myisam类型
6、对应用系统的SQL进行优化,避免全表扫描的SQL出现
7、对于高性能服务器,尽量在该机器上配置多个tomcat做负载均衡,但一台服务器最多tomcat数量不要超过8个,大于8个tomcat性能提升不再明显
8、采用SQL分析数据库中无用的索引并删除
9、采用SQL分析数据库中各个关键数据表的状态,当状态不正常时使用mysql工具进行表状态的修复
10、对于应用程序中的方法尽量采用异步方法,避免过多的采用同步方法进行调用
11、对于应用程序中的调试信息,采用log4j替代传统的System.out.println
12、对于应用系统中的js、css、image、flash等非动态元素采用动静分离的方式进行部署,对于非动态页面全部转向apache或nginx进行处理
13、对于采用硬件负载均衡的应用系统,尽量采用F5+nginx+tomcat的方式进行部署,避免采用F5+tomcat的方式进行部署,因为F5在挂载应用时是与服务器的ip绑定的,这样做不能充分发挥服务器的性能
14、考虑采用虚拟化的方式进行部署,使服务器的性能利用率达到最优

http://blog.csdn.net/giianhui/article/details/4463842
http://www.ibm.com/developerworks/cn/web/wa-aj-hiperform/
http://www.javaeye.com/topic/190329
 
netstat -ano >d:\aa.txt 监听连接数