(1)提高JVM栈内存 JVM heap memory
tomcat有时候会“内存溢出”,这种问题出现在实际的生产环境中,产生这种问题的原因是tomcat使用较少的内存给进程。通过配置tomcat的配置文件(window下的tomcat/bin/catalina.bat或Linux下的tomcat/bin/catalina.sh)可以解决此问题。这种解决方法是通过增加JVM的栈内存实现的。这个方案可以让tomcat可以更多关注处理web请求,并要求尽快完成。
JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8
-server -Xms1024m -Xmx1024m
-XX:NewSize=512m -XX:MaxNewSize=512m -XX:PermSize=512m
-XX:MaxPermSize=512m -XX:+DisableExplicitGC"
(2)解决JRE内存泄露:
性能表现不佳的另一个主要原因是内存泄漏。可以使用最新的tomcat服务器以获得更好的性能和可伸缩性。新的tomcat包含了一个监听器来处理JRE和PermGen的内存泄漏。使用的监听器是
〈Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
(3)线程池设置:
线程池指定Web请求负载的数量,可以通过调整连接器属性“maxThreads”完成设置。maxThreads是由服务器处理的并发请求的最大数量。如果maxThreads设置的值过低,将有没有足够的线程来处理所有的请求,请求将进入等待状态,只有当一个的处理线程释放后才被处理;如果设置的太大,Tomcat的启动将花费更多时间。因此它取决于我们给maxThreads设置一个正确的值。
< Connector port="8080" address="localhost"
maxThreads="250" maxHttpHeaderSize="8192"
emptySessionPath="true" protocol="HTTP/1.1"
enableLookups="false" redirectPort="8181" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" />
(4)压缩:
HTTP压缩可以大大提高浏览网站的速度,它的原理是,在客户端请求服务器对应资源后,从服务器端将资源文件压缩,再输出到客户端,由客户端的浏览器负责解压缩并浏览。
tomcat5.0以后的版本是支持对输出内容进行压缩的,使用的是gzip压缩格式 。
<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000"
redirectPort="8443" executor="tomcatThreadPool" URIEncoding="utf-8"
compression="on" compressionMinSize="50" noCompressionUserAgents="gozilla, traviata"
compressableMimeType="text/html,text/xml,text/java,text/css,text/plain" />
从上面节点的属性可以看出,要使用gzip压缩功能,你需要在Connector节点中加上如下属性
compression="on" //打开压缩功能
compressionMinSize="50" //启用压缩的输出内容大小,单位byte默认为2048
noCompressionUserAgents="gozilla, traviata" //对于以下的浏览器,不启用压缩
compressableMimeType="text/html,text/xml,text/java,text/css,text/plain" //哪些资源类型需要压缩
(5)数据库性能调优:
Tomcat性能在等待数据库查询被执行期间会降。提高性能:
使用可能包含“命名查询”的关系型数据库,Tomcat会在启动时默认加载命名查询,这个可能会提升性能。
确保所有数据库连接正确地关闭。正确配置数据库连接池设置。Resource要素的最大空闲数(maxIdle),最大连接数(maxActive),最大建立连接等待时间(maxWait)属性的值。
(6)Tomcat原生库:
Tomcat的原生库基于Apache可移植运行时(Apache Portable Runtime简称APR),给程序员提供了超强的扩展性和性能,在产品运作中帮助融合原生的服务器技术以展现最佳的性能。