Jetty調優參數


1、線程池(ThreadPool) 

ThreadPool的大致工作方式是:如果存在一個空閑線程,則讓它去執行請求處理。如果不存在且沒有達到設定的最大線程數,那么就新建一個Thread去執行請求處理。如果已經達到最大線程數,那么就將工作任務放到隊列里面排隊,等到有空閑線程時再執行任務。 



線程池線程資源大小確定了服務器的服務能力,默認大小不一定能滿足生產環境,線程分配方式決定了服務器的資源利用效率,jetty自帶的線程池QueuedThreadPool。注意之前的版本是:類【org.mortbay.thread.QueuedThreadPool】,后續的版本變為:【org.eclipse.jetty.util.thread.QueuedThreadPool】,類名稱沒變,包路徑改了。 

樣例配置如下: 

////////////////////////begin///////////////// 

   <Set name="ThreadPool"> 

      <!-- Default queued blocking threadpool --> 

      <New class="org.eclipse.jetty.util.thread.QueuedThreadPool"> 

        <Set name="minThreads">10</Set> 

        <Set name="maxThreads">200</Set> 

        <Set name="detailedDump">false</Set> 

      </New> 

</Set> 



////////////////////////end/////////////////// 

這個是默認配置,優化時可以調整最小線程數【minThreads】和最大線程數【maxThreads】。【detailedDump】表示是否記錄詳細的thread dump,默認不記錄。 

2、連接器(Connector) 



Connector主要分兩類,BIO模式和NIO模式。 



BIO模式的Connector有: 

ScoketConnector (HTTP) 



Ajp13SocketConnector (AJP) 



SslSocketConnector (SSL) 



(2)、NIO模式的Connector有: 
SelectChannelConnector (HTTP) 



SslSelectChannelConnector (SSL) 



Jetty中默認的Connector就是異步的,如下: 



/////////////////////begin////////////////// 

   <Call name="addConnector"> 

      <Arg> 

          <New class="org.eclipse.jetty.server.nio.SelectChannelConnector"> 

            <Set name="host"><Property name="jetty.host" /></Set> 

            <Set name="port"><Property name="jetty.port" default="8080"/></Set>  

            <Set name="maxIdleTime">3000</Set> 

            <Set name="acceptors">8</Set>   

            <Set name="statsOn">false</Set> 

            <Set name="confidentialPort">8443</Set> 

            <Set name="lowResourcesConnections">10000</Set> 

            <Set name="lowResourcesMaxIdleTime">1000</Set> 

            <Set name="acceptQueueSize">1000</Set> 

          </New> 

      </Arg> 

</Call> 



/////////////////////end//////////////////// 



注意,如果配置多個Connector的話,建議各個Connector共享同一個線程池,即需要在Connector中指定線程池的名稱,如: 

各參數的含義: 

host:jetty所在主機的IP或主機名; 
port:設置jetty的端口號; 
maxIdleTime:表示連接最大空閑時間,單位是ms,默認值300000這個值太大,典型值3000左右足夠; 
acceptors:接收線程數量,Acceptor的功能是接收客戶端連接然后分配個給ThreadPool處理,表示同時在監聽read事件的線程數,缺省值為2,對於NIO來說,建議值2*(處理器核數-1);或者小於等於2*處理器核數; 
acceptQueueSize:在OS發起拒絕連接之前,請求連接排隊的數量; 
statsOn:是否開啟統計功能,調優時建議關閉統計功能。 
confidentialPort:受信端口號; 
lowResourcesConnections:  連接數量達到該數值時,Jetty會認為服務器資源已被耗盡。只有NIO才有這個設置,表示連接空閑時的最大連接數,大於這個數將被shutdown,每個acceptor的連接數=(lowResourcesConnections+acceptor-1)/ acceptor。 
lowResourcesMaxIdleTime:表示可用線程稀少時或者當資源飽和時,連接最大等待時間,時間單位是毫秒,一般設置為<= maxIdleTime; 


3、處理器(Handler) 
Handler分為三類: 

內容輸出Handler 
該類Handler根據target輸出內容。如:ResourceHandler、ServletHandler、DefaultHandler等。這些類都是直接對Handler接口進行實現。 

裝飾模式Handler 
該類Handler可以選擇在交給另外一個Handler對象調用前或后來處理Request和Response。這些類都繼承自HandlerWrapper類。 

集合類Handler 
該類Handler的作用是講請求分發給其他Handler處理,分發策略由各自實現類決定。常用集合類Handler有HandlerCollection、HandlerList、ContextHandlerCollection。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM