之前写过一些有关Tomcat优化的文章(http://passover.blog.51cto.com/2431658/732629),实际生产环境有些配置除了性能优化,还有些是方便管理。以下是我个人总结的一些经验,主要是只考虑单个tomcat的情况,我个人更推荐前端放一个nginx来做压缩和长连接的事情。也希望能有网友帮忙再帮忙指点更多的细节。

1. tomcat的下载与安装

    目前tomcat最新的稳定版本是7.0.30,建议使用这个版本,看changelog是有一堆的bug fix。到官方http://tomcat.apache.org/download-70.cgi下载一个即可,解压后即可运行。

2. jvm启动参数的调整

    这步是非常重要,新建setenv.sh,加入自己的配置,参考配置:

  1. #!/bin/sh 
  2.  
  3. LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CATALINA_HOME/lib 
  4. export LD_LIBRARY_PATH 
  5.  
  6. TOMCAT_USER=nobody 
  7. JSVC_OPTS='-jvm server' 
  8. JAVA_OPTS='-server -Xms1024m -Xmx1024m -XX:PermSize=192m -XX:MaxPermSize=192m' 

    或者偷懒点在catilina.sh文件开头添加,参考配置:

  1. JAVA_OPTS="-server -Xms1024m -Xmx1024m -XX:PermSize=192m -XX:MaxPermSize=192m" 

3. tomcat的配置优化

    在conf/server.xml中修改connector选项,其中compreesion参数稍微注意下是否需要打开。参考配置:

  1. <Connector port="8080" protocol="HTTP/1.1" 
  2.            connectionTimeout="20000" 
  3.            redirectPort="8443" 
  4.            compression="on" 
  5.            compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,application/json" 
  6.            useSendfile="false" 
  7.            maxThreads="150"    
  8.            minSpareThreads="20"   
  9.            acceptCount="100"  
  10.            disableUploadTimeout="true"  
  11.            enableLookups="false"    
  12.            URIEncoding="UTF-8" /> 

    在conf/server.xml中修改日志打印,增加每个请求的响应时间输出。参考配置:

  1. <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" 
  2.                prefix="localhost_access_log." suffix=".txt" 
  3.                pattern="%h %l %u %t &quot;%r&quot; %s %b %T" /> 

  详细配置可以参考http://tomcat.apache.org/tomcat-7.0-doc/config/http.html

4. 使用tomcat native安装apr优化连接性能

    tomcat解压包在bin/下面就能找到源文件的tar.gz包,不用重新下载。安装过程参见http://tomcat.apache.org/native-doc/

5. 对catalina.out日志做每日切分

    我采用的办法是用cronolog,可以参见http://unmi.cc/split-tomcat-catalina-out-file。这里提一下,我直接用aptitude来安装的,使用的时候调用的命令位置是/usr/bin/cronolog

6. 配置tomcat-users方便管理

    在conf/tomcat-users.xml中添加,参考配置:

  1. <role rolename="manager-gui"/> 
  2. <role rolename="admin-gui"/> 
  3. <user username="admin" password="123456" roles="manager-gui,admin-gui"/> 

7. log4j的动态加载配置

    如果不想修改一下log4j日志级别就要重启应用的话,这个还是挺重要的。log4j本身有个watch的功能,但是一直在那定时刷其实也不好,后来找到了个文章,觉得这个办法非常好。直接调用一个action实现配置修改。参考资料:http://blog.sina.com.cn/s/blog_4b81125f0100fo95.html

  

总结:以上是刚刚配置新服务器的时候想到的,随手记录了一下,以后有想到的新的内容再补充。各位网友可以参考以上配置,根据实际需要进行取舍和修改。