Tomcat
如何確定用於 Tomcat 的 NIO/APR 連接器的 maxThreads 的最佳大小?
我正在為 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" />
- 如何確定用於 Tomcat 的 NIO/APR 連接器的 maxThreads 的最佳大小?
- maxThreads 的良好起始值是多少?
每個連接器的 OOTB 配置通常為 150 – 200 個總接受執行緒。此預設值適用於“平均”硬體上的中等負載/複雜性應用程序。
作為一般的經驗法則,一個輕量級、高性能的應用程序應該著眼於每個 CPU 核心最多使用 150 個(接受)執行緒(因此在 4 核機箱上總共有 600 個)。對於更重量級的應用程序,更保守的設置是 300 個接受執行緒。我希望大多數要求都在中間(但這需要一些分析),但這是高度情境化的 - 請參閱@zagrimsan 的回答。
顯然 HTTPS 的成本略高,因此標準做法是相應減少接受執行緒的數量。
使用 APR/本機連接器可以提高吞吐量,但限制因素通常是應用程序配置文件,所以同樣,沒有神奇的數字。
使用太高的執行緒設置的危險在於伺服器可能會變得“終端繁忙”——花費大量時間管理執行緒和應用程序需求,其他一切都會受到影響(GC 是一個明顯的症狀)。這似乎違反直覺,但通常少即是多。
正確配置執行緒數的繁忙伺服器將在重負載下正常降級。太高會掉下來!
現在,有許多相關設置(接受計數、最小執行緒、等待等)也需要調整以適應,但這超出了這個答案的範圍。