# 优化参数 <Connector port="8080" protocol="HTTP/1.1" maxThreads="1000" minSpareThreads="100" acceptCount="1000" maxConnections="1000" connectionTimeout="20000" maxKeepAliveRequests="1" maxHttpHeaderSize="8192" tcpNoDelay="true" compression="on" compressionMinSize="2048" disableUploadTimeout="true" redirectPort="8443" enableLookups="false" URIEncoding="UTF-8" />
一般会调优这么几个参数
- 1)maxThreads
注:连接器创建处理请求线程的最大数目,处理同事请求的最大数目,默认值为200 也有150等等,版本不一样默认值不一样,协议不一样默认值也不一样。 不是越大越好,需要考虑硬件
- 2)minSpareThreads=”50″ :设置当前Tomcat初始化时创建的线程数,默认值为25
- 3)acceptCount 排队的数量,排队如果超过这个数目,则直接拒绝 要考虑硬件以及服务的响应时间,消化的快慢来决定
- 4)enableLookups 如果为true,则可以通过调用request.getRemoteHost()进行DNS查询来得到远程客户端的实际主机名,若为false则不进行DNS查询,而是返回其ip地址
- 5)maxKeepAliveRequests=”1″ :nginx动态的转给tomcat,nginx是不能keepalive的,而tomcat端默认开启了keepalive,会等待keepalive的timeout,默认不设置就是使用connectionTimeout。所以必须设置tomcat的超时时间,并关闭tomcat的keepalive。否则会产生大量tomcat的socket timewait。maxKeepAliveRequests=”1”就可以避免tomcat产生大量的TIME_WAIT连接,从而从一定程度上避免tomcat假死。
- 6)maxConnections:Tomcat最多能并发处理的请求(连接); 处理器并发处理的数量,会比maxThread更加准备的描述最大处理数 如果maxConnections 比maxThreads小的话,则真正起作用的就是maxConnections 多余的会被放到acceptCount里面,如果放不下则直接舍弃掉
JVM参数优化
先取一个参数设置的样例 这个是G1的参数设置的样例
JAVA_MEM_OPTS=" -server -XX:+UseG1GC -Xmx2G -XX:MaxGCPauseMillis=10 -XX:+UnlockExperimentalVMOptions -XX:G1NewSizePercent=15 -XX:G1MaxNewSizePercent=30 -XX:SurvivorRatio=6 -XX:InitiatingHeapOccupancyPercent=30 -XX:G1MixedGCLiveThresholdPercent=50 -XX:G1HeapWastePercent=5 -XX:+PrintGCDetails -Xloggc:/Data/temp/gateway/gc.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/Data/temp/gateway/heapdump.hprof "
- -Xmx 最大堆大小 -Xms 初始大小。一般都设置成一样的大小,以防止频繁的更新设置,导致性能下降
- -Xmn 年轻代大小 如果并发比较大,且大部分对象创建之后就会很短时间需要回收的话,建议设置比较大一点,这样会防止晋升到老年代,导致FULLGC变多变慢
- -Xss 线程的栈大小,默认1M 根据实际的线程大小进行调整
- -XX:MaxPermSize 持久代大小,存储类信息,常量池、静态变量等。如果类加载器比较多,注意jvm会默认分配给每个加载器默认的大小空间,但是每个加载器之间是不能共享的。导致会可能发生持久代未满,但是抛出持久代已满的异常
- -XX:MaxTenuringThreshold=0:设置垃圾最大年龄 。如果设置比较大的话,可以增加对象在年轻代的时间。增加对象被YGC回收的几率。减少FullGC
- -XX:ParallelGCThreads=4 配置并行收集器的线程数,即:同时多少个线程一起进行垃圾回收。此值最好配置与处理器数目相等 。如果当前步骤和业务线程并行的话,需要考虑留一下cpu时间给业务线程使用,控制业务线程的响应时间
- -XX:MaxGCPauseMillis=100 :设置每次年轻代垃圾回收的最长时间,如果无法满足此时间,JVM会自动调整年轻代大小,以满足此值。但是也不能设置的太短,否则GC回收的速度跟不上垃圾产生的速度,导致FullGC
- PrintGCDetails 打开GC日志记录
- HeapDumpOnOutOfMemoryError 堆溢出时,打印dump信息
- InitiatingHeapOccupancyPercent 启动并发GC周期时的堆内存占用百分比. G1之类的垃圾收集器用它来触发并发GC周期,基于整个堆的使用率,而不只是某一代内存的使用比. 值为 0 则表示”一直执行GC循环”. 默认值为 45.
- -XX:G1MixedGCLiveThresholdPercent:低于这个活跃度阈值的老年代分区都会被包含在混合收集的CSet中。默认值为85%
- -XX:G1HeapWastePercent=5:可回收的内存超过这个比例时,g1才开始mixed gc的周期,控制mixed gc 尽量不进行fullgc