我正在编写一个Java servlet,我计划使用Elastic Beanstalk在Amazon AWS上部署。我的测试显示使用Small EC2实例运行良好,使用Beanstalk使用的库存Tomcat AMI。
我正在试图弄清楚如何为此配置正确分配Java堆空间。一个小实例有1.7 GB的内存,所以我认为一个1024MB的堆将运行良好。我意识到其他东西需要内存,即使这个实例的唯一“真正”目的是运行Tomcat。而且我也知道,标准的Sun / Oracle JVM并没有真正发挥作用,因此存在大量问题。
这是分配内存的合理方法吗?我应该使用更多还是更少?我可以使用哪些工具来帮助确定最佳配置?
答案 0 :(得分:2)
1024似乎没问题,也许有点多。
我不确定你的servlet在做什么,但为了给你一个想法,我有一个电子商务应用程序,每天有大约1000个用户在2个小ec2实例上运行。 Tomcat加载是通过mod_jk分发的。
我根本没有调整JVM并保留默认设置。我也使用赤土陶器分布式对象缓存,这个过程似乎消耗了大部分内存。
您是部署在基于Linux的操作系统还是Windows上? IMO,linux在管理可用内存方面做得更好。
对于工具,我建议将应用程序原样部署到一个小型ec2实例,并使用JMeter等工具对应用程序进行压力测试。在压力测试期间,您可以打开顶级实用程序(假设您的应用程序位于Linux并且安装了top)。
尝试通过查看它可以处理的负载来打破您的应用程序。这就是ec2的美妙之处,您可以在几分钟内设置一个测试环境并立即将其丢弃。
答案 1 :(得分:0)
检查java的newrelic以确定堆使用模式。