概述
系统性能的衡量指标主要是相应时间和吞吐量
- 响应时间:执行某个操作的耗时;
- 吞吐量:系统在给顶时间内能够支持的事务数量,单位为TPS
优化方向: - JVM虚拟机优化
- Tomcat自身
虚拟机运行优化
优化主要分为俩个方向:
内存分配:影响服务的运行效率和吞吐量
垃圾回收策略的优化:不同程度的导致程序运行中断
内存分配-相关参数:
参数调整实例:
JAVA_OPTS="-server -Xms2048m -Xmx2048m -XX:MetaspaceSize=256m - XX:MaxMetaspaceSize=512m"
调整后可以使用JDK自带的内存映射工具查看:
jhsdb jmap --heap --pid xxx
注:pid为进程编号
垃圾回收器:
介绍:
-
串行收集器
单线程执行所有的垃圾回收工作,适用于单核CPU -
并行收集器(吞吐量收集器)
以并行的方式执行年轻代的垃圾回收,该方式可以显著降低垃圾回收的开销。(指多条垃圾收集线程并行工作,此时用户线程仍然处于等待状态)适用于多处理器或多线程硬件上运行的数据量较大的应用。 -
并发收集器
以并发的方式执行大部分的垃圾回收工作,以缩短垃圾回收的暂停时间。适用于那些响应时间优先于吞吐量的应用,因为该收集器虽然最小化了暂停时间(指用户线程与垃圾收集线程同时执行,但不一定是并行的,会交替进行),但是会降低应用程序的性能 -
CMS收集器
并发标记清除收集器,适用于那些更愿意缩短垃圾回收暂停时间并且负担的起与垃圾回收共享处理器资源的应用 -
G1收集器
适用于大容量内存的多核服务器,可以在满足垃圾回收暂停时间目标的同时,以最大可能实现高吞吐量
使用方法:
在Tomcat的bin/catalina.sh的脚本中,追加如下配置:JAVA_OPTS="-XX:+UseConcMarkSweepGC"
Tomcat配置调优
-
线程池调整:
-
连接器调整:
调整Tomcat/conf/serve.xml中关于连接器的配置可以提升应用服务器的性能
-
禁用AJP连接器
-
调整IO模式
Tomcat 8之前默认使用BIO(阻塞式IO),对于每一个请求都要创建一个线程来处理,不适合高并发。之后采用NIO模式(非阻塞式IO)
当Tomcat并发性能有较高要求或者出现较高瓶颈时,可以尝试使用APR模式,APR是从操作系统级别解决异步IO问题,使用时需要在操作系统上按照APR和Native(原理:使用JNI技术调用操作系统底层的IO接口)
- 动静分离
架构设计:Nginx+Tomcat Nginx负责静态资源访问,Tomcat负责动态资源(不擅长处理静态资源)