当应用程序服务器快速时,为什么Apache会变慢?

时间:2015-12-01 03:51:07

标签: apache performance tomcat jboss ajp

我们使用Apache作为Web服务器,它使用AJP代理对Jboss(想想Tomcat)Java应用程序服务器的请求。

我们已登录Apache和Jboss中的Web应用程序。

我们看到的并非总是但有时候Jboss中请求的处理时间不到半秒,但在同一请求的Apache日志中,完成请求的时间超过8秒。< / p>

我甚至无法想到从哪里开始寻找,我还没有想出一个很好的谷歌搜索来试图弄清楚为什么Apache长期以来一直在请求。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:2)

免责声明:根据我运行此类设置的经验进行了经过深思熟虑的猜测。

前言

Apache可以配置为仅允许同时有限数量的连接。实际上,这是一种配置Apache的谨慎方法,因为每个连接都使用一定数量的资源并且没有上限会使您面临陷入风险的风险,即主内存耗尽且服务器无响应。

资源耗尽

话虽如此,Apache通常配置如下,但您的数字和模块可能会有所不同。该原则仍然适用。

<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers       10
    MaxClients            150
    MaxRequestsPerChild   0
</IfModule>

这表明Apache可以处理最多150个并发连接

如果客户端启动了第151个连接,则操作系统kernel会尝试将此连接转发到Apache进程,但它不会再回答任何连接。 kernel然后将连接排入队列,直到Apache关闭了另一个连接。

kernel成功启动连接所需的时间将向用户显示,因为请求需要更长时间才能完成。

另一方面,应用程序服务器不知道延迟,只有在连接启动后才收到请求。因此,对于应用程序服务器,一切看起来都很正常。

如果您没有足够的资源来增加Apache中的并发连接,请考虑切换到资源效率更高的网络代理,例如nginxVarnish

答案 1 :(得分:0)

我认为apache在你的情况下非常缓慢。我猜你正在使用apache和jboss之间的keepalived连接。在某些情况下,例如连接器使用阻塞IO策略并且意味着apache httpd进程的数量高于jboss连接器中配置的执行程序线程数。它可能导致jboss容器线程在提供请求后被阻塞。您应该发布您的apache和jboss配置,以获得更具体的答案。