java - 在 EC2 实例上为 Tomcat 分配 Java 堆

标签 java amazon-web-services tomcat amazon-ec2 heap-memory

我正在编写一个 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/

相关文章:

ruby-on-rails - 如何在 tcserver 上启动 Rails 应用程序?

tomcat - Servlet问题

java - 无法在tomcat服务器中运行FTPServer java文件

java - 为什么 kotlin lambda 反编译为 java 代码是 (Function0)null.INSTANCE

java - 有没有办法在solrj中动态更新数据索引而不需要重新启动EmbeddedSolrServer?

java - 我可以将变量从 JSP scriptlet 传递给 JSTL,但不能从 JSTL 传递给 JSP scriptlet 而不会出错

amazon-web-services - 将无效请求发布到Amazon CloudFront时,CallerReference是什么?

amazon-web-services - 用于存储多种文档类型的最佳 DynamoDB 架构是什么?

java - 我应该返回集合还是流?

javascript - 如何在没有特定标签的情况下搜索资源