单机服务器性能优化

97

单机Tomcat性能优化,修改Catalina.sh

# Register custom URL handlers
# Do this here so custom URL handles (specifically 'war:...') can be used in the security policy
JAVA_OPTS="$JAVA_OPTS -Djava.protocol.handler.pkgs=org.apache.catalina.webresources"
#增加JVM推荐参数
JAVA_OPTS="$JAVA_OPTS -Xms16384M -Xmx16384M -Xmn6G -Xss256K -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/jvm-oom-logs/oom.log -XX:+UseConcMarkSweepGC -XX:+ExplicitGCInvokesConcurrent -XX:+PrintGCDetails -Xloggc:/jvm-gc-logs/gc-%t.log -XX:+UseGCLogFileRotation -XX:GCLogFileSize=100M -XX:NumberOfGCLogFiles=10"

vim setenv.sh

#!/bin/sh
export CATALINA_OPTS="$CATALINA_OPTS -Xms24G -Xmx24G -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintTenuringDistribution -Xloggc:/jvm-gc-logs/gc-%t.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=20M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/jvm-oom-logs/heapdump_%p_%t.hprof -XX:ErrorFile=/jvm-oom-logs/hs_err.log"



以下配置为JVM参数调优解析:
-server     #以服务器模式启动,启动速度慢,但更稳定,性能更好
-Xms8192M   #由于本机内存为16G,这里就设置成8G(实际并未达到最大内存的80%)
-Xmx8192M   #-Xms与-Xmx设成一样的值,避免JVM因为频繁的GC导致性能大起大落
-Xss512K 
-Xmn3G        #新年代大小,官方建议为总堆的3/8
-XX:+AggressiveOpts 
-XX:+UseBiasedLocking 
-XX:PermSize=64M    #内存永久保留区域 
-XX:MaxPermSize=300M     #内存永久保留区域 
-XX:+DisableExplicitGC  #禁止System.gc(),免得误调用gc方法影响性能
-XX:MaxTenuringThreshold=31 
-XX:+UseConcMarkSweepGC 
-XX:+UseParNewGC   #对年轻代采用多线程并行回收,这样收得快;
-XX:+CMSParallelRemarkEnabled  #带CMS相关的是并发回收(CMS垃圾收集器)
-XX:+UseCMSCompactAtFullCollection  #带CMS相关的是并发回收(CMS垃圾收集器)
-XX:LargePageSizeInBytes=128m  
-XX:+UseFastAccessorMethods 
-XX:+UseCMSInitiatingOccupancyOnly #带CMS相关的是并发回收(CMS垃圾收集器)
-Djava.awt.headless=true

修改server.xml

    <Connector port="8848" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
               minSpareThreads="25" 
               maxSpareThreads="75"
               maxProcessors="1000" 
               minProcessors="5"
               acceptCount="300"   
               maxThreads="300"
               compression="on" 
               compressionMinSize="2048"
               compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
 />

配置解析:
maxThreads 客户请求最大线程数
minSpareThreads Tomcat初始化时创建的 socket 线程数
maxSpareThreads Tomcat连接器的最大空闲 socket 线程数
enableLookups 若设为true, 则支持域名解析,可把 ip 地址解析为主机名
redirectPort 在需要基于安全通道的场合,把客户请求转发到基于SSL 的 redirectPort 端口
acceptAccount 监听端口队列最大数,满了之后客户请求会被拒绝(不能小于maxSpareThreads )
connectionTimeout 连接超时
minProcessors 服务器创建时的最小处理线程数
maxProcessors 服务器同时最大处理线程数
URIEncoding URL统一编码