【问题标题】:Tomcat throughput limit at low number users少量用户的 Tomcat 吞吐量限制
【发布时间】:2012-06-02 19:34:24
【问题描述】:

我们有一个 webapp 为我们的一项服务的请求提供服务。我们让它在 Tomcat 7 服务器上运行。如下所述,不需要更多细节,因为我们可以创建的最基本的 Servlet 具有相似的结果。

我们使用 jmeter 运行负载测试,其中不同数量的并发线程向我们的服务发出请求一分钟。根据结果​​,我们生成了一些图表,其中包含平均响应时间与并发线程,以及每秒请求数与并发线程。

在我们的测试中有大约 10 个并发线程时,我们发现应用程序管理的吞吐量存在限制。从该线程数开始,平均响应时间增加,每秒请求数稳定。

我们已经对我们的应用程序进行了多项更改测试,甚至删除了所有应用程序逻辑并返回静态响应。并且还对一个什么都不做的基本 Servlet 运行相同的测试,我们得到了类似的结果:平均响应时间和吞吐量值要好得多,但在测试中达到了大约 10 个并发线程的限制。

我们还使用 Apache Benchmark 运行了类似的测试,以消除测试工具的问题。

测试在 2 个服务器池中运行。在本地计算机上运行时,它们给出了类似的结果,但在大约 5 个并发线程时达到了吞吐量限制。

这是吞吐量图表。请注意,每一行的值并不重要(例如:有些已删除 db 访问权限,甚至大多数应用程序逻辑都需要更少的时间)。

Throughput chart

我们想了解的是吞吐量限制来自哪里以及我们可以做些什么来改进它。

谢谢, 豪尔赫

PS:我会添加图片而不仅仅是一个链接,但看起来我没有足够的声誉:(

【问题讨论】:

    标签: tomcat throughput


    【解决方案1】:

    在将 jvm 调整到最佳设置后,限制将取决于您正在运行的硬件。线程需要 cpu 才能运行,只有在其他线程被 IO 之类的东西阻止执行时,添加更多线程才有帮助,即使容器线程增加了开销。当您达到该限制时,您将需要添加更多硬件。

    【讨论】:

    • 感谢您的回答。我们将尝试使用更多硬件来运行它,以检查是否是这种情况下的原因。当硬件是真正的限制时,也许我们过于专注于寻找限制大约 10 个并发线程的原因。
    【解决方案2】:

    tomcat 性能问题的主要原因之一是默认的 jvm 设置,使用 -Xmx 参数增加分配给运行 tomcat 的 JVM 的内存量。

    -Xmx512m 将允许最多 512MB 分配给堆。

    此外,在进行更改之前,请从 tomcat 默认页面 > 状态检查分配给 tomcat 的内存

    并在增加 jvm 堆大小后检查状态。

    还可以使用 -XX:PermSize 和 -XX:MaxPermSize 增加 perm gen 空间。

    更多信息请查看page

    【讨论】:

    • 我们确实没有为应用程序指定内存限制。通过在不同应用程序上运行的类似测试(使用许多不同数量的并发线程进行 1 分钟测试),我们发现当它运行垃圾收集器时,数据超出图表范围。在这种情况下,没有一点表明这种行为,所以我认为 GC 在这种情况下不是问题。对于 PermGen,我们通常只在发现 OutOfMemoryErrors 时才增加它。我认为在这一点上这不会有太大帮助。
    • 您是否在 servlet 中执行任何 IO 操作,这需要很长时间才能完成并阻塞其他线程?如果您正在执行任何 IO 操作,请尝试通过对数据进行编码并再次运行测试来将操作沙盒化到一个常数因子。
    • 我们真正的 web 应用正在执行 I/O 请求,是的。但即使在用硬编码数据替换外部调用后,图表看起来也很相似:仍然存在吞吐量限制,并且在大约 10 个并发测试线程时达到。
    猜你喜欢
    • 2016-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多