【问题标题】:Tomcat Download Servlet behind Apache result in httpd high CPUTomcat 下载 Servlet 落后于 Apache 导致 httpd 高 CPU
【发布时间】: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下载,一切都很好。

http://example.com:8080/MyJavaWebApp/DownloadAsset

这让我觉得问题出在 ProxyPass 规则上。

有没有办法优化下载 servlet 的 ProxyPass 规则?

如果不是,我应该使用哪个孩子的替代品?

感谢您的帮助。

【问题讨论】:

  • 您省略了很多细节 - 例如Apache httpd 和模块版本、虚拟主机配置等......除了“尝试在最新可用版本上重现”之外,不可能给您任何确认或提示。我从来没有见过这样的连接器。
  • 那么这可能是我的配置有问题,因为在我的开发计算机上它确实可以正常工作。

标签: apache performance tomcat download cpu


【解决方案1】:

几周前我终于找到了高cpu的原因。

它与 tomcat 或 AJP 无关,因为简单的文件复制会使我的 CPU 在我的 CentOS 机器上变得很高,但仅适用于大文件(2Go 以上)。

希望它可以帮助某人!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-05
    • 2013-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-23
    相关资源
    最近更新 更多