[root@localhost ~]# cat server.xml
......
<Connector port="8080"
protocol="HTTP/1.1"
maxHttpHeaderSize="8192" # 设置 HTTP 头部大小
maxThreads="5000" # 指定可创建的最大线程数, 默认值为 200
minSpareThreads="30" # 指定最小空闲线程数, 默认值是 25
maxSpareThreads="300" # 指定最大空闲线程数
maxIdleTime="60000" # 指定线程最大空闲时间, 单位毫秒
minProcessors="30" # 服务器创建时的最小处理线程数
maxProcessors="5000" # 服务器同时最大处理线程数
enableLookups="false" # 关闭主机名反解, 值为 true 或 false; true 返回主机名, false 返回 IP 地址
URIEncoding="utf-8" # 设置 URL 编码
acceptCount="5000" # 监听端口队列最大数(不能小于 maxSpareThreads)
redirectPort="8443" # 在需要基于安全通道的场合, 把客户请求转发到基于 SSL 的端口
disableUploadTimeout="false" # 指定上传时是否使用超时机制, 值为 true 或 false
compression="on" # 指定是否对响应的数据进行 GZIP 压缩, on 允许压缩(文本压缩), off 禁止压缩, force 所有情况都进行压缩, 默认值为 off
compressionMinSize="2048" # 指定压缩响应的最小值, 响应报文大小大于该值对报文进行压缩, 默认值为 2048
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" # 压缩类型
noCompressionUserAgents="gozilla,traviata" # 指定对以下的浏览器不启用压缩
connnectionTimeout="30000" # 指定网络连接超时时间, 0 表示永不超时, 单位毫秒
connectionUploadTimeout="150000" # 指定上传超时时间, 单位毫秒
keepAliveTimeout="120000" # 指定长连接最大保持时间, 默认使用 connectionTimeout 时间, -1 表示不限制超时, 单位毫秒
maxKeepAliveRequests="1" # 最大长连接个数, 1 表示禁用长连接, -1 表示不限制长连接个数, 默认运行保持 100 长连接
connectionTimeout="5000" /> # 客户连接超时的时间, 如果为 -1 表示不限制建立客户连接的时间, 单位毫秒
Tomcat 连接器的三种方式: bio、nio 和 apr, apr 性能最优, bio 性能最差
BIO: 同步并阻塞, 服务器实现模式为一个连接一个线程(默认的工作模式)
# NIO 的工作模式
NIO: 同步非阻塞(JDK1.4 以上版本)
<Connector port="8080"
protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
URIEncoding="UTF-8"
useBodyEncodingForURI="true"
enableLookups="false"
redirectPort="8443" />
# APR 的工作模式
APR: 从操作系统级别来解决异步的 IO 问题, 大幅度的提高性能, JDK7 开始支持, 需要安装官方的插件才能使用
http://tomcat.apache.org/native-doc/ # 插件下载
yum -y install tomcat-native # 或者使用 yum 安装, 在 epel 中
<Connector port="8080"
protocol="org.apache.coyote.http11.Http11AprProtocol"
connectionTimeout="20000"
URIEncoding="UTF-8"
useBodyEncodingForURI="true"
enableLookups="false"
redirectPort="8443" />
[root@localhost ~]# cat context.xml
# 设置上下文最大可用缓存
<Resources cachingAllowed="true" cacheMaxSize="100000" />
cachingAllowed 指定允许开启缓存
cacheMaxSize 指定最大可用缓存, 默认 10M, 单位 KB
[root@localhost ~]# cat catalina.properties
# 禁用 TLDs 扫描
tomcat.util.scan.StandardJarScanFilter.jarsToSkip = ****
JVM
优化主要修改 catalina.sh
脚本里面 JAVA_OPTS
和 CATALINA_OPTS
的参数JAVA_OPTS
: 设置 JVM
相关运行参数的变量,用于Java运行时选项start
, stop
或 run
命令执行CATALINA_OPTS
: 设置 Tomcat
相关运行参数的变量, 用于 Java
运行时选项 start
, run
命令执行
JVM
内存划分分为新生代(Young Generation)
、老年代(Old Generation)
、永久代(Permanent Generation)
堆内存(Heap) = 新生代 + 老年代, 非堆内存 = 永久代
CATALINA_OPTS="
${CATALINA_OPTS}
-server
-Xms6000M
-Xmx6000M
-Xss512k
-XX:NewSize=2250M
-XX:MaxNewSize=2250M
-XX:+AggressiveOpts
-XX:+UseBiasedLocking
-XX:+DisableExplicitGC
-XX:+UseParNewGC
-XX:+UseConcMarkSweepGC
-XX:MaxTenuringThreshold=15
-XX:+CMSParallelRemarkEnabled
-XX:LargePageSizeInBytes=128M
-XX:+UseFastAccessorMethods
-XX:+UseCMSInitiatingOccupancyOnly
-Duser.timezone=Asia/Shanghai
-Djava.awt.headless=true
-Dfile.encoding=UTF8
-Dsun.jnu.encoding=UTF8
"
-server 启动速度慢, 运行时性能和内存管理效率高
-clien 启动速度快, 运行时性能和内存管理效率低
-Xms 指定 Java 初始化堆大小, -Xms 与 -Xmx 设成一样的值, 避免 JVM 反复重新申请内存, 默认值为物理内存的 1/64, 空余堆内存小于 40% 时 JVM 增大堆直到 -Xmx 的最大限制
-Xmx 指定 Java 最大堆大小, 最大值设置为可用内存的最大值的 80%, 空余堆内存大于 70% 时 JVM 减少堆直到 -Xms 的最小限制
-Xss 指定每个 Java 线程堆栈大小, 每个线程堆栈大小为 1M, 线程大小不建议超过 1M
-XX:NewSize 指定新生代内存大小
-XX:MaxNewSize 指定最大新生代内存大小
-XX:+AggressiveOpts 指定每当 JDK 版本升级时, JVM 都会使用最新加入的优化技术
-XX:+UseBiasedLocking 指定优化线程锁对线程处理自动进行最优调配
-XX:+DisableExplicitGC 指定程序代码中不允许显示调用 System.gc()
-XX:+UseConcMarkSweepGC 指定老年代为并发收集(CMS GC), CMS GC在GC次数增多的情况下, 每次GC的响应时间很短(几毫秒)
-XX:+UseParNewGC 指定新生代采用多线程并行回收
-XX:MaxTenuringThreshold 指定垃圾最大年龄, 设置为 0 新生代对象不经过 Survivor 区, 直接进入老年代, 对于老年代比较多的应用(需要大量常驻内存的应用)可以提高效率; 设置为一个较大值新生代对象会在 Survivor 区进行多次复制, 可以增加对象在新生代的存活时间, 增加在新生代即被回收的概率, 减少 Full GC 的频率。该参数只有在串行 GC 时才有效
-XX:+CMSParallelRemarkEnabled 指定使用 UseParNewGC 的情况下, 尽量减少 Mark 的时间
-XX:LargePageSizeInBytes 指定 Java Heap 的分页页面大小, 内存页的大小不可设置过大, 会影响 Perm 的大小
-XX:+UseFastAccessorMethods 指定使用 Get, Set 方法转成本地代码, 原始类型的快速优化
-XX:+UseCMSInitiatingOccupancyOnly 指定在 Oldgeneration 在使用了初始化的比例后 Concurrent Collector 启动收集
-Duser.timezone=Asia/Shanghai 指定时区
-Djava.awt.headless=true 兼容 Linux/Unix 下图形报表显示输出
-Xmn 指定新生代内存大小, 增大新生代后将会减小老年代大小, 对系统性能影响较大, Sun 官方推荐配置为整个堆的 3/8
-XX:CMSInitiatingOccupancyFraction 当堆满之后, 并行收集器开始进行垃圾收集, 与 Xmn 关联使用
-XX:+CMSIncrementalMode 指定开启 CMS 收集器增量模式, 增量模式经常暂停 CMS 过程, 对应用程序线程作出完全的让步
-XX:+UseSerialGC 指定使用串行收集器, 老年代使用串行收集
-XX:+UseParallelGC 指定使用并行收集器, 新生代使用并行收集
-XX:+UseParallelOldGC 指定老年代垃圾收集方式为并行收集
-XX:ConcGCThreads 指定并发 CMS 过程运行时的线程数, 如果未设置, JVM 会根据并行收集器中的 -XX:ParallelGCThreads 参数的值来计算出默认的并行 CMS 线程数
-XX:ParallelGCThreads 指定并行收集器的线程数,建议配置与CPU数目相等
-XX:OldSize 指定老年代内存大小
设置字符集编码:
-Dfile.encoding=UTF8
-Dsun.jnu.encoding=UTF8
-Djavax.servlet.request.encoding=UTF-8
-Djavax.servlet.response.encoding=UTF-8
-Dfile.encoding=UTF-8
-Duser.country=CN
-Duser.language=zh
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。