性能测试连载 (31)-tomcat 中间件调优指南
jvm调优
-server:tomcat以server模式运行时将拥有更大更高的并发处理能力,更快更强捷的JVM垃圾回收机制,可以获得更多的负载与吞吐量
-Xms–Xmx:把Xms与Xmx两个值设成一样是最优的做法
-Xss:设定线程的堆栈大小。一般不易设置超过1M,否则容易出现out ofmemory
-XX:+AggressiveOpts:启用这个参数,则每当JDK版本升级时,你的JVM都会使用最新加入的优化技术
-XX:+UseBiasedLocking:启用一个优化了的线程锁。使得appserver内对线程处理自动进行最优调配
-XX:PermSize=128M-XX:MaxPermSize=256M:设置非堆内存初始值
-XX:+DisableExplicitGC:在程序代码中不允许调用System.gc()
-XX:+UseParNewGC:对年轻代采用多线程并行回收
-XX:+UseConcMarkSweepGC:使用cms GC回收器
-XX:MaxTenuringThreshold:设置年轻代gc最大年龄
-XX:+CMSParallelRemarkEnabled:在使用UseParNewGC的情况下, 尽量减少mark的时间(暂时不理解)
-XX:+UseCMSCompactAtFullCollection:使用concurrent_gc的情况下,防止memoryfragmention,对live _object进行整理,减少memory碎片
-XX:LargePageSizeInBytes:指定Java heap的分页页面大小
-XX:+UseFastAccessorMethods:get,set方法转成本地代码
-XX:+UseCMSInitiatingOccupancyOnly:指示只有在oldgeneration使用了初始化的比例后concurrent collector启动收集
-XX:MaxGCPauseMillis=500设置年轻代回收的最长时间
-XX:ParallelGCThreads=4 设置并行回收的线程数
-XX:+UseParallelOldGC:对老年代采用多线程并行回收
-XX:+UseAdaptiveSizePolicy:并行收集器会自动选择年轻代区大小和相应的Survivor区比例
-XX:NativeMemoryTracking=detail追踪JVM的内部内存使用,开启之后会增加5%-10%的性能消耗
jvm调优示例
Linux下tomcat启动参数
export JAVA_OPTS="-server -Xms1400M -Xmx1400M -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 "
Windows下tomcat启动参数
set JAVA_OPTS=-server -Xms1400M -Xmx1400M -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
tomcat线程池调优
maxSpareThreads:的意思就是如果空闲状态的线程数多于设置的数目,则将这些线程中止,减少这个池中的线程总数
minSpareThreads:最小备用线程数,tomcat启动时的初始化的线程数
connectionTimeout:网络连接超时时间毫秒数
maxThreads:这个值表示Tomcat可创建的最大的线程数,即最大并发数
acceptCount:线程数达到maxThreads后,后续请求会被放入一个等待队列,acceptCount是这个队列的大小,如果这个队列满了,就直接refuse connection
maxProcessors与minProcessors:多线程使CPU利用率最大,空闲时间保持最低,从而接受更多的请求。通常Windows1000左右,Linux2000左右
线程池调优示例
<connector port="8080" protocol="HTTP/1.1" <="" p="" style="word-wrap: break-word;">
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"
redirectPort="8443"
/>