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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Tomcat优化之配置线程池

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

轉(zhuǎn)載自https://bbs.aliyun.com/read/307481.html?spm=a2c4e.11155515.0.0.ixL9fh

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

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

    總結(jié)

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

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。