天天看點

Tomcat:性能優化政策

作者:日拱一卒程式猿

一、背景

系統性能的衡量名額,主要是響應時間和吞吐量。

1)響應時間:執行某個操作的耗時;

2) 吞吐量:系統在給定時間内能夠支援的事務數量,機關為TPS(Transactions PerSecond的縮寫,也就是事務數/秒,一個事務是指一個客戶機向伺服器發送請求然後伺服器做出反應的過程。

Tomcat優化從兩個方面進行

1)JVM虛拟機優化(優化記憶體模型)

2)Tomcat自身配置的優化(比如是否使用了共享線程池?IO模型?)

學習優化的原則提供給大家優化思路,沒有說有明确的參數值大家直接去使用,必須根據自己的真實生産環境來進行調整,調優是一個過程。

二、Jvm虛拟機運作優化

Java 虛拟機的運作優化主要是記憶體配置設定和垃圾回收政策的優化:

  • 記憶體直接影響服務的運作效率和吞吐量
  • 垃圾回收機制會不同程度地導緻程式運作中斷(垃圾回收政策不同,垃圾回收次數和回收效率都是不同的

1) Java 虛拟機記憶體模型和相關參數

Tomcat:性能優化政策
Tomcat:性能優化政策

2) 垃圾回收(GC)政策垃圾回收性能名額吞吐量:

  • 工作時間(排除GC時間)占總時間的百分比, 工作時間并不僅是程式運作的時間,還包含記憶體配置設定時間。
  • 暫停時間:由垃圾回收導緻的應用程式停止響應次數/時間。

垃圾收集器

  • 串行收集器(Serial Collector)

單線程執行所有的垃圾回收工作, 适用于單核CPU伺服器工作程序

工作程序-----|(單線程)垃圾回收線程進行垃圾收集|---工作程序繼續

  • 并行收集器(Parallel Collector)

工作程序-----|(多線程)垃圾回收線程進行垃圾收集|---工作程序繼續

又稱為吞吐量收集器(關注吞吐量), 以并行的方式執行年輕代的垃圾回收, 該方式可以顯著降低垃圾回收的開銷(指多條垃圾收集線程并行工作,但此時使用者線程仍然處于等待狀态)。

适用于多處理器或多線程硬體上運作的資料量較大的應

  • 并發收集器(Concurrent Collector)

以并發的方式執行大部分垃圾回收工作,以縮短垃圾回收的暫停時間。

适用于那些響應時間優先于吞吐量的應用, 因為該收集器雖然最小化了暫停時間(指使用者線程與垃圾收集線程同時執行,但不一定是并行的,可能會交替進行), 但是會降低應用程式的性能

  • CMS收集器(Concurrent Mark Sweep Collector)

并發标記清除收集器, 适用于那些更願意縮短垃圾回收暫停時間并且負擔的起與垃圾回收共享處理器資源的應用

  • G1收集器(Garbage-First Garbage Collector)

适用于大容量記憶體的多核伺服器, 可以在滿足垃圾回收暫停時間目标的同時, 以最大可能性實作高吞吐量( JDK1.7之後)

Tomcat:性能優化政策

三、Tomcat配置調優

  • 調整tomcat線程池
Tomcat:性能優化政策
  • 調整tomcat的連接配接器

調整tomcat/conf/server.xml 中關于連結器的配置可以提升應用伺服器的性能

Tomcat:性能優化政策
  • 禁用 AJP 連接配接器
Tomcat:性能優化政策
  • 調整 IO 模式

Tomcat8之前的版本預設使用BIO(阻塞式IO),對于每一個請求都要建立一個線程來處理,不适合高并發;Tomcat8以後的版本預設使用NIO模式(非阻塞式IO)

Tomcat:性能優化政策

當Tomcat并發性能有較高要求或者出現瓶頸時,我們可以嘗試使用APR模式,APR(Apache PortableRuntime)是從作業系統級别解決異步IO問題,使用時需要在作業系統上安裝APR和Native(因為APR原理是使用使用JNI技術調用作業系統底層的IO接口)

  • 動靜分離

可以使用Nginx+Tomcat相結合的部署方案,Nginx負責靜态資源通路,Tomcat負責Jsp等動态資源通路處理(因為Tomcat不擅⻓處理靜态資源)

繼續閱讀