Struts2 及JVM优化

一,struts2的优化,主要是通过设置struts2定义的一些常量来修改struts2的配置,可以在struts.properties文件中统一设置
1:struts.devMode=false
开发模式一定要关闭,这个对于性能影响很大。一旦开启,对于并发访问的效率影响是极大的
2:struts.ognl.enableExpressionCache=true
3:struts.freemarker.templatesCache=true
4:struts.freemarker.beanwrapperCache=true
5:struts.freemarker.mru.max.strong.size=10000
6:struts.freemarker.templatesCache.updateDelay=86400
7:struts.i18n.reload=false
8:struts.xslt.nocache=false
9:struts.configuration.xml.reload=false
10:struts.serve.static.browserCache=true
11:struts.objectFactory.spring.useClassCache=true
以上优化主要是开启缓存及修改缓存的生存期,对于并发访问的效率提升还是很明显的。

二,tomcat的优化
1:设置JVM参数:set JAVA_OPTS=%JAVA_OPTS% -server -Xms512m -Xmx512m -Xmn192m -XX:PermSize=128m -XX:MaxPermSize=128m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:ParallelGCThreads=8 -XX:ParallelCMSThreads=8 -Dfile.encoding=utf-8
注意 -Xms和-Xmx设置相同,可适当调大,但最好别超过2G,太大了CMS GC时效率会很低;-Xmn设置成-Xmx的3/8左右;-XX:PermSize和-XX:MaxPermSize设置相同,一般128m就够了,太小可能会溢出,太大会导致FULL GC效率奇差,建议不要大于256m;后面几项分别是设置并行回收新生代、并发回收老年代,以及并行、并发的线程数。这部分设置合适对于系统性能的鲁棒性影响较大。
有时内存配的都可以了,但还是频繁出现FULL GC。这个可能是代码里存在大量的system.gc()调用,这个默认会触发一次FULL GC的。此时可以用-XX:+DisableExplicitGC将system.gc()的特性修改成不调用GC。但是更好的做法是通过-XX:+ExplicitGCInvokesConcurrent(jdk 1.6)或者-XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses(jdk1.6 update4后)将system.gc()的特性修改成调用一次CMS GC。
2:修改server.xml:
<Connector port="6080" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="6443" URIEncoding="UTF-8" compression="on" enableLookups="false" />
org.apache.coyote.http11.Http11NioProtocol是使用JAVA NIO取代默认的JAVA IO,javaio是阻塞方式的,并发度大时效率较低;compression="on"是开启静态资源的gzip压缩;enableLookups="false"关闭客户端域名的DNS查询
3:采用jikes预编译jsp。
首先修改CATALINA_OPTS的值:
set CATALINA_OPTS=%CATALINA_OPTS% -Dbuild.compiler.emacs=true
然后server.xml中定义的名为jsp的servlet增加参数:
<init-param>
<param-name>compiler</param-name>
<param-value>jikes</param-value>
</init-param>

三:集群
如果客户有多台服务器,或者只有一台服务器但是内存和CPU处理能力都较强,建议建立集群。特别对于大内存的机器,如果简单的增大JVM的内存配置,效率不会增加太多,反而会增加GC的时间。集群的建立方式比较通用,通过一个Apache做负载均衡,后面带着多个tomcat。建议使用32的JDK,每个tomcat的堆大小不要设置超过2G。在64系统上同样不建议使用64位的JDK,大部分人都认为64位的JDK配置大内存的效率,远远小于32位JDK配置小内存后再集群。
集群的建立详见: http://blog.csdn.net/matrix_designer/article/details/10509523

你可能感兴趣的:(Struts2 及JVM优化)