欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Tomcat調(diào)優(yōu)的方法

本篇內(nèi)容主要講解“Tomcat調(diào)優(yōu)的方法”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Tomcat調(diào)優(yōu)的方法”吧!

成都網(wǎng)站建設、做網(wǎng)站的關注點不是能為您做些什么網(wǎng)站,而是怎么做網(wǎng)站,有沒有做好網(wǎng)站,給創(chuàng)新互聯(lián)一個展示的機會來證明自己,這并不會花費您太多時間,或許會給您帶來新的靈感和驚喜。面向用戶友好,注重用戶體驗,一切以用戶為中心。

Tomcat調(diào)優(yōu)參數(shù)

主要調(diào)優(yōu)參數(shù)

在做Tomcat的調(diào)優(yōu)時,最重要是就是Connector(連接器)的調(diào)優(yōu)了(少數(shù)情況下,也可能會配置Executor)

下面貼出一段server.xml中的配置:

123456789101112
<Executor name="tomcatThreadPool"  namePrefix="catalina-exec-"  maxThreads="150"  minSpareThreads="4"/><Connector port="8080"  protocol="HTTP/1.1"  connectionTimeout="20000"  redirectPort="8443"  executor="tomcatThreadPool"/>  一個文件中可以有多個Connector以及多個Executor。

其中:

  • Connector:負責接收客戶端的請求以及向客戶端回送響應的消息

  • Executor:指定線程池,從而在多個Connector(主要)及其他組件之間共享

TIPS

對執(zhí)行原理感興趣的童鞋可以參閱下這篇文章,寫得相當棒:https://blog.csdn.net/zzzgd_666/article/details/88740198 。由于本文重點在于“調(diào)優(yōu)”,所以就不贅述了。

Connector常用屬性

Connector負責接收客戶端的請求以及向客戶端回送響應的消息。Tomcat 9.0有三類Connector:

  • HTTP/1.1(HTTP Connector)

  • HTTP/2(HTTP2 Upgrade Protocol)(Tomcat 8.5引入)

  • AJP(AJP Connector)

但不管哪種Connector,工作過程都是類似的:

  • 每個請求都需要1個線程去處理

  • 如果接收到的并發(fā)請求 > 當前處理請求的線程所能處理的數(shù)量,則創(chuàng)建其他線程去處理,直到達到maxThreads為止

  • 如果線程數(shù)達到maxThreads設置的值后,依然接收到更多的請求,那么請求將會堆積在Connector創(chuàng)建的server socket中(即accept隊列),直到達到acceptCount的值為止。如果堆積的請求數(shù)目達到acceptCount后,依然受到更多的請求,那么直接返回connection refused

常用屬性如下:

