1. 程式人生 > >Tomcat(三)——Tomcat的Connector及執行緒池配置

Tomcat(三)——Tomcat的Connector及執行緒池配置

Connector引數配置

  • port,埠號。Tomcat預設埠號是8080。
  • address,配置Connector在監聽網路請求時監聽在哪一個地址上。在很多伺服器上,伺服器上的IP是不止一個的,會有很多,如果不配置address的話,預設會在所有的IP上監聽請求,有時由於安全上的原因是不被允許的。這時,通過address來指定僅僅監聽哪幾個地址。
  • protocol,協議。http1.1,預設的就行。
  • connectionTimeOut,客戶端連線超時時間,單位是毫秒。要發請求時,建立好連線後就是不發請求。這是要耗費伺服器資源的,因為有連線在掛著,伺服器端分配了執行緒在這裡對請求進行處理,如果不關閉連線,也不發請求,這個連線無法結束。如果大量的這種情況存在就會造成服務端資源耗盡。服務端需要配置這樣一個引數,來使得當一個連線上面沒有任何請求時,不要佔著坑。
  • acceptCount ,當系統繁忙時,所有的執行緒都在處理請求時,沒有空閒執行緒時,就要排隊了。acceptCount是用來配置排隊的長度的,就是這個佇列最大是多大,預設值是100。如果排隊的數超過了100,其餘的請求會被拒絕處理。這時connector就不會處理新的請求了。
  • maxConnections,是指Connector同時支援的最大連線數。對BIO Connector來說是執行緒池的最大值。當超過這個數值時,只會被接受不會被處理,必須等前面請求處理完了,有空閒執行緒了才會去處理。maxConnections=-1表示不限制最大連線數,但具體的連線數還會受限於其他資源。

執行緒池

  • 執行緒的建立和銷燬都是比較耗時的,如果來一個請求就建立一個執行緒,請求完成了響應再把執行緒銷燬掉,這樣對系統的效能損壞是比較大的。
  • 可以事先建立一定數量的執行緒放在那裡,用完之後在放回池裡,這樣減少了執行緒的建立以及銷燬過程。
  • 如在銀行辦理業務,銀行會開一個視窗(最小空閒執行緒數minSpareThreads)。來個3個顧客,只有一個執行緒, 後面兩個人排隊。可以再建立兩個執行緒,即再開兩個視窗,但視窗上限即最大執行緒數maxThreads 。如果有來了其他的顧客,就只能排隊了。
  • 3人的業務都處理完了,這時只留下一個執行緒就好了。對於這種執行緒可變的叫做彈性執行緒池。最小執行緒數保證當有請求來時儘快的進行處理,最大執行緒數是一個限制,是由於機器的效能等方面的原因造成的。開多了執行緒,他們之間的競爭很多也會影響效能
  • 最小空閒執行緒數:minSpareThreads
  • 最大執行緒數:maxThreads

修改Connector的引數配置

預設的Connector配置

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
  • 預設的Connector配置,它的埠號是8080,協議是HTTP/1.1,連線超時是20秒,redirectPort是https的埠。
  • 在與Connection的平級節點上,也就是Service節點下,配置一個執行緒池。並在Connection中使用這個執行緒池。
  • 並且修改Connector的其他配置
<Service name="Catalina">
    <Executor name="myThreadPool" namePrefix="catalina-exec-"
        maxThreads="150" minSpareThreads="10"/>

    <Connector port="8181" protocol="HTTP/1.1"
               connectionTimeout="200000"
               executor = "myThreadPool"
               redirectPort="8443" URIEncoding="UTF-8" />
</Service>                            
  • 修改了Connector的埠號,超時時間,為這個Connector配置了執行緒池。
  • 啟動Tomcat,訪問之前Restaurant的地址,埠號也要改為8181。
  • 可以把執行緒池中的最小空閒執行緒數和最大執行緒數都修改成1,直觀的感受一下執行緒池的作用。
    • 通過telnet啟動本地8181埠,向Restaurant傳送一次請求,讓請求佔著,不結束。
    • 再開啟另一個終端,也使用telnet啟動本地8181埠,向Restaurant傳送一次請求,這裡敲擊回車,讓請求傳送,但由於執行緒池只開了一個連線,所以第一個請求沒有結束,第二個請求只能排隊等待。
    • 切換到第一個視窗,回車傳送請求,第一個請求處理完成,第二個請求也會跟著處理完成
    • telnet localhost 8181
    • GET /Restaurant/choose?size=small&spicy=none HTTP/1.1

