我正在写我打算利用弹性魔豆亚马逊AWS部署一个Java servlet分配为Tomcat Java堆。我的测试表明,使用Beanstalk使用的股票Tomcat AMI的Small EC2实例可以很好地运行。在EC2实例
我试图找出如何合理分配Java堆空间,这个配置。一个小实例有1.7 GB的内存,所以我认为一个1024MB的堆可以很好地工作。我意识到,即使这个实例唯一的“真正”目的是运行Tomcat,其他事情也需要内存。而且我也知道,标准的Sun/Oracle JVM实际上并不工作的地方有很多堆。
这是分配内存的合理方式吗?我应该多用还是少用?我可以使用哪些工具来帮助确定最佳配置?
感谢您的输入。 我不会详细介绍我们的应用程序。它允许用户查看有关不同主题的信息,然后可能向他们添加更多信息。有关这些主题的一些信息是从数据库中动态生成的,而其中大部分是静态数据,我们从启动时从文件中读取并保存在我们自己的堆中的数据结构中。总而言之,这是大约250-300 MB的数据。我猜测,当我们真正运行时,我们每天会有几万个用户。 – 2011-12-20 21:55:31
在我以前的AWS项目上,我试图控制一切。对于这个项目,我决定我需要花更多时间在“真正”的应用程序上,以及如何推销它,而不是简单的IT工作,所以我只是使用股票Beanstalk。这意味着使用他们的Linux的股票AMI和Elastic Load Balancer。有什么理由你为什么使用mod_jk来分配负载而不是ELB? 因此,为什么你认为1024有点太多了?这为其他任何事情留下了700MB,这实际上不过是标准操作系统任务。我正确看着这个吗? – 2011-12-20 21:55:52
@SanderSmith我仍在使用ELB,但我正在使用它来平衡2个小型Apache Web服务器实例。然后使用mod_jk从我的apache web服务器实例分发负载到我的tomcat实例。 Apache更擅长服务静态资源并更好地处理SSL,这就是为什么我使用它们。我想你能做的最好的事情就是测试负载并从那里做出决定。如果您的应用程序预计每天会接收10k用户,那么无论您如何调整JVM,我都不认为一个小的ec2实例就足够了 – 2011-12-20 23:58:07