TIPS

  • 加粗的表示Tomcat調(diào)優(yōu)常用的參數(shù)

  • 這里只列出了Connector常用屬性,要想閱讀完整屬性,可使用如下方式:

    • 方式一、訪問 http://tomcat.apache.org/tomcat-9.0-doc/config/http.html ,將9.0修改為你的Tomcat版本即可,比如想看Tomcat 8的文檔,可將9.0改為8.0;

    • 方式二、下載Tomcat并啟動,訪問 /docs/config/http.html 路徑即可。例如:http://localhost:8080/docs/config/http.html

  • minSpareThreads:始終保持運行狀態(tài)的線程數(shù),默認值10。即便超過了最大空閑時間(maxIdleTime),也不會被回收。如果配置了Executor,將忽略此屬性

  • maxThreads:Connector創(chuàng)建來處理請求的最大線程數(shù),此參數(shù)決定了可以同時處理的請求的最大數(shù)量,默認200。如果配置了Executor,將忽略此屬性。超過則放入請求隊列中進行排隊。

  • maxConnections:Tomcat在任意時間接收和處理的最大連接數(shù)。當連接數(shù)達到maxConnections時,仍可基于acceptCount的配置接受連接,但并不會處理,直到Tomcat接收的連接數(shù)小于maxConnections。

    默認值與Connector使用的協(xié)議有關:

    • NIO的默認值是10000

    • APR的默認值是8192

    • BIO的默認值為maxThreads(如果配置了Executor,則默認值是Executor的maxThreads)

    • 在Windows下,APR/native的maxConnections值會自動調(diào)整為設置值以下最大的1024的整數(shù)倍;如設置為2000,則最大值實際是1024。如果設置為-1,則連接數(shù)不受限制。

  • connectionTimeout:網(wǎng)絡連接超時時間,單位毫秒,默認60000。設為0表示永不超時,一般不建議。除非將disableUploadTimeout設置為false,否則讀取request body時也會使用該超時。

  • acceptCount:當最大線程數(shù)(maxThreads)被使用完時,可以放入請求隊列的隊列長度,默認100。一旦隊列滿了,就會返回connection refused。因此,如果設置過大,后面進入的請求等待時間會很長;如果設置過小,后面進入的請求立馬返回connection refused。一般可設置成和maxThreads相同,但具體還需根據(jù)自己的應用實際訪問峰值和平均值來權衡。

  • enableLookups:是否啟用DNS查找功能。如果設為true,會用request.getRemoteHost()執(zhí)行DNS lookup,從而返回遠程客戶端的主機名。設為false則跳過DNS lookup,并以字符串形式返回IP地址,從而提高性能,默認false,生產(chǎn)環(huán)境建議保持關閉。

  • compression:是否開啟GZIP壓縮。取值off(禁用)、on(打開,壓縮文本數(shù)據(jù)),force(強制壓縮所有格式)、數(shù)字(表示數(shù)據(jù)量達到該值就GZIP傳輸)。

  • port:指定Tomcat監(jiān)聽的端口

  • protocol:為Connector設置使用什么協(xié)議處理入口流量,默認值 HTTP/1.1 ,使用此值的話,對于Tomcat 8及更高版本,會自動根據(jù)當前情況,使用基于NIOConnector或基于APR的Connector;對Tomcat 7及更低版本會自動根據(jù)情況使用基于BIO的Connector或基于APR的Connector。如果不想自動切換,也可人工指定協(xié)議(從Tomcat 8開始,一般無需人工設置):

    1234567891011
    // BIO,這種模式下,使用傳統(tǒng)的I/O操作(即java.io包及其子包),性能較差。protocol="org.apache.coyote.http11.Http11Protocol"// NIO,使用NIO操作(即java.nio包及其子包),比傳統(tǒng)I/O擁有更好的并發(fā)性能protocol="org.apache.coyote.http11.Http11NioProtocol"// NIO2,使用NIO2操作(NIO2是JDK 7引入的特性),Tomcat 8引入protocol="org.apache.coyote.http11.Http11Nio2Protocol"// APR,使用APR操作。APR即Apache Portable Runtime,這是一個Apache HTTP服務器的支持庫。你可以認為:此模式下,Tomcat將以JNI的形式調(diào)用 Apache HTTP服務器的核心動態(tài)鏈接庫來處理文件讀取或網(wǎng)絡傳輸操作,從而提高Tomcat對靜態(tài)文件的處理性能protocol="org.apache.coyote.http11.Http11AprProtocol"

    下表展示了不同Connector之間的區(qū)別:

    -Java Nio Connector NIOJava Nio2 Connector NIO2APR/native Connector APR
    ClassnameHttp11NioProtocolHttp11Nio2ProtocolHttp11AprProtocol
    Tomcat Versionsince 6.0.xsince 8.0.xsince 5.5.x
    Support PollingYESYESYES
    Polling SizemaxConnectionsmaxConnectionsmaxConnections
    Read Request HeadersNon BlockingNon BlockingNon Blocking
    Read Request BodyBlockingBlockingBlocking
    Write Response Headers and BodyBlockingBlockingBlocking
    Wait for next RequestNon BlockingNon BlockingNon Blocking
    SSL SupportJava SSL or OpenSSLJava SSL or OpenSSLOpenSSL
    SSL HandshakeNon blockingNon blockingBlocking
    Max ConnectionsmaxConnectionsmaxConnectionsmaxConnections

    TIPS

    表格來自 http://tomcat.apache.org/tomcat-9.0-doc/config/http.html#Connector_Comparison

  • connectionUploadTimeout:指定上傳時的超時。disableUploadTimeout需設置成false才有效

  • disableUploadTimeout:設置為true,上傳超時使用connectionTimeout,設置成false,上傳超時使用connectionUploadTimeout。默認true

  • redirectPort:表示安全通信(https)轉(zhuǎn)發(fā)端口

  • executor:指定executor名稱。如果設置了此屬性,則Connector將使用該Executor執(zhí)行程序。如果不設置executor屬性,則Connector將使用內(nèi)部私有的Executor來提供線程池。該屬性主要用來實現(xiàn)在多個Connector及其他組件之間共享線程池。

    TIPS

    壓縮帶來的好處是減少帶寬,但缺點在于增加了服務器的CPU開銷。就筆者個人的經(jīng)驗,很少直接用Tomcat的GZIP功能,更多使用NGINX的GZIP。

