频道栏目
首页 > 网络 > 其他 > 正文

Tomcat 优化-胡源的博客-51CTO博客

2019-09-10 17:56:44           
收藏   我要投稿
1. 配置优化 1.1. server.xml 配置
[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 表示不限制建立客户连接的时间, 单位毫秒
1.2. Tomcat IO 优化
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" />
1.3. context.xml
[root@localhost ~]# cat context.xml
# 设置上下文最大可用缓存
<Resources cachingAllowed="true" cacheMaxSize="100000" />

cachingAllowed  指定允许开启缓存
cacheMaxSize    指定最大可用缓存, 默认 10M, 单位 KB
1.4. catalina.properties
[root@localhost ~]# cat catalina.properties
# 禁用 TLDs 扫描
tomcat.util.scan.StandardJarScanFilter.jarsToSkip = ****
2. JVM 优化

JVM 优化主要修改 catalina.sh 脚本里面 JAVA_OPTSCATALINA_OPTS 的参数JAVA_OPTS: 设置 JVM 相关运行参数的变量,用于Java运行时选项start, stoprun 命令执行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
相关TAG标签 Tomcat
上一篇:linux基本文件目录的结构及管理-老人与海-51CTO博客
下一篇:最后一页
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站