總結執行緒池配置

  • 執行緒池配置項<Executor>
    • minSpareThreads
    • maxThreads
  • Connector配置執行緒池
    • 指定依賴的執行緒池配置
    • 直接指定執行緒池配置引數
      • 直接把minSpareThreads、maxThreads配置到Connector中
      • 這樣Connector就會使用自己的配置,但注意不要配置指定依賴的Executor
  • 如果既配置了執行緒池配置項Executor又在Connectoior指定了自己的執行緒池引數,Connector會使用Executor的配置
  • 直接配置Executor,多個Connector可以共享這個Executor的配置

相關推薦

Tomcat——Tomcat的Connector執行配置

Connector引數配置 port,埠號。Tomcat預設埠號是8080。 address,配置Connector在監聽網路請求時監聽在哪一個地址上。在很多伺服器上,伺服器上的IP是不止一個的,會

演算法小題:兩執行交替輸出1~99

一、回顧Thread的常用法方法 1.start():啟動執行緒並執行相應的run()方法 2.run():子執行緒要執行的程式碼放入run()方法中 3.currentThread():靜態的,調取當前的執行緒 4.getName():獲取此執行緒的名字 5.se

併發集合使用阻塞執行安全的列表

宣告:本文是《 Java 7 Concurrency Cookbook 》的第六章,作者: Javier Fernández González  譯者:許巧輝 使用阻塞執行緒安全的列表 列表(list)是最基本的集合。一個列表中的元素數量是不確定的,並且你可以新增、讀取和刪除任意位置上的元素。

併發工具類控制併發執行數的Semaphore

簡介 Semaphore(訊號量)是用來控制同時訪問特定資源的執行緒數量,它通過協調各個執行緒,以保證合理的使用公共資源。很多年以來,我都覺得從字面上很難理解Semaphore所表達的含義,只能把它比作是控制流量的紅綠燈,比如XX馬路要限制流量,只允許同時有一百輛車在這條路上行使,其他的都必須

java基礎:多執行

1.程序、執行緒 程序:正在執行的程式 執行緒:程序中負責程式執行的執行單元 即:程序的範圍>執行緒的範圍。 且:一個程序可以有多個執行緒。 2.多執行緒的意義:多部分程式碼同時執行,提高CPU使用效率 3.多執行緒的特點:CPU的隨機性 4.建立執行緒的兩種方法

TensorFlow之多執行

本博文參考TensorFlow實戰Google深度學習框架(鄭澤宇,顧思宇),僅用作學習 一、TFRecord輸入資料格式 TFRecord是tensorflow中儲存資料的統一格式。可以統一不同的原始資料格式,並更加有效地管理不同的屬性。TFRecord檔案中的資料都是通

併發工具類控制併發執行的數量 Semphore

前言   JDK中為了處理執行緒之間的同步問題,除了提供鎖機制之外,還提供了幾個非常有用的併發工具類:CountDownLatch、CyclicBarrier、Semphore、Exchanger、Phaser;   CountDownLatch、Cycl

C#淺談執行:獨立執行的作用IO執行

在上一篇文章中,我們簡單討論了執行緒池的作用,以及CLR執行緒池的一些特性。不過關於執行緒池的基本概念還沒有結束,這次我們再來補充一些必要的資訊,有助於我們在程式中選擇合適的使用方式。 獨立執行緒池 上次我們討論到,在一個.NET應用程式中會有一個CLR執行緒池,可以使用Th

【Java】多執行系列之阻塞執行的多種方法

前言: 在某些應用場景下,我們可能需要等待某個執行緒執行完畢,然後才能進行後續的操作。也就是說,主執行緒需要等待子執行緒都執行完畢才能執行後續的任務。 例如,當你在計算利用多執行緒執行幾個比較耗時的任務的時候,主執行緒需要利用這幾個執行緒計算的結果,才能進行後

