Tomcat

如何確定用於 Tomcat 的 NIO/APR 連接器的 maxThreads 的最佳大小?

  • May 28, 2015

我正在為 Tomcat7 使用 NIO/APR 連接器。

例如

<Connector port="8080" 
       protocol="org.apache.coyote.http11.Http11AprProtocol" 
       connectionTimeout="3000"
       redirectPort="8443" 
       URIEncoding="UTF-8" 
       maxPostSize="0"
       maxThreads="200"
       enableLookups="false"
       disableUploadTimeout="false"
       maxKeepAliveRequests="-1"
       useBodyEncodingForURI="true"
       compression="on"
       compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"   
       />
  1. 如何確定用於 Tomcat 的 NIO/APR 連接器的 maxThreads 的最佳大小?
  2. maxThreads 的良好起始值是多少?

每個連接器的 OOTB 配置通常為 150 – 200 個總接受執行緒。此預設值適用於“平均”硬體上的中等負載/複雜性應用程序。

作為一般的經驗法則,一個輕量級、高性能的應用程序應該著眼於每個 CPU 核心最多使用 150 個(接受)執行緒(因此在 4 核機箱上總共有 600 個)。對於更重量級的應用程序,更保守的設置是 300 個接受執行緒。我希望大多數要求都在中間(但這需要一些分析),但這是高度情境化的 - 請參閱@zagrimsan 的回答。

顯然 HTTPS 的成本略高,因此標準做法是相應減少接受執行緒的數量。

使用 APR/本機連接器可以提高吞吐量,但限制因素通常是應用程序配置文件,所以同樣,沒有神奇的數字。

使用太高的執行緒設置的危險在於伺服器可能會變得“終端繁忙”——花費大量時間管理執行緒和應用程序需求,其他一切都會受到影響(GC 是一個明顯的症狀)。這似乎違反直覺,但通常少即是多。

正確配置執行緒數的繁忙伺服器將在重負載下正常降級。太高會掉下來!

現在,有許多相關設置(接受計數、最小執行緒、等待等)也需要調整以適應,但這超出了這個答案的範圍。

引用自:https://serverfault.com/questions/531399