页面加载速度差异明显:直接访问 Tomcat(localhost) VS 通过 Apache 访问 tomcat(mod_jk 连接器)

页面加载速度差异明显:直接访问 Tomcat(localhost) VS 通过 Apache 访问 tomcat(mod_jk 连接器)

我有一个 tomcat v6,其中包含 2 个 Web 应用程序(JSF2.0 和 JSP)。物理服务器是具有 16GB 内存的 RedHat Enterprise。

在当前形式中,tomcat 通过 apache 2.2 暴露给互联网,我们使用 mod_jk v1.28 连接器。因此,本质上当用户输入时,www1.example.com/myWebApp其中webApp已配置httpd.conf为 worker1,而这反过来指向上面提到的 tomcat v6,监听端口 8009 来处理请求。

Tomcatserver.xml具有以下相关位:

 <Connector port="8080"
             protocol="HTTP/1.1"
             maxThreads="150"
             connectionTimeout="20000"
             redirectPort="8443"
  />

 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

在workers.properties中worker1配置为:

worker.worker1.type = ajp13
worker.worker1.host =localhost
worker.worker1.port = 8009

并在 httpd.conf 中:

JkMount     /myWebApp/* worker1

在测试页面加载速度时,当我通过使用其本地主机地址(localhost:8080 / myWebApp)直接访问上述 tomcat 来访问 Web 应用程序时,Web 应用程序速度很快,页面加载平均最多需要 2-3 秒。

现在,如果我访问相同的 Web 应用程序,在相同的网络上,但这次通过 apache(www1.example.com/myWebApp)访问,页面明显变慢,页面加载速度平均在 10-12 秒之间。

这是正常的吗?我怀疑 apache ---> mod_jk --> tomcat v6处理任何给定请求时需要进行大量的工作,这会导致速度变慢?有人能建议我在请求来自 Apache 时如何提高 Web 应用程序的响应能力吗?

更新:

由于 www1.example.com 映射到我们的本地 IP 地址,因此 DNS 查找延迟是毫无疑问的,因此肯定不存在导致此延迟的 DNS 查找延迟。

答案1

首先尝试在 localhost 主机名上进行测试:

即通过 Apache 使用 localhost 主机名。如果速度更快,则说明存在 DNS 问题。

如果还是很慢,请尝试使用 mod_proxy 将代理请求反向到 8080,看看是否很慢,例如

所以首先

a2enmod proxy

然后在你的 VirtualHost 中(放入一个单独的 conf,不要使用 http.conf),并从 http.conf 中删除 JKMount

ProxyPassReverse /myWebApp/ http://localhost:8080/myWebApp/

如果不是,那么你就知道是 AJP 连接器的问题。如果是,那么你的 Apache 服务器上的其他东西导致了问题

相关内容