Tomcat 性能优化策略
系统性能的衡量指标,主要是响应时间和吞吐量。
1)响应时间:执⾏某个操作的耗时;
2)吞吐量:系统在给定时间内能够⽀持的事务数量,单位为TPS(Transactions PerSecond的缩写,也就是事务数/秒,⼀个事务是指⼀个客户机向服务器发送请求然后服务器做出反应的过程。
Tomcat优化从两个⽅⾯进⾏
1)JVM虚拟机优化(优化内存模型)
2)Tomcat⾃身配置的优化(⽐如是否使⽤了共享线程池?IO模型?)
学习优化的原则
提供给⼤家优化思路,没有说有明确的参数值⼤家直接去使⽤,必须根据⾃⼰的真实⽣产环境来进⾏调整,调优是⼀个过程
虚拟机运⾏优化(参数调整)
Java 虚拟机的运⾏优化主要是内存分配和垃圾回收策略的优化:
内存直接影响服务的运⾏效率和吞吐量
垃圾回收机制会不同程度地导致程序运⾏中断(垃圾回收策略不同,垃圾回收次数和回收效率都是
不同的)
1) Java 虚拟机内存相关参数
JVM内存模型回顾
参数调整示例
JAVA_OPTS="-server -Xms2048m -Xmx2048m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m"
调整后查看可使⽤JDK提供的内存映射⼯具
2) 垃圾回收(GC)策略
垃圾回收性能指标
- 吞吐量:⼯作时间(排除GC时间)占总时间的百分⽐, ⼯作时间并不仅是程序运⾏的时间,还包含内存分配时间。
- 暂停时间:由垃圾回收导致的应⽤程序停⽌响应次数/时间。
垃圾收集器
- 串⾏收集器(Serial Collector)
- 单线程执⾏所有的垃圾回收⼯作, 适⽤于单核CPU服务器
- ⼯作进程-----|(单线程)垃圾回收线程进⾏垃圾收集|---⼯作进程继续
- 并⾏收集器(Parallel Collector)
- ⼜称为吞吐量收集器(关注吞吐量), 以并⾏的⽅式执⾏年轻代的垃圾回收, 该⽅式可以显著降低垃圾回收的开销(指多条垃圾收集线程并⾏⼯作,但此时⽤户线程仍然处于等待状态)。适⽤于多处理器或多线程硬件上运⾏的数据量较⼤的应⽤
- 并发收集器(Concurrent Collector)
- 以并发的⽅式执⾏⼤部分垃圾回收⼯作,以缩短垃圾回收的暂停时间。适⽤于那些响应时间优先于吞吐量的应⽤, 因为该收集器虽然最⼩化了暂停时间(指⽤户线程与垃圾收集线程同时执⾏,但不⼀定是并⾏的,可能会交替进⾏), 但是会降低应⽤程序的性能
- CMS收集器(Concurrent Mark Sweep Collector)
- 并发标记清除收集器, 适⽤于那些更愿意缩短垃圾回收暂停时间并且负担的起与垃圾回收共享处理器资源的应⽤
- G1收集器(Garbage-First Garbage Collector)
- 适⽤于⼤容量内存的多核服务器, 可以在满⾜垃圾回收暂停时间⽬标的同时, 以最⼤可能性实现⾼吞吐量(JDK1.7之后)
垃圾回收器参数
在bin/catalina.sh的脚本中 , 追加如下配置 :
JAVA_OPTS="-XX:+UseConcMarkSweepGC"
Tomcat 配置调优
Tomcat⾃身相关的调优
- 调整tomcat线程池
- 调整tomcat的连接器
调整tomcat/conf/server.xml 中关于链接器的配置可以提升应⽤服务器的性能。
- 禁⽤ A JP 连接器
- 调整 IO 模式
Tomcat8之前的版本默认使⽤BIO(阻塞式IO),对于每⼀个请求都要创建⼀个线程来处理,不适合⾼并发;Tomcat8以后的版本默认使⽤NIO模式(⾮阻塞式IO)
当Tomcat并发性能有较⾼要求或者出现瓶颈时,我们可以尝试使⽤APR模式,APR(Apache Portable Runtime)是从操作系统级别解决异步IO问题,使⽤时需要在操作系统上安装APR和Native(因为APR原理是使⽤使⽤JNI技术调⽤操作系统底层的IO接⼝)
- 动静分离 可以使⽤Nginx+Tomcat相结合的部署⽅案,Nginx负责静态资源访问,Tomcat负责Jsp等动态资源访问处理(因为Tomcat不擅⻓处理静态资源)。