2011-12-19 197 views
5

我正在写我打算利用弹性魔豆亚马逊AWS部署一个Java servlet分配为Tomcat Java堆。我的测试表明,使用Beanstalk使用的股票Tomcat AMI的Small EC2实例可以很好地运行。在EC2实例

我试图找出如何合理分配Java堆空间,这个配置。一个小实例有1.7 GB的内存,所以我认为一个1024MB的堆可以很好地工作。我意识到,即使这个实例唯一的“真正”目的是运行Tomcat,其他事情也需要内存。而且我也知道,标准的Sun/Oracle JVM实际上并不工作的地方有很多堆。

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

回答

2

1024似乎确定,也许有点多。

我不完全相信你的servlet在做什么,而是给你一个想法,我有大约1000用户日常2个小EC2实例中运行的电子商务应用软件。 Tomcat负载通过mod_jk进行分配。

我没有调整JVM在所有并保持默认设置。我也使用兵马俑分布式对象缓存,并且该过程似乎占用了大部分内存。

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

至于工具,我建议将应用程序部署的是一个小的EC2实例和使用像JMeter的工具进行压力测试的应用程序。在压力测试期间,您可以打开顶级实用程序(假设您的应用程序在Linux上并安装了顶级)。

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

+0

感谢您的输入。 我不会详细介绍我们的应用程序。它允许用户查看有关不同主题的信息,然后可能向他们添加更多信息。有关这些主题的一些信息是从数据库中动态生成的,而其中大部分是静态数据,我们从启动时从文件中读取并保存在我们自己的堆中的数据结构中。总而言之,这是大约250-300 MB的数据。我猜测,当我们真正运行时,我们每天会有几万个用户。 – 2011-12-20 21:55:31

+0

在我以前的AWS项目上,我试图控制一切。对于这个项目,我决定我需要花更多时间在“真正”的应用程序上,以及如何推销它,而不是简单的IT工作,所以我只是使用股票Beanstalk。这意味着使用他们的Linux的股票AMI和Elastic Load Balancer。有什么理由你为什么使用mod_jk来分配负载而不是ELB? 因此,为什么你认为1024有点太多了?这为其他任何事情留下了700MB,这实际上不过是标准操作系统任务。我正确看着这个吗? – 2011-12-20 21:55:52

+0

@SanderSmith我仍在使用ELB,但我正在使用它来平衡2个小型Apache Web服务器实例。然后使用mod_jk从我的apache web服务器实例分发负载到我的tomcat实例。 Apache更擅长服务静态资源并更好地处理SSL,这就是为什么我使用它们。我想你能做的最好的事情就是测试负载并从那里做出决定。如果您的应用程序预计每天会接收10k用户,那么无论您如何调整JVM,我都不认为一个小的ec2实例就足够了 – 2011-12-20 23:58:07

0

检查newrelic for java以确定您的堆使用模式。