我们在 Amazon EC2 服务器(8 核处理器、7GB RAM)上的 Tomcat 6 上运行游戏应用程序 .WAR。该应用程序使用托管在 Amazon RDS 上的 MySQL 数据库。
当只有 20-30 名用户玩这个 Facebook 应用程序时,需要很长时间才能访问。与 1-2 名用户的情况有很大不同。整个 .WAR 约为 4mb,所有静态内容都托管在其他地方。
服务器从未接近耗尽 RAM。CPU 利用率从未超过 13.5-14%。即使有大约 500 名用户,一切都会完全停滞。线程数或线程池还没有达到最大值。我提高了 maxthreads,但没有带来明显的区别。
我的理论是 Tomcat 只能使用一个处理器核心,这可以解释为什么它在活动高峰时 CPU 使用率稳定在 13-14%,但速度却慢到停止。
但我不明白为什么它只使用一个 CPU 核心。server.xml 中没有处理器上限。该应用程序包含多个 servlet(4 或 5 个)。Java 代码中没有提及 SingleThreadModel。
是什么原因导致应用程序运行速度极慢?如果应用程序上只有 1-5 个人,它运行良好。如果有 20-30 个人,它几乎无法联系。
答案1
这可能是应用程序设计的一个缺陷。我们还有一个应用程序具有相同的行为。其代码的很大一部分是同步的,因此无论我们给它多少个 CPU,它实际上都在单个线程中运行。在这种情况下,除了运行同一应用程序的多个实例并在它们之间平衡负载之外,您几乎什么也做不了。