配置Apache / Tomcat的最佳实践[已关闭]

lb3vh1jj  于 2023-10-19  发布在  Apache
关注(0)|答案(3)|浏览(117)

已关闭,此问题为opinion-based。它目前不接受回答。
**想改善这个问题吗?**更新问题,以便editing this post可以用事实和引用来回答。

上个月关门了。
Improve this question
我们目前使用Apache 2.2.3和Tomcat 5(嵌入在JBoss 4.2.2中),使用mod_proxy_jk作为连接器。
有没有人能解释一下计算/配置下面的值的正确方法(以及其他可能相关的东西)。Apache和Tomcat都运行在不同的机器上,并且有大量的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>
i7uaboj4

i7uaboj41#

您应该考虑服务器可能获得的工作负载。
最重要的因素可能是在高峰时间同时连接的客户端的数量。尝试确定它并调整您的设置,以便:

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

通过这种设置,您可以最大限度地减少服务器的内部维护开销,这可能会有很大帮助,特别是当负载零星时。
例如,考虑一个应用程序,其中每秒有大约300个新请求。每个请求平均需要2.5秒。这意味着在任何给定的时间,您都有大约750个请求需要同时处理。在这种情况下,您可能希望优化服务器,使其在启动时具有约750个处理线程,并且您可能希望最多添加约1000个处理线程以处理极高的负载。
还要考虑你到底需要一个线程。在前面的示例中,每个请求都是独立的,没有使用会话跟踪。在一个更“web化”的场景中,你可能会让用户登录到你的网站,根据你使用的软件,Apache和/或Tomcat可能需要使用相同的线程来服务一个会话中的请求。在这种情况下,您可能需要更多的线程。然而,至少我知道Tomcat,你真的不需要考虑这一点,因为它在内部使用线程池。

jpfvwuh4

jpfvwuh42#

MaxClients

这是apache应该立即处理的并行客户端连接的基本上限。
使用prefork,每个进程只能处理一个请求。因此,整个Apache可以在处理 * 单个 * 请求的时间内处理 * 最多 * $MaxClients请求。当然,这个理想的最大值只有在应用程序每个请求所需的资源少于1/$MaxClients时才能达到。
例如,如果应用程序需要一秒钟的CPU时间来响应单个请求,将MaxClients设置为4将把吞吐量限制为每秒4个请求:每个请求都会占用一个apache连接,而apache一次只能处理四个请求。但是如果服务器只有两个CPU,那么甚至这也不能达到,因为每个挂钟秒只有两个CPU秒,但是请求需要四个CPU秒。

MinSpareServers

这告诉apache应该有多少空闲进程。这个数字越大,apache在需要产生额外进程之前可以承受的突发负载就越多,这是昂贵的,因此会减慢当前请求的速度。
正确的设置取决于您的工作量。如果你的页面有很多子请求(图片,iframe,JavaScript,css),那么点击一个页面可能会在短时间内占用更多的进程。

MaxSpareServers

有太多未使用的apache进程挂起只会浪费内存,因此apache使用MaxSpareServers数量来限制它为突发请求保留的备用进程数量。

MaxRequestsPerChild

这限制了单个进程在其整个生命周期中将处理的请求数量。如果你非常关心稳定性,你应该在这里设置一个实际的限制,以不断地回收apache进程,防止资源泄漏影响系统。

启动服务器

这只是apache默认启动的进程数量。将其设置为运行apache进程的通常数量,以减少系统的预热时间。即使忽略此设置,Apache也会根据需要使用Min-/MaxSpareServers值来生成新进程。

更多信息

参见the documentation for apache's multi-processing modules

pengsaosao

pengsaosao3#

默认设置通常是查看应用程序真正需要什么的良好起点。我不知道你期望有多少流量,所以猜测MaxThreads、MaxClients和MaxServer有点困难。我可以告诉你,我处理的大多数客户(为Linux Web主机工作,主要与在Tomcat中运行Java应用程序的客户打交道)在相当长的一段时间内使用默认设置,而不需要太多的调整。
如果你不期望太多的流量,那么这些设置“太高”真的不应该影响你太多。除非必要,否则Apache不会为所有256个潜在客户端分配资源。Tomcat也是如此。

相关问题