con*_*ile 7 tomcat tomcat6 tomcat7
我正在为 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"
/>
Run Code Online (Sandbox Code Playgroud)
如何确定适用于 Tomcat 的 NIO/APR 连接器的 maxThreads 的最佳大小?
maxThreads 的一个好的起始值是多少?
OOTB 配置通常为每个连接器提供 150 – 200 个总接受线程。此默认值适用于“平均”硬件上的中等负载/复杂性应用程序。
作为一般经验法则,轻量级、高性能应用程序应该考虑每个 CPU 内核最多使用 150 个(接受)线程(因此在 4 核机器上总共使用 600 个)。对于更重量级的应用程序,更保守的设置是 300 个接受线程。我希望大多数要求都在中间的某个地方(但这需要一些分析),但这是高度情境化的 - 请参阅@zagrimsan 的回答。
显然 HTTPS 的开销略高,因此标准做法是相应地减少接受线程的数量。
使用 APR / 本机连接器可以提高吞吐量,但限制因素通常是应用程序配置文件,所以同样,没有幻数。
使用太高的线程设置的危险是服务器可能变得“终端繁忙”——在管理线程和应用程序需求上花费了太多时间,其他一切都会受到影响(GC 是一个明显的症状)。这似乎违反直觉,但通常少即是多。
正确配置线程数的繁忙服务器将在重负载下正常降级。太高了会摔倒!
现在,有许多相关设置(接受计数、最小线程数、等待等)也需要进行调整以适应,但这超出了本答案的范围。