【问题标题】:Tomcat - scaling on a single serverTomcat - 在单个服务器上扩展
【发布时间】:2016-01-14 07:36:37
【问题描述】:

我有一个在 Amazon EC2 实例上运行的嵌入式 Tomcat 应用程序。该站点的流量增加了,因此我升级到了更大的实例。但是,在相同数量的流量和更大的服务器下,速度仍然下降。我增加了 maxThreads 和 xx/xms,但这并没有太大帮助。

Web 服务器和数据库服务器 (RDS) 上使用的服务器资源都很小(不到 10% 的内存和不到 20% 的 CPU)。

有什么办法可以加快 Tomcat 的速度吗?还是我应该硬着头皮使用多个 Tomcat 实例和一个负载均衡器?

编辑:澄清一下,应用程序没有任何变化,只是流量增加了(几乎翻了一番)。我的假设是(多于)将资源(Web 服务器和数据库)翻倍就足够了。我想事情没那么简单。

【问题讨论】:

  • 没有带宽问题?如果您的网站运行需要大量 bw,接近极限,则更强大的服务器不是解决方案。
  • @ringø 带宽很高,但 AWS 应该处理它,对吗?对于我使用m3 2x large的特定实例,它应该具有很高的网络速度。
  • 当它很忙时,你可以用 kill -3 来命中它(java 进程),看看是否所有线程都在等待其他线程之一(进入标准错误)。
  • 我运行了线程转储,没有发现任何异常。大量 RUNNING 线程从套接字读取。

标签: java tomcat amazon-ec2


【解决方案1】:

最好现在什么都不做。您显然不知道实际上是什么导致应用程序变慢,这就是为什么您在升级服务器时感到惊讶并且它没有任何效果。

不要像猴子用打字机那样随意做一些事情,希望有所帮助,而是分析您的应用程序(并对它运行负载测试)并查看哪些是“最重”的操作。 然后决定如何修复它,无论是代码优化、架构更改、负载平衡还是任何其他解决方案。

不要猜,知道。

【讨论】:

  • 感谢您的回答。我创建了一个具有相同资源的测试实例并针对它运行 JMeter。测试的问题是很难模拟准确的流量模式(静态资源等)。对此有何具体建议?
  • 如果不了解您的应用程序,很难说太多。我什至不必担心确切的模式(或静态资源,因为它们几乎不是瓶颈)。
  • 应用没有变化,访问页面的比例也没有变化。只是有更多的流量在做同样的事情。不应该增加资源来解决这个问题吗?我想不出应用程序逻辑中的任何内容会受到增加的请求的不成比例的影响。真是奇怪……
  • 增加内存和 CPU 能力将无济于事,除非这是瓶颈所在。您增加了最大线程数,却不知道它是否有助于或损害性能(或无关紧要)。分析应用有什么难的?
  • 我明白了。所以你说的是,当你在不改变应用程序的任何其他东西的情况下将流量翻倍时,瓶颈不一定是 CPU 或内存,它可能是其他东西。我将分析应用程序,看看最薄弱的地方在哪里,看看是否可以优化。
【解决方案2】:

stepanian,尽管我不确定你所说的“减速”到底是什么意思,但几个月前我也遇到过类似的情况,当时流量激增(一些病毒式活动)导致我们的 tomcat 表现不佳真的很奇怪,即使瓶颈不在磁盘、cpu 或内存上。

在我们的例子中,更改Connectorconfiguration基本上解决了问题,特别是理解:

  • 接受计数
  • acceptorThreadCount
  • 最大连接数
  • 最大线程数

希望这会有所帮助! :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-15
    • 2010-11-24
    • 1970-01-01
    • 1970-01-01
    • 2011-09-15
    • 2010-10-08
    • 2017-01-26
    • 1970-01-01
    相关资源
    最近更新 更多