Tomcat 优化
admin
2023-03-09 15:21:21
0次

1. 配置优化

1.1. server.xml 配置
[root@localhost ~]# cat server.xml
......
         # 客户连接超时的时间, 如果为 -1 表示不限制建立客户连接的时间, 单位毫秒
1.2. Tomcat IO 优化
Tomcat 连接器的三种方式: bio、nio 和 apr, apr 性能最优, bio 性能最差
BIO: 同步并阻塞, 服务器实现模式为一个连接一个线程(默认的工作模式)

# NIO 的工作模式
NIO: 同步非阻塞(JDK1.4 以上版本)



# APR 的工作模式
APR: 从操作系统级别来解决异步的 IO 问题, 大幅度的提高性能, JDK7 开始支持, 需要安装官方的插件才能使用
http://tomcat.apache.org/native-doc/    # 插件下载
yum -y install tomcat-native            # 或者使用 yum 安装, 在 epel 中

1.3. context.xml
[root@localhost ~]# cat context.xml
# 设置上下文最大可用缓存


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_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

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...