【问题标题】:how to handle 2000+ requests/sec on tomcat?如何在 tomcat 上处理 2000+ 请求/秒?
【发布时间】:2011-11-03 19:32:49
【问题描述】:

我正在用 Java 开发一个 SMS 应用程序。我的客户通过 SMS 发送查询,这些查询将通过 SMS Gateway 以 http 请求的形式转发到我的服务器。现在我的应用程序处理请求并通过 SMS 网关再次向客户端发送回响应。最多只能发送 300 个字符作为响应。我期待非常高的流量(2000 个请求/秒)。我想通过一些网络托管公司(考虑 mochahost)托管我的应用程序。在托管之前我应该​​考虑哪些因素(RAM、CPU 等)以及主要的瓶颈是什么?如果调整得当,专用的 tomcat 服务器可以处理如此高的流量吗?你有什么建议?

没有数据库交互(我只使用 Java 堆内存)。我用 JMeter(100 个请求/秒)进行了测试。我的堆内存使用量为 35MB,平均响应时间为 532ms。而且我没有使用任何会话变量。

【问题讨论】:

  • 每个请求需要做什么样的处理?任何数据库交互?
  • @Mike 根本不涉及数据库交互。我只使用 java 内存。
  • 我用 jmeter 进行了测试(100 个请求/秒)。我的堆内存使用量为 35MB,平均响应时间为 532 毫秒。

标签: java tomcat7 web-traffic


【解决方案1】:

如果不知道您在 servlet 中在做什么,很难回答您的问题。但简短的回答是,它确实与tomcat没有任何关系。

我们目前将戴尔 R410s(双四核,32G 内存)用于我们的 Tomcat 服务器。对于在后端与 membase 集群通信的 REST 服务,我们可以在单个服务器上轻松处理 ~ 15k req/秒(这是使用 Jersey JAX-RS 实现)。我们目前在 F5 负载均衡器后面有 4 个。这些请求中的每一个平均在大约 10 毫秒内得到服务。

真正归结为并发;您的 servlet 需要多长时间才能完成对请求所需的操作。每个并发请求都有一个线程,因此如果您尝试以 2000 个请求/秒的速度处理单个请求需要 500 毫秒来处理……您将需要一些硬件。问题不在于 tomcat,而在于您的 servlet 的可用资源之一。

【讨论】:

  • 我就你的帖子开始了这个话题:stackoverflow.com/questions/7970803/…希望你能加入。
  • 您是否在操作系统级别针对 TIME_WAIT 进行了任何调整? tomcat 配置设置如何:connectionTimeout、keepAliveTimeout、maxKeepAliveRequests。有一个类似的应用程序,每秒有 2K 请求,但 tomcat 在一段时间后变得迟缓。
  • 我喜欢这个答案
【解决方案2】:

假设每个请求没有太多工作要做,在适度的硬件上使用默认设置的单个 Tomcat 服务器应该可以轻松处理 2k 请求/秒。如果处理一个请求需要 500 多毫秒,您可能需要增加线程池中的线程数,并且您可能会开始突破限制。或者,如果您可以将其中一些工作卸载到其他线程,它将加快响应时间,并且您可以保留默认的 200 个线程。那么这只是您的工作线程是否可以跟上传入请求的问题。这将取决于您的负载是恒定的还是突发的,以及您在处理过程中可以接受多少延迟。这甚至没有解决 HA、DR 以及您可以接受的停机时间。这都是一个很大的平衡行为,变量太多,无法给出一个简单的答案。

【讨论】:

    【解决方案3】:

    看起来您可能必须实施集群/负载平衡方法。以this 为例。

    【讨论】:

    • 看看这个显示拒绝访问的链接
    猜你喜欢
    • 2013-01-12
    • 2019-02-28
    • 1970-01-01
    • 2014-11-24
    • 1970-01-01
    • 1970-01-01
    • 2012-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多