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。
Jetty調優參數
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.