輕鬆學會多執行——如何確定執行

一般情況下,在網際網路程式設計中,我們會使用多執行緒來搶奪網路資源。那麼,執行緒數量我們如何來確定呢? 我們都知道,執行緒數量和CPU核數有關。所以有人建議說:執行緒數為核數的兩倍最好。 其實只要這些執行緒不頻繁切換、競爭資源的話。想要最優效能,還是根據具體專案慢慢除錯。

Java核心深入理解執行ThreadPool

本文你將獲得以下資訊: 執行緒池原始碼解讀 執行緒池執行流程分析 帶返回值的執行緒池實現 延遲執行緒池實現 為了方便讀者理解,本文會由淺入深,先從執行緒池的使用開始再延伸到原始碼解讀和原始碼分析等高階內容,讀者可根據自己的情況自主選擇閱讀順序和需要了解的章節。 一、執行緒池優點

Java Executor併發框架十三Executor框架執行關於異常的處理

關於為什麼要寫這篇文章,是因為我對Executor執行緒池的兩種提交任務的方式的不同產生的好奇,我們知道,可以通過execute和submit兩種方式往執行緒池提交我們的任務,但是這兩種任務提交的方式到底有什麼區別呢?通過execute方式提交的任務,我們不能獲取任務執行後的返回值,而通過submit提交

Java多執行複習與鞏固--任務排程執行ScheduledThreadPoolExecutor

1. 為什麼要使用ScheduledThreadPoolExecutor 在《Java多執行緒複習與鞏固(二)–執行緒相關工具類Timer和ThreadLocal的使用》提到過,Timer可以實現指定延時排程任務,還可以實現任務的週期性執行。但是Tim

JBoss調優web伺服器執行調優

原文: http://www.mastertheboss.com/jboss-server/jboss-performance/jboss-as-7-performance-tuning?showall=&start=3 Tuning Web server th

Java面試專題-多執行2- 鎖和執行

​   開篇介紹 大家好,公眾號【Java極客思維】近期會整理一些Java高頻面試題分享給小夥伴,也希望看到的小夥伴在找工作過程中能夠用得到!本章節主要針對Java一些多執行緒高頻面試題進行分享。   Q1: 樂觀鎖 和 悲觀鎖 樂觀鎖: 樂觀鎖(Optimistic Locking)

ThreadPoolTaskExecutor多執行使用,執行配置

1.配置 ThreadPoolTaskExecutor bean <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"

Python基礎--- Python多執行介紹,開啟執行種方式,time模組,join,Daemon,Lock、Rlock,事件機制,Timer

一、多執行緒介紹 --------------------------------------------------------- 1.threading用於提供執行緒相關的操作,執行緒是應用程式中工作的最小單元。 2.python當前版本的多執行緒庫沒有實現優先順序、執行緒組,執

【隨堂筆記】unity中socket用法,伺服器端執行的使用

手機專案,最好不要使用執行緒,因為unity專門提供了協程,枝執行緒不能訪問主執行緒(ui) 手機使用執行緒,容易導致硬體出問題 執行緒測試程式碼 /// <summary> /// 執行緒的測試方法 /// </summary>

python3教程:程式碼執行環境你的第一段python程式碼

程式碼執行環境 我們安裝完Python後,可以使用ide或idle來執行程式。 關於ide我們之後會專門進行介紹,我們前期一般是使用idle來學習及執行程式碼。 在Windows上一般有兩個idle ,一個是cmd ,另一個則是python自帶的。 cmd的話,和上一節課程一樣,

Python爬蟲開發-續:快速執行爬蟲

0×00 簡介 本文算是填前面的一個坑,有朋友和我將我前面寫了這麼多,真正沒看到什麼特別突出的實戰,給了應對各種情況的方案。多執行緒那裡講的也是坑。忽然想想,說的也對,為讀者考慮我確實應該把多執行緒這裡的坑補完。 然後決定再以一篇文章的形式講一下這個輕型執行緒池爬蟲,同時也為大家提供一個思路