![页面加载速度差异明显:直接访问 Tomcat(localhost) VS 通过 Apache 访问 tomcat(mod_jk 连接器)](https://linux22.com/image/585942/%E9%A1%B5%E9%9D%A2%E5%8A%A0%E8%BD%BD%E9%80%9F%E5%BA%A6%E5%B7%AE%E5%BC%82%E6%98%8E%E6%98%BE%EF%BC%9A%E7%9B%B4%E6%8E%A5%E8%AE%BF%E9%97%AE%20Tomcat%EF%BC%88localhost%EF%BC%89%20VS%20%E9%80%9A%E8%BF%87%20Apache%20%E8%AE%BF%E9%97%AE%20tomcat%EF%BC%88mod_jk%20%E8%BF%9E%E6%8E%A5%E5%99%A8%EF%BC%89.png)
我有一个 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 服务器上的其他东西导致了问题