用tomcat有点年头了,今天来讲一下tomcat的性能优化策略。 优化策略有2,1是JVM内存的优化,2是线程并发量的优化。 JVM内存的优化在bin目录的cotalina.bat文件中,在"OS"下增加: - set JAVA_OPTS=-server -Xms1000M -Xmx1000M -Xss512k -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:PermSize=128M -XX:MaxPermSize=256M -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=31 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true
复制代码这是启动参数,参数解释: ü -server 我不管你什么理由,只要你的tomcat是运行在生产环境中的,这个参数必须给我加上 因为tomcat默认是以一种叫java –client的模式来运行的,server即意味着你的tomcat是以真实的production的模式在运行的,这也就意味着你的tomcat以server模式运行时将拥有:更大、更高的并发处理能力,更快更强捷的JVM垃圾回收机制,可以获得更多的负载与吞吐量。。。更。。。还有更。。。 Y给我记住啊,要不然这个-server都不加,那是要打屁股了。 ü -Xms–Xmx 即JVM内存设置了,把Xms与Xmx两个值设成一样是最优的做法,有人说Xms为最小值,Xmx为最大值不是挺好的,这样设置还比较人性化,科学化。人性?科学?你个头啊。 大家想一下这样的场景: 一个系统随着并发数越来越高,它的内存使用情况逐步上升,上升到最高点不能上升了,开始回落,你们不要认为这个回落就是好事情,由其是大起大落,在内存回落时它付出的代价是CPU高速开始运转进行垃圾回收,此时严重的甚至会造成你的系统出现“卡壳”就是你在好好的操作,突然网页像死在那边一样几秒甚至十几秒时间,因为JVM正在进行垃圾回收。 因此一开始我们就把这两个设成一样,使得Tomcat在启动时就为最大化参数充分利用系统的效率,这个道理和jdbcconnection pool里的minpool size与maxpool size的需要设成一个数量是一样的原理。 如何知道我的JVM能够使用最大值啊?拍脑袋?不行! 在设这个最大内存即Xmx值时请先打开一个命令行,键入如下的命令: java -Xmx1000m -verstion 这个可以查询JVM支持的最大内存。
tomcat的优化在server.xml中,在"<Connector port="8080" protocol="HTTP/1.1"的部分增加: - URIEncoding="UTF-8" minSpareThreads="25" maxSpareThreads="75"
- enableLookups="false" disableUploadTimeout="true" connectionTimeout="20000"
- acceptCount="300" maxThreads="300" maxProcessors="1000" minProcessors="5"
- useURIValidationHack="false"
- compression="on" compressionMinSize="2048"
- compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain
复制代码参数解释 :
ü URIEncoding=”UTF-8” 使得tomcat可以解析含有中文名的文件的url,真方便,不像apache里还有搞个mod_encoding,还要手工编译 ü maxSpareThreads maxSpareThreads 的意思就是如果空闲状态的线程数多于设置的数目,则将这些线程中止,减少这个池中的线程总数。 ü minSpareThreads 最小备用线程数,tomcat启动时的初始化的线程数。 ü enableLookups 这个功效和Apache中的HostnameLookups一样,设为关闭。 ü connectionTimeout connectionTimeout为网络连接超时时间毫秒数。
ü maxThreads maxThreads Tomcat使用线程来处理接收的每个请求。这个值表示Tomcat可创建的最大的线程数,即最大并发数。
ü acceptCount acceptCount是当线程数达到maxThreads后,后续请求会被放入一个等待队列,这个acceptCount是这个队列的大小,如果这个队列也满了,就直接refuse connection
ü maxProcessors与minProcessors 在 Java中线程是程序运行时的路径,是在一个程序中与其它控制线程无关的、能够独立运行的代码段。它们共享相同的地址空间。多线程帮助程序员写出CPU最 大利用率的高效程序,使空闲时间保持最低,从而接受更多的请求。 通常Windows是1000个左右,Linux是2000个左右
from:http://geeksun.iteye.com/blog/1679046
|