maxConnections、maxThreads、acceptCount之間的關系

我們把Tomcat想象成是一個餐廳,請求就像是去就餐的顧客。這個餐廳非常火爆,當處理不過來的時候,就會排號。

  • acceptCount

    可以類比為餐廳的排號處能夠容納排號的最大數(shù)量,排號的數(shù)量不是無限制的,一旦達到上限,就說已經(jīng)客滿(直接返回connection refused)

  • maxConnections
    可以類比為餐廳的大堂的餐桌數(shù)量,也就是可以就餐的桌數(shù)。

    • 如果當前連接數(shù)尚未達到maxConnection,說明還有空閑的餐桌,直接上桌即可。

    • 如果所有餐桌都已經(jīng)坐滿,但是排號人數(shù)尚未達到 acceptCount,那么就排個號,等著叫號(此時,盡管還能接受請求,但是不會處理你的請求,除非有桌子空閑了)

    • 如果取號的人數(shù)已經(jīng)達到acceptCount,則取號失敗,直接拒絕服務(直接返回connection refused)

  • maxThreads
    可以類比為廚師的個數(shù)。廚師一開始只有10個(最少minSpareThreads個),如果發(fā)現(xiàn)忙不過來的時候,就會增加幾個廚師,一致增加到maxThreads個廚師。如果還是不夠,那就只能慢慢等著上菜了。這就像是你去吃飯,有時候上一道菜都吃完了,下一道菜還沒有上。只不過,在計算機的世界,廚師的數(shù)量也不能無止境地增加下去。因為線程數(shù)目只要超過CPU核心數(shù),就會存在CPU切換的開銷,線程數(shù)越多,切換開銷越大,所以說maxThreads設置也不能太大。

Executor常用屬性

定義線程池,從而在多個Connector(主要)及其他組件之間共享。Executor必須實現(xiàn)org.apache.catalina.Executor接口。

常用屬性如下:

TIPS

這里只列出了Connector常用屬性,,要想閱讀完整屬性,可使用如下方式:

  • 方式一、訪問 http://tomcat.apache.org/tomcat-9.0-doc/config/executor.html ,將9.0修改為你的Tomcat版本即可,比如想看Tomcat 8的文檔,可將9.0改為8.0

  • 方式二、下載Tomcat并啟動,訪問 /docs/config/executor.html 路徑即可。例如:http://localhost:8080/docs/config/executor.html

  • className:Executor的實現(xiàn)類。必須實現(xiàn)org.apache.catalina.Executor接口。默認值為org.apache.catalina.core.StandardThreadExecutor

  • name:Executor名稱,必填且必須唯一

  • threadPriority:指定線程的優(yōu)先級,默認5(Thread.NORM_PRIORITY)

  • daemon:是否為守護線程,默認true

  • namePrefix:指定Executor創(chuàng)建的線程的名稱前綴。線程名稱格式為namePrefix+threadNumber

  • maxThreads:活動線程的最大數(shù)量,默認200

  • minSpareThreads:使用保持活動狀態(tài)的最小線程數(shù)(空閑和活動),默認25

  • maxIdleTime:線程最大空閑時間,單位毫秒,默認60000(1分鐘)。達到該時間后就會把該線程關閉(當然如果當前活動線程數(shù) < minSpareThreads不會關閉)

  • maxQueueSize:拒絕執(zhí)行之前可以排隊等待執(zhí)行的任務數(shù)量,默認Integer.MAX_VALUE

  • prestartminSpareThreads:在啟動Executor時是否就啟動minSpareThreads個線程,默認false

  • threadRenewalDelay:如果配置了ThreadLocalLeakPreventionListener,它將會通知Executor有關上下文停止的信息。一旦上下文停止后,線程池中的線程將會被更新。為了避免同時更新線程,可用此屬性設置更新的延遲。默認1000,單位毫秒,如果設成負數(shù),則線程不會被更新。

