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。 

https://www.cnblogs.com/bdicaprio/articles/9835586.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章