一、Tomcat線程模型
1. BIO
2. NIO
同步非阻塞I/O操作。是java SE 1.4及后續版本提供的一種新的I/O操作方式(即java.nio包及其子包)。是一個基於緩沖區、並能 提供非阻塞I/O操作的Java API,它擁有比傳統I/O操作(bio)更好的並發運行性能。
NIO中Connector中比BIO多了一個Poller:主要用來輪詢事件列表中的事件,判斷連接是否可讀可寫。然后生成任務定義器,放入Executor線程

一群人去銀行辦理服務,先填表,不去櫃台。有一個人專門輪詢看是否有人填好了。
3. ARP
簡單理解,就是利用JNI從操作系統級別解決異步IO問題,大幅度的提高服務器的處理和響應性能,也是Tomcat運行高並發應用的首選模式。
4. AIO
異步非阻塞,使用於連接數目多且連接比較長(重操作)的架構,比如相冊服務器,充分 調用OS參與並發操作,編程比較復雜,JDK7開始支持。tomcat8.0后支持。
一群人去辦理,自己填單子,填好了自己去櫃台,沒有專門的人去詢問。

配置方法:在tomcat conf 下找到server.xml 在<Connector port="8080" protocol="HTTP/1.1"/>標簽中配置
BIO: protocol =" org.apache.coyote.http11.Http11Protocol" NIO: protocol ="org.apache.coyote.http11.Http11NioProtocol"
AIO: protocol ="org.apache.coyote.http11.Http11Nio2Protocol"
APR: protocol ="org.apache.coyote.http11.Http11AprProtocol"
二、Tomcat本身如何調優,涉及哪些參數
1. 架構/結構優化
動靜分離,所謂動靜分離就是將所有的靜態資源的請求響應處理放在一個獨立的服務器上,比如nginx(目前使用最 多的),tomcat只負責jsp和servlet的加載和處理。這樣就能在一定程度上降低tomcat的壓力。
2. 線程模型選擇(IO優化)
線程模型在前面剛剛講過,我們要根據自己的實際情況選擇線程模型。這里再次強調一下,tomcat6默認就使用的BIO,而且也只有BIO。 tomcat7和tomcat8都開始支持APR模式,但是觀察源碼就會發現,tomcat7在沒有APR配置的情況下會選擇BIO。tomcat8在沒有檢測到APR配置的情況下會選擇NIO。BIO方式適用於連接數目比較小且固定的架構,這種方式對服務器資源要求比較高,並發局限於應用中。 NIO是一個基於緩沖區、並能提供非阻塞I/O操作的Java API。適用於連接數目多且連接比較短(輕操作)的架構。 AIO(NIO2)方式使用於連接數目多且連接比較長(重操作)的架構,充分調用OS參與並發操作,編程比較復雜tomcat8
開始支持。
APR利用JNI調用本地API,大幅度提高了tomcat的IO性能,是tomcat的“大殺器”,但是如果要使用APR就要安裝對應 的組件。
3. 並發優化(線程優化)
開啟tomcat線程池,並且調優:

maxThreads:調整最大線程數量
minSpareThreads: 初始最小線程數量
4. Connector本身調優:

enableLookups="false" 關閉dns解析,減少性能損耗
minProcessors 服務器啟動時創建的最少線程數
maxProcessors 最大可以創建的線程數
acceptCount="1000" 線程池中的線程都被占用,允許放到隊列中的請求數
其他優化: 禁用AJP連接器,使用Nginx+tomcat的架構,所以用不着AJP協議,所以把AJP連接器禁用
![]()
