Java 如何在Amazon EBS(Elastic BeanStalk)上发现内存错误

Java 如何在Amazon EBS(Elastic BeanStalk)上发现内存错误,java,out-of-memory,amazon-ebs,Java,Out Of Memory,Amazon Ebs,这是一个棘手的问题-我们有一个Java web应用程序,部署在Amazon ElasticBeanStalk上的Tomcat web服务器上。我们相信我们有一个内存泄漏b/c,JVM似乎每晚都会崩溃,OutOfMemory例外。 问题是在崩溃之后,EBS会自动删除旧的EC2实例并启动一个新实例。所有的日志和信息也被废弃了 我现在正在开发一个定制的CloudWatch度量来监视JVM的内存(您可能会认为应该有一个准备好的度量…),但这不会帮助我生成堆转储 有没有人遇到过类似的问题,并且知道如何在E

这是一个棘手的问题-我们有一个Java web应用程序,部署在Amazon ElasticBeanStalk上的Tomcat web服务器上。我们相信我们有一个内存泄漏b/c,JVM似乎每晚都会崩溃,OutOfMemory例外。 问题是在崩溃之后,EBS会自动删除旧的EC2实例并启动一个新实例。所有的日志和信息也被废弃了

我现在正在开发一个定制的CloudWatch度量来监视JVM的内存(您可能会认为应该有一个准备好的度量…),但这不会帮助我生成堆转储


有没有人遇到过类似的问题,并且知道如何在EBS上捕获这些错误?

这听起来确实像是EC2(而不是EBS)实例的异常行为。有趣的是,如果Tomcats倒下,那么机器实例就会受到影响(在停止或终止方面)

我建议诊断如下:

  • 获取要检查/使用的正在运行的实例
  • 看看“终止保护”——是否设置为“已启用”——这可以解释问题的“取消”部分(如果取消是指实例终止并被删除)。这可以在使用AWS控制台的EC2实例的属性中找到
  • 看看Tomcat服务器配置的Java内存设置。也许最大值(Xmx)比虚拟机大!?如果是这样的话,也许Tomcat实际上是在内存不足的情况下运行机器,这可以解释EC2对内存不足的一些响应。我想你的意思是“停止”而不是“报废”,否则你怎么知道你的内存不足错误
  • 如果您在一个工作实例上手动终止tomcat/java进程,那么该实例是否保持可操作性(或者您是否启动并停止该实例)?如果只是因为停止tomcat而发生了一些事情,这意味着一些监控过程正在启动并明确地关闭机器
  • 使用-XX:-HeapDumpOnOutOfMemoryError生成转储文件-这将帮助您确定泄漏的位置,并有望修复根本原因

  • 祝你好运。希望这能有所帮助。

    这听起来确实像是不同寻常的EC2(而不是EBS)实例行为。有趣的是,如果Tomcats倒下,那么机器实例就会受到影响(在停止或终止方面)

    我建议诊断如下:

  • 获取要检查/使用的正在运行的实例
  • 看看“终止保护”——是否设置为“已启用”——这可以解释问题的“取消”部分(如果取消是指实例终止并被删除)。这可以在使用AWS控制台的EC2实例的属性中找到
  • 看看Tomcat服务器配置的Java内存设置。也许最大值(Xmx)比虚拟机大!?如果是这样的话,也许Tomcat实际上是在内存不足的情况下运行机器,这可以解释EC2对内存不足的一些响应。我想你的意思是“停止”而不是“报废”,否则你怎么知道你的内存不足错误
  • 如果您在一个工作实例上手动终止tomcat/java进程,那么该实例是否保持可操作性(或者您是否启动并停止该实例)?如果只是因为停止tomcat而发生了一些事情,这意味着一些监控过程正在启动并明确地关闭机器
  • 使用-XX:-HeapDumpOnOutOfMemoryError生成转储文件-这将帮助您确定泄漏的位置,并有望修复根本原因

  • 祝你好运。希望这能有所帮助。

    考虑像Sumologic这样的日志收集服务。您指定的日志文件已收集并可用于联机分析。因此,即使您的EC2实例被替换,您也可以进行取证,以查看它们发生了什么情况

    考虑使用类似Sumologic的日志收集服务。您指定的日志文件已收集并可用于联机分析。因此,即使您的EC2实例被替换,您也可以进行取证以查看它们发生了什么

    我不知何故觉得您的问题并不清楚。我们在AmazonEBS上也有我们的tomcat服务器,我有好几次看到内存不足错误,但该错误只会使tomcat崩溃,对EC2实例没有影响。将您的EBS实例视为普通服务器。tomcat中的崩溃永远不会重新启动机器。EBS是弹性beanstalk,而不是存储服务(S3)。EBS的部分功能是自动负载平衡,您可以在其中定义根据当前流量自动启动和终止的最小和最大实例。最小实例数不能低于1,因此如果有一个正在运行的实例,并且tomcat停止响应HTTP请求,那么EBS将自动终止EC2实例并启动一个新实例。这不是EBS最基本的功能吗???我不知怎的觉得你的问题不清楚。我们在AmazonEBS上也有我们的tomcat服务器,我有好几次看到内存不足错误,但该错误只会使tomcat崩溃,对EC2实例没有影响。将您的EBS实例视为普通服务器。tomcat中的崩溃永远不会重新启动机器。EBS是弹性beanstalk,而不是存储服务(S3)。EBS的部分功能是自动负载平衡,您可以在其中定义根据当前流量自动启动和终止的最小和最大实例。最小实例数不能低于1,因此如果有一个正在运行的实例,并且tomcat停止响应HTTP请求,那么EBS将自动终止EC2实例并启动一个新实例。这不是EBS最基本的功能吗???嗨,jowierun,很抱歉反应太晚了。这是EBS的问题,而不是EC2(请参阅我在问题帖子上的评论,EBS的负载平衡是您提到的“一些监控过程”。它运行在顶部