日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Tomcat优化之配置线程池

發布時間:2024/2/28 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Tomcat优化之配置线程池 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載自https://bbs.aliyun.com/read/307481.html?spm=a2c4e.11155515.0.0.ixL9fh

簡介?
?
線程池作為提高程序處理數據能力的一種方案,應用非常廣泛。大量的服務都或多或少的使用到了線程池技術,不管是用Java還是C++實現,線程池都有如下的特點:線程池一般有三個重要參數:

  • 最大線程數。在程序運行的任何時候,線程數總數都不會超過這個數。如果請求數量超過最大數時,則會等待其他線程結束后再處理。
  • 最大共享線程數,即最大空閑線程數。如果當前的空閑線程數超過該值,則多余的線程會被殺掉。
  • 最小共享線程數,即最小空閑線程數。如果當前的空閑數小于該值,則一次性創建這個數量的空閑線程,所以它本身也是一個創建線程的步長。 線程池有兩個概念:
  • Worker線程。工作線程主要是運行執行代碼,有兩種狀態:空閑狀態和運行狀態。在空閑狀態時,類似“休眠”,等待任務;處理運行狀態時,表示正在運行任務(Runnable)。
  • 輔助線程。主要負責監控線程池的狀態:空閑線程是否超過最大空閑線程數或者小于最小空閑線程數等。如果不滿足要求,就調整之。
  • ?
    來 看一下線程池究竟是怎么一回事?其實線程池的原理很簡單,類似于操作系統中的緩沖區的概念,它的流程如下:先啟動若干數量的線程,并讓這些線程都處于睡眠 狀態,當客戶端有一個新請求時,就會喚醒線程池中的某一個睡眠線程,讓它來處理客戶端的這個請求,當處理完這個請求后,線程又處于睡眠狀態。可能你也許會 問:為什么要搞得這么麻煩,如果每當客戶端有新的請求時,我就創建一個新的線程不就完了?這也許是個不錯的方法,因為它能使得你編寫代碼相對容易一些,但 你卻忽略了一個重要的問題??性能!就拿我所在的單位來說,我的單位是一個省級數據大集中的銀行網絡中心,高峰期每秒的客戶端請求并發數超過100,如果 為每個客戶端請求創建一個新線程的話,那耗費的CPU時間和內存將是驚人的,如果采用一個擁有200個線程的線程池,那將會節約大量的的系統資源,使得更 多的CPU時間和內存用來處理實際的商業應用,而不是頻繁的線程創建與銷毀。 ?
    ?
    配置 ?
    ?
    ?
    使用線程池,用較少的線程處理較多的訪問,可以提高tomcat處理請求的能力。使用方式: ?
    首先。打開/conf/server.xml,增加 ?
    復制代碼
  • <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
  • ????????maxThreads="500" minSpareThreads="20" maxIdleTime="60000" prestartminSpareThreads="true" maxQueueSize="100" />
  • ?
    ?
    name: 線程名稱namePrefix: 線程前綴maxThreads : 最大并發連接數,不配置時默認200,一般建議設置500~ 800 ,要根據己的硬件設施條件和實際業務需求而定。 ?
    minSpareThreads:Tomcat啟動初始化的線程數,默認值25prestartminSpareThreads:在tomcat初始化的時候就初始化minSpareThreads的值, 不設置true時minSpareThreadsmaxQueueSize: 最大的等待隊列數,超過則拒絕請求minSpareThreads:線程最大空閑時間60秒。 ?
    然后,修改<connector ...="" style="box-sizing: border-box;">節點,增加executor屬性,如: ?
    ?
    ?
    復制代碼
  • <Connector port="8080" protocol="org.apache.coyote.http11.Http11Nio2Protocol"??
  • ????????connectionTimeout="20000"??
  • ????????redirectPort="8443"??
  • ????????executor="tomcatThreadPool"??
  • ????????enableLookups="false"??
  • ????????acceptCount="100"??
  • ????????maxPostSize="10485760"??
  • ????????compression="on"??
  • ????????disableUploadTimeout="true"??
  • ????????compressionMinSize="2048"??
  • ????????noCompressionUserAgents="gozilla, traviata"??
  • ????????acceptorThreadCount="2"??
  • ????????compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript"??
  • ????????URIEncoding="utf-8"/>
  • ?
    ?
    ?
    port:連接端口。protocol:連接器使用的傳輸方式。 ?
    Tomcat 8 設置 nio2 更好:org.apache.coyote.http11.Http11Nio2Protocolprotocol, Tomcat 6、7 設置 nio 更好:org.apache.coyote.http11.Http11NioProtocol ?
    注:每個web客戶端請求對于服務器端來說就一個單獨的線程,客戶端的請求數量增多將會導致線程數就上去了,CPU就忙著 跟線程切換。 ?
    ?
    ?
    而NIO則是使用單線程(單個CPU)或者只使用少量的多線程(多CPU)來接受Socket,而由線程池來處理堵塞在pipe 或者隊 列里的請求.這樣的話,只要OS可以接受TCP的連接,web服務器就可以處理該請求,大大提高了web服務器的可伸縮性。 ?
    ?
    ?
    executor: 連接器使用的線程池名稱enableLookups:禁用DNS 查詢acceptCount:指定當所有可以使用的處理請求的線程數都被使用時,可以放到處理隊列中的請求數,超過這個數的請求將不予處理,默認設置 100 。maxPostSize:限制 以FORM URL 參數方式的POST請求的內容大小,單位字節,默認是 2097152(2兆),10485760 為 10M。 ?
    ?
    ?
    如果要禁用限制,則可以設置為 -1。acceptorThreadCount: 用于接收連接的線程的數量,默認值是1。一般這個指需要改動的時候是因為該服務器是一個多核CPU,如果是多核 CPU 一般配置為 2。 ?
    ?
    ?
    compression:傳輸時是壓縮。compressionMinSize:壓縮的大小noCompressionUserAgents:不啟用壓縮的瀏覽器 ?
    ?
    ?
    提示:壓縮會增加Tomcat負擔,最好采用Nginx + Tomcat 或者 Apache + Tomcat 方式,壓縮交由Nginx/Apache 去做。 ?
    ?
    ?
    Tomcat 的壓縮是在客戶端請求服務器對應資源后,從服務器端將資源文件壓縮,再輸出到客戶端,由客戶端的瀏覽器負責解壓縮并瀏覽。相對于普通的 瀏覽過程 HTML、CSS、Javascript和Text,它可以節省40% 左右的流量。更為重要的是,它可以對動態生成的,包括CGI、PHP、JSP、ASP、Servlet,SHTML等輸出的網頁也能進行壓縮,壓縮效率也很高。 ?

    總結

    以上是生活随笔為你收集整理的Tomcat优化之配置线程池的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。