一尘不染

配置Apache / Tomcat的最佳实践

tomcat

当前,我们使用Apache 2.2.3和Tomcat 5(包含在JBoss 4.2.2中)mod_proxy_jk作为连接器。

有人可以阐明一些正确的方法来计算/配置以下值(以及其他可能相关的内容)的方法。Apache和Tomcat都在不同的计算机上运行,​​并且具有大量的ram(每个RAM为4GB)。

相关的server.xml部分:

<Connector port="8009"
    address="${jboss.bind.address}"
    protocol="AJP/1.3"
    emptySessionPath="true"
    enableLookups="false"
    redirectPort="8443"
    maxThreads="320"
    connectionTimeout="45000"
/>

相关的httpd.conf部分:

<IfModule prefork.c>
  StartServers       8
  MinSpareServers    5
  MaxSpareServers   20
  ServerLimit      256
  MaxClients       256
  MaxRequestsPerChild  0
</IfModule>

阅读 291

收藏
2020-06-16

共1个答案

一尘不染

您应该考虑服务器可能承担的工作量。

最重要的因素可能是高峰时间同时连接的客户端数量。尝试确定它并以下列方式调整设置:

  • Apache和Tomcat中都有足够的处理线程,因此在服务器负载很重的情况下,它们不需要生成新线程
  • 服务器中没有比所需更多的处理线程,因为它们会浪费资源。

通过这种设置,您可以最大程度地减少服务器的内部维护开销,这可能会有很大帮助,尤其是在负载零星的情况下。

例如,考虑一个您每秒有300个新请求的应用程序。每个请求平均需要2.5秒才能投放。这意味着在任何给定时间,您都有大约750个需要同时处理的请求。在这种情况下,您可能需要调整服务器,以便它们在启动时具有约750个处理线程,并且您可能希望添加最多约1000个处理线程,以处理极高的负载。

还要考虑到底需要什么线程。在前面的示例中,每个请求彼此独立,没有使用会话跟踪。在更加“网络化”的情况下,您可能使用户登录到您的网站,并且根据所使用的软件,Apache和/或Tomcat可能需要使用相同的线程来为一个会话中的请求提供服务。在这种情况下,您可能需要更多线程。但是,至少我知道Tomcat,您实际上并不需要考虑这一点,因为它无论如何都在内部与线程池一起使用。

2020-06-16