性能答疑 QQ 群:697244251

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"
/>


↙↙↙阅读原文可查看相关链接,并与作者交流