单机服务器性能优化
单机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统一编码