我正在编写一个 Java servlet,我计划使用 Elastic Beanstalk 将其部署在 Amazon AWS 上。我的测试表明,使用使用 Beanstalk 使用的库存 Tomcat AMI 的小型 EC2 实例,一切运行良好。
我正在尝试找出如何为此配置正确分配 Java 堆空间。一个 Small 实例有 1.7 GB 的内存,所以我认为 1024MB 的堆可以很好地工作。我意识到即使这个实例的唯一“真正”目的是运行 Tomcat,其他事情也需要内存。而且我还知道,在某些情况下,对于大堆,标准的 Sun/Oracle JVM 无法正常工作。
这是分配内存的合理方式吗?我应该多用还是少用?我可以使用哪些工具来帮助确定最佳配置?
最佳答案
1024 似乎还可以,也许有点多。
我不太确定你的 servlet 在做什么,但为了给你一个想法,我有一个电子商务应用程序,每天有大约 1000 名用户在 2 个小型 ec2 实例上运行。 Tomcat 负载通过 mod_jk 分配。
我根本没有调JVM,保持默认设置。我也在使用 terracotta 分布式对象缓存,这个过程似乎消耗了大部分内存。
您是部署在基于 Linux 的操作系统还是 Windows 上? IMO,Linux 在管理可用内存方面做得更好。
至于工具,我建议将您的应用程序按原样部署到小型 ec2 实例,并使用 JMeter 等工具对应用程序进行压力测试。在压力测试期间,您可以打开 top 实用程序(假设您的应用程序在 linux 上并且安装了 top)。
通过查看它可以处理多少负载来尝试破坏您的应用程序。这就是 ec2 的美妙之处,您可以在几分钟内设置一个测试环境,然后立即丢弃它。
关于java - 在 EC2 实例上为 Tomcat 分配 Java 堆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8565122/