官方文件
配置檔案conf/server.xml
redirectport="8443" />沒有指定executor,則使用internal executor,使用的是jdk的執行緒池。本文討論internal executor。
maxthreads– 預設200,最大執行緒數,為執行緒池最大大小(threadpoolexecutor的maximumpoolsize)
maxconnections– 最大連線數,預設為maxthreads
acceptcount– 預設100,監聽socket的 backlog。
minsparethreads– 預設min(10,maxthreads) ,等同於threadpoolexecutor的corepoolsize
maxkeepaliverequests– 預設100,一條長連線服務的http請求最大數目(超過了關閉之),-1表示不受數目影響。
connectiontimeout– 預設60000ms,accept乙個連線後,等uri的最長時間。
keepalivetimeout– 預設為connectiontimeout,乙個連線等待下乙個http請求到來的最長時間(過期關閉該連線)
**為:jioendpoint$acceptor.run\
執行緒名為:http-bio-監聽埠-acceptor-0
關鍵邏輯
public
void
run()
}
注:執行緒池使用的隊列為taskqueue extends linkedblockingqueue,其過載了offer方法。所以執行緒池的行為與jdk裡的稍有不同:連線數小於minsparethreads,來乙個連線建個執行緒;minsparethreads<=連線數分析:accept了maxconnections個連線後,1. 如果有新連線過來,則進入監聽套接字的backlog; 2.如果maxconnections>maxthreads,那麼maxconnections-maxthreads個連線進入執行緒池的佇列裡。
分析:nginx反向**到tomcat時,出現過這麼個情況:nginx部分日誌顯示上游響應時間很長,但是tomcat access log顯示處理時間都很短,這是為什麼呢? 乙個可能的原因是socket連線數滿了(並且每個長連線服務100個http後關閉,才處理新連線),新連線進入backlog,nginx的時間表現為backlog呆的時間+執行緒池佇列呆的時間+處理時間即accesslog裡的時間,而tomcat access日誌裡的時間為請求接收直到響應傳送完畢的時間。
conf/server.xml檔案裡,
"org.apache.catalina.valves.accesslogvalve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h
%l%u
%t "%r" %s
%b%d" />
%d為毫秒,即為access log裡的時間
執行緒池在在abstractendpoint中建立。
abstractendpoint
|jioendpoint
工作執行緒**:jioendpoint$socketprocessor.run() \
執行緒名:http-bio-埠號-exec-
關鍵邏輯
public
void
run() finally
}
從單個執行緒來看:服務乙個http請求後,將socket放到執行緒池,自己再去任務佇列裡取任務。 這種方式的好處是 連線數多於執行緒數時,所有連線都公平的輪詢得到處理;缺點是socket任務不斷的入隊出隊在頻率極高下也會是個瓶勁。
conf/server.xml檔案裡
port="8005"
shutdown="shutdown">
server>
接收shutdown 之類的命令 Tomcat6和Tomcat7配置SSL通訊的比較
在專案開發過程中,嚐嚐會遇到tomcat需要ssl通訊的需求。尤其是在需要安全web應用時,需要https協議的通訊。由於tomcat預設情況下沒有提供ssl通訊設定,因此必須明白如何在tomcat下配置ssl。更糟糕的是,tomcat的不同版本,其ssl配置有所不同。所以,本文將講述如何在tomc...
Tomcat7配置雙向SSL
根證書 1.建立ca工作目錄 mkdir ca cd ca 2.生成ca私鑰 openssl genrsa out ca key.pem 1024 3.生成待簽名證書 openssl req new out ca req.csr key ca key.pem 即為ca根證書,可將其下發到客戶端,匯入...
tomcat7 配置專案路徑
在 tomcat home conf catalina localhost 目錄下新增xml配置資訊即可讓tomcat自動找到專案存放位置。如在e projects web practice 下有乙個myeclipse下建立的名為basestationinfo的web專案。配置步驟 在 tomcat...