Tomcat連線效能調優

2021-09-02 03:11:35 字數 1531 閱讀 7885

tomcat是一款非常流行的apache的開源web伺服器。

今天我們主要來**tomcat下面的server.xml中的聯結器配置對交易系統的效能影響。

一種交易需要通過客戶端c來遠端hessian來同步呼叫服務端s的服務a來完成整筆交易,客戶端c設定的交易超時時間為60秒(比較簡單但不精準的做法是將客戶端的hessian的連線超時時間和接收超時時間都設定成60秒);高峰期同一時刻到達客戶端c的交易請求筆數為800筆;服務端對每筆交易的平均處理時間為10秒;基於客戶端交易超時時間,服務端的tomcat的connector 中connectiontimeout也設定成60秒。

服務端s提供的服務a是通過hessian來暴露服務介面的,服務端程式部署在tomcat上,tomcat中的server.xml中聯結器設定如下:

只要是web伺服器,都是可以設定給客戶端提供連線的最大連線數的,如果tomcat的connector 如上設定,則預設提供的最大連線數(即執行緒數maxthreads)是200,等待連線數(acceptcount)是100。即如果此時有800筆交易同時到來,由於服務端平均處理時間為10秒,所以在10秒鐘之內,將有800-200-100=大約500筆交易會在客戶端報超時,注意,這個超時和客戶端設定的交易超時時間60秒無關,是tomcat強制終止客戶端多餘的連線造成的超時。但如果你服務端處理業務的交易的平均時間不是10秒而是幾毫秒甚至是不需要什麼時間的,則客戶端報超時的交易會遠小於500筆。

所以,根據假設的高峰期交易量800筆和服務端平均處理交易時間10秒,我們認為maxthreads設定成400、acceptcount也設定400比tomcat的預設值更合適,這樣的話,服務端可以先處理到來的800筆交易中的400筆,讓另外400筆處於等待狀態,等前面的400筆交易處理完成,再去等待佇列中取400筆交易來處理,這樣保證了處理所有的交易,也不至於讓客戶端等太久。

於是有人會想,如果我高峰期併發交易有幾萬筆,難道我maxthreads也設定成幾萬?這明顯是不現實也是浪費的。幸運的是tomcat有可配置的執行緒連線(執行緒)池執行器(executor),如下為tomcat的預設配置:

我們如何讓我們的聯結器使用上面的執行緒池執行器呢?很簡單:

請注意,此時你的聯結器connector 就不需要設定maxthreads和acceptcount,即使你設定了,也會被executor 的設定所覆蓋。這樣得話,已經沒有了acceptcount的概念了。tomcat可以在該8090埠上處理無限個客戶端連線,直到客戶端等待交易服務超時或tomcat聯結器設定的connectiontimeout時間超時。如果是我們現在假定的交易場景,我們的連線池執行器中的maxthreads設定成400且更合適,這樣,我們能處理高峰期最大交易數為(60 / 10)  * 400 = 2400(交易超時時間和connectiontimeout中的最大值/服務端平均交易處理時間*maxthreads)筆交易,遠大於原來假定的800筆交易。

當然,所有web容器所能同時獲取的客戶端連線數還和作業系統有關,這裡暫不討論。

備註:聯結器connector是沒有maxprocessors和minprocessors這兩個屬性的。

效能調優 tomcat

介紹 tomcat 伺服器是乙個免費的開放源 的輕量級 web 應用伺服器,如apache處理靜態html能力 突出不同,tomcat處理動態html能力相當強大,因此一般專案都是部署apache tomcat,由 apache處理程式的靜態檔案,tomcat處理jsp 頁面和servlet。tom...

調優 Nginx效能調優

一.nginx優化配置 1.主配置檔案優化 注 部分配置詳解 worker processes 8 nginx程序數,建議按照cpu數目來指定,一般為它的倍數。worker cpu affinity 00000001 00000010 00000100 00001000 00010000 00100...

tomcat調優策略

tomcat調優問題對工作經驗兩三年的開發人員來說主要針對面試時問題 1 修改tomcat的連線模式 修改tomcat的配置檔案server.xml tomcat 聯結器的三種方式 bio nio 和 apr,三種方式效能差別很大,apr 的效能最優,bio 的效能最差。而 tomcat 7 使用的...