Java Tomcat-在单个服务器上进行扩展

Java Tomcat-在单个服务器上进行扩展,java,tomcat,amazon-ec2,Java,Tomcat,Amazon Ec2,我在AmazonEC2实例上运行了一个嵌入式Tomcat应用程序。该站点的流量不断增加,因此我升级到了一个更大的实例。然而,在相同流量和更大服务器的情况下,仍然存在着速度减慢的问题。我增加了maxThreads和xmx/xms,但这没有多大帮助 web服务器和数据库服务器(RDS)上使用的服务器资源都很小(内存不足10%,CPU不足20%) 有什么办法可以加快Tomcat的速度吗?还是我应该咬紧牙关,使用多个Tomcat实例和一个负载平衡器 编辑:澄清一下,应用程序中没有任何变化,只是流量增加了

我在AmazonEC2实例上运行了一个嵌入式Tomcat应用程序。该站点的流量不断增加,因此我升级到了一个更大的实例。然而,在相同流量和更大服务器的情况下,仍然存在着速度减慢的问题。我增加了maxThreads和xmx/xms,但这没有多大帮助

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

有什么办法可以加快Tomcat的速度吗?还是我应该咬紧牙关,使用多个Tomcat实例和一个负载平衡器


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

你最好现在什么都不做。很明显,您不知道是什么导致了应用程序的运行速度变慢,这就是为什么您在升级服务器时感到惊讶,但却没有任何效果

不要像猴子拿着打字机那样随机地做一些事情,希望有什么能帮上忙,而是分析你的应用程序(并对其运行负载测试),看看“最重”的动作是什么然后决定如何修复它,无论是通过代码优化、架构更改、负载平衡还是任何其他解决方案

不要猜,知道。

,尽管我不确定你说的“慢下来”到底是什么意思,但几个月前我也遇到过类似的情况,当时巨大的流量高峰(一些病毒活动)导致我们的tomcat表现得非常怪异,尽管瓶颈不在磁盘、cpu或内存上

在我们的案例中,更改
连接器
基本上解决了问题,尤其是了解:

  • 接受计数
  • 接受读取计数
  • maxConnections
  • maxThreads

希望这有帮助!:)

没有带宽问题?如果你的站点需要大量的bw来运行,接近极限,一个更强大的服务器不是解决方案。@ringø带宽很高,但是AWS应该处理它,对吗?对于我使用的特定实例m3 2x large,它应该具有很高的网络速度。当它繁忙时,您可以使用kill-3点击它(java进程),查看是否所有线程都在等待其他线程中的一个(转到标准错误)。我运行了线程转储,没有看到任何异常。很多正在运行的线程正在从套接字读取。谢谢您的回答。我使用相同的资源创建了一个测试实例,并对其运行JMeter。测试的问题是很难模拟精确的流量模式(静态资源等)。对此有什么具体的建议吗?如果不了解你的申请,很难说得太多。我甚至不必担心确切的模式(或静态资源,因为它们几乎不是瓶颈)。应用程序没有改变,访问的页面比例也没有改变。只是有更多的流量在做同样的事情。增加资源不应该解决这个问题吗?我想不出在应用程序逻辑中有什么东西会因请求的增加而受到不成比例的影响。这很奇怪…增加内存和CPU的能力是没有帮助的,除非这是瓶颈所在。您增加了最大线程数,但不知道它是否有助于或损害性能(或与性能无关)。分析应用程序有什么困难?我明白了。因此,您的意思是,当您在不改变应用程序上任何其他内容的情况下将流量加倍时,瓶颈不一定是CPU或内存,它可能是其他东西。我将分析应用程序,看看最薄弱的地方在哪里,看看是否可以优化。