其他調(diào)優(yōu)參數(shù)

Host

Host表示虛擬主機。

server.xml

12
<Host name="localhost" autoDeploy="true"></Host>

這里只列出了Host的調(diào)優(yōu)屬性,,要想閱讀完整屬性,可使用如下方式:

  • 方式一、訪問 http://tomcat.apache.org/tomcat-9.0-doc/config/host.html ,將9.0修改為你的Tomcat版本即可,比如想看Tomcat 8的文檔,可將9.0改為8.0

  • 方式二、下載Tomcat并啟動,訪問 /docs/config/host.html 路徑即可。例如:http://localhost:8080/docs/config/host.html

  • autoDeploy:是否要讓Tomcat周期性檢查新的或更新了的Web應用程序。如果設為true,則Tomcat會定期檢查appBase和xmlBase目錄,并自動部署。默認true。由于autoDeploy=true時,會啟用一個定時任務,如果沒有“自動部署”的需求,可將其設為false。

Spring Boot/Spring Cloud項目支持的調(diào)優(yōu)參數(shù)

12345678910111213141516171819202122
server:  # 等價于Connector.connectionTimeout  connection-timeout: 60s  tomcat:    # 等價于Connector.acceptCount    accept-count: 100    # 等價于Connector.maxConnections    max-connections: 10000    # 等價于Connector.maxThreads    max-threads: 200    # 等價于Connector.minSpareThreads    min-spare-threads: 10  # TIPS:壓縮帶來的好處是減少帶寬,但缺點在于增加了服務器的CPU開銷。就筆者個人的經(jīng)驗,很少直接用Tomcat的GZIP功能,更多使用NGINX的GZIP。  compression:    # 是否開啟GZIP,默認關閉    enabled: false    # 執(zhí)行壓縮所需的最小響應大小,默認2KB    min-response-size: 2KB    # 想要GZIP的格式,默認"text/html", "text/xml", "text/plain","text/css", "text/javascript", "application/javascript", "application/json","application/xml"    mime-types: "text/html", "text/xml"

其他調(diào)優(yōu)

Tomcat Session調(diào)優(yōu)

一、JSP與Session

如果使用JSP的話,如果業(yè)務允許,考慮考慮加上以下內(nèi)容:

1
<%@ page session="false" %>

高并發(fā)場景下,可能會導致內(nèi)存溢出。

拓展閱讀

一個內(nèi)存溢出的問題定位過程:https://blog.csdn.net/zhangm3256/article/details/83197756

二、為Session設置合理的超時

超時時間不宜過長,否則也可能會造成內(nèi)存上的壓力。

  • 對于傳統(tǒng)Tomcat項目,只需在應用的 web.xml 中添加如下內(nèi)容:

    1234
    <!-- 配置Session失效時間,單位分鐘 -->  <session-config>          <session-timeout>30</session-timeout>  </session-config>
  • 對于Spring Boot項目,通過如下配置設置Session即可。

    1234
    server:  servlet:    session:      timeout: 30m

到此,相信大家對“Tomcat調(diào)優(yōu)的方法”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關內(nèi)容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!

文章名稱:Tomcat調(diào)優(yōu)的方法
文章來源:http://www.chinadenli.net/article46/iiigeg.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供關鍵詞優(yōu)化網(wǎng)站建設動態(tài)網(wǎng)站網(wǎng)站排名定制網(wǎng)站App開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設網(wǎng)站維護公司