【发布时间】:2018-08-15 16:01:35
【问题描述】:
我有一个安装了 Apache(2.4.6 版)和 Tomcat(8.0.28 版)的 linux 服务器 (CentOS 7.4.1708)。
我的客户端使用端口 443 (https) 连接到 Apache 上的 HTML 静态内容。
然后,他们使用 AJP 连接器(协议:AJP/1.3)通过 proxypass 规则将 WebRequest 调用到 tomcat。
ProxyPass /MyJavaWebApp/ ajp://localhost:8009/MyJavaWebApp/
一切正常,但当客户端通过 MyJavaWebApp 中的下载 servlet 下载文件时遇到性能问题。
// the core code of the servlet is the following
// I use org.apache.commons.io.IOUtils to copy the streams
IOUtils.copy(new FileInputStream(file), response.getOutputStream());
我需要使用 servlet,因为下载访问是安全的,并且必须进行权限检查。
当他们下载文件时,我可以看到一个 httpd 进程使用了我的 linux 服务器上几乎 100% 的一个内核。然后,如果下载请求使用了所有内核,那么服务器显然会变得非常慢。
如果客户端绕过Apache直接从tomcat下载,一切都很好。
这让我觉得问题出在 ProxyPass 规则上。
有没有办法优化下载 servlet 的 ProxyPass 规则?
如果不是,我应该使用哪个孩子的替代品?
感谢您的帮助。
【问题讨论】:
-
您省略了很多细节 - 例如Apache httpd 和模块版本、虚拟主机配置等......除了“尝试在最新可用版本上重现”之外,不可能给您任何确认或提示。我从来没有见过这样的连接器。
-
那么这可能是我的配置有问题,因为在我的开发计算机上它确实可以正常工作。
标签: apache performance tomcat download cpu