在EC2实例上为Tomcat分配Java堆

San*_*ith 5 java heap tomcat amazon-ec2 amazon-web-services

我正在编写一个Java servlet,我计划使用Elastic Beanstalk在Amazon AWS上部署.我的测试显示使用Small EC2实例使用Beanstalk使用的库存Tomcat AMI可以很好地运行.

我正在试图弄清楚如何为此配置正确分配Java堆空间.一个小实例有1.7 GB的内存,所以我认为一个1024MB的堆将运行良好.我意识到其他东西需要内存,即使这个实例的唯一"真正"目的是运行Tomcat.而且我也知道,标准的Sun/Oracle JVM实际上并不起作用.

这是分配内存的合理方式吗?我应该使用更多还是更少?我可以使用哪些工具来帮助确定最佳配置?

Roy*_*ouh 2

1024 看起来还可以,可能有点多了。

我不太确定您的 servlet 在做什么,但为了给您一个想法,我有一个电子商务应用程序,每天有大约 1000 个用户在 2 个小型 ec2 实例上运行。Tomcat 负载通过 mod_jk 分配。

我根本没有调整 JVM 并保留默认设置。我还使用了 terracotta 分布式对象缓存,该过程似乎消耗了大部分内存。

您部署在基于 Linux 的操作系统还是 Windows 上?IMO,Linux 在管理可用内存方面做得更好。

至于工具,我建议将应用程序按原样部署到小型 ec2 实例,并使用 JMeter 等工具对应用程序进行压力测试。在压力测试期间,您可以打开 top 实用程序(假设您的应用程序在 Linux 上并且安装了 top)。

尝试通过查看应用程序可以处理多少负载来破坏您的应用程序。这就是 ec2 的美妙之处,您可以在几分钟内设置一个测试环境,然后立即丢弃它。