Tomcat:性能優(yōu)化策略
一、背景
系統(tǒng)性能的衡量指標,主要是響應時間和吞吐量。
1)響應時間:執(zhí)行某個操作的耗時;
2) 吞吐量:系統(tǒng)在給定時間內能夠支持的事務數量,單位為TPS(Transactions PerSecond的縮寫,也就是事務數/秒,一個事務是指一個客戶機向服務器發(fā)送請求然后服務器做出反應的過程。
Tomcat優(yōu)化從兩個方面進行
1)JVM虛擬機優(yōu)化(優(yōu)化內存模型)
2)Tomcat自身配置的優(yōu)化(比如是否使用了共享線程池?IO模型?)
學習優(yōu)化的原則提供給大家優(yōu)化思路,沒有說有明確的參數值大家直接去使用,必須根據自己的真實生產環(huán)境來進行調整,調優(yōu)是一個過程。
二、Jvm虛擬機運行優(yōu)化
Java 虛擬機的運行優(yōu)化主要是內存分配和垃圾回收策略的優(yōu)化:
- 內存直接影響服務的運行效率和吞吐量
- 垃圾回收機制會不同程度地導致程序運行中斷(垃圾回收策略不同,垃圾回收次數和回收效率都是不同的
1) Java 虛擬機內存模型和相關參數
2) 垃圾回收(GC)策略垃圾回收性能指標吞吐量:
- 工作時間(排除GC時間)占總時間的百分比, 工作時間并不僅是程序運行的時間,還包含內存分配時間。
- 暫停時間:由垃圾回收導致的應用程序停止響應次數/時間。
垃圾收集器
- 串行收集器(Serial Collector)
單線程執(zhí)行所有的垃圾回收工作, 適用于單核CPU服務器工作進程
工作進程-----|(單線程)垃圾回收線程進行垃圾收集|---工作進程繼續(xù)
- 并行收集器(Parallel Collector)
工作進程-----|(多線程)垃圾回收線程進行垃圾收集|---工作進程繼續(xù)
又稱為吞吐量收集器(關注吞吐量), 以并行的方式執(zhí)行年輕代的垃圾回收, 該方式可以顯著降低垃圾回收的開銷(指多條垃圾收集線程并行工作,但此時用戶線程仍然處于等待狀態(tài))。
適用于多處理器或多線程硬件上運行的數據量較大的應
- 并發(fā)收集器(Concurrent Collector)
以并發(fā)的方式執(zhí)行大部分垃圾回收工作,以縮短垃圾回收的暫停時間。
適用于那些響應時間優(yōu)先于吞吐量的應用, 因為該收集器雖然最小化了暫停時間(指用戶線程與垃圾收集線程同時執(zhí)行,但不一定是并行的,可能會交替進行), 但是會降低應用程序的性能
- CMS收集器(Concurrent Mark Sweep Collector)
并發(fā)標記清除收集器, 適用于那些更愿意縮短垃圾回收暫停時間并且負擔的起與垃圾回收共享處理器資源的應用
- G1收集器(Garbage-First Garbage Collector)
適用于大容量內存的多核服務器, 可以在滿足垃圾回收暫停時間目標的同時, 以最大可能性實現高吞吐量( JDK1.7之后)
三、Tomcat配置調優(yōu)
- 調整tomcat線程池
- 調整tomcat的連接器
調整tomcat/conf/server.xml 中關于鏈接器的配置可以提升應用服務器的性能
- 禁用 AJP 連接器
- 調整 IO 模式
Tomcat8之前的版本默認使用BIO(阻塞式IO),對于每一個請求都要創(chuàng)建一個線程來處理,不適合高并發(fā);Tomcat8以后的版本默認使用NIO模式(非阻塞式IO)
當Tomcat并發(fā)性能有較高要求或者出現瓶頸時,我們可以嘗試使用APR模式,APR(Apache PortableRuntime)是從操作系統(tǒng)級別解決異步IO問題,使用時需要在操作系統(tǒng)上安裝APR和Native(因為APR原理是使用使用JNI技術調用操作系統(tǒng)底層的IO接口)
- 動靜分離
可以使用Nginx+Tomcat相結合的部署方案,Nginx負責靜態(tài)資源訪問,Tomcat負責Jsp等動態(tài)資源訪問處理(因為Tomcat不擅?處理靜態(tài)資源)