Elastic Beanstalk 不断替换我的实例

Posted

技术标签:

【中文标题】Elastic Beanstalk 不断替换我的实例【英文标题】:Elastic Beanstalk keeps replacing my instances 【发布时间】:2015-10-24 08:16:54 【问题描述】:

我已将 Java webap 部署到 AWS Elastic Beanstalk 并且每隔几天,有时我会更频繁地收到通知:

AWS Elastic Beanstalk 通知 - 将实例 i-5dc46494 添加到您的环境

几分钟后:

消息:从您的环境中删除了实例“i-60a05f96”。 (原因:实例处于“关闭”状态)

首先,我可以在某个地方找到它需要替换当前实例的原因吗?

其次,上次它这样做时,我登录并在它关闭之前执行了“dmesg”:

[4383952.557902] Out of memory: Kill process 1608 (java) score 796 or    sacrifice child
[4383952.557910] Killed process 1608 (java) total-vm:2496244kB, anon-rss:482052kB, file-rss:0kB

大概是这个原因。这里指的是什么记忆?分配给 JVM 的内存还是实例的内存?

我也跑了 top 和 free -m

[ec2-user@ip-172-31-40-184 tomcat8]$ free -m
      total         used    free  shared  buffers   cached
Mem:  592           574     17      0     13        41
-/+ buffers/cache:  520     71
Swap:  0            0       0

这里是 pid 1608

[ pid ]   uid  tgid total_vm      rss nr_ptes swapents oom_score_adj name
[ 1608]    91  1608   624061   120513     332        0             0 java

任何有关正在发生的事情的见解将不胜感激。谢谢!

【问题讨论】:

【参考方案1】:

您使用的是t1.micro 实例吗?我看到您的 RAM 大小小于 1 Gb。我认为使用默认设置运行 Tomcat 8 是不够的。

但是,你可以这样做:

至少将您的实例升级到t2.micro。它比t1.micro 更便宜,性能更好。 (先这样做) 通过设置JAVA_OPTS 限制您的Tomcat 8 内存消耗。使用.ebextensions 创建一个setenv.sh 文件。

添加交换文件/磁盘空间。阅读this question。但是有人在其中一个答案中发出警告:

我了解到,在 EC2 微型实例上使用交换空间会适得其反,因为 a) 它是缓慢的交换空间,并且 b) 使用它会计入 IO,而 IO 也必须支付,这会导致下个月出现意外账单.

【讨论】:

是的,我正在使用 t1.micro,感谢您提供的信息,我现在已经升级到 t2。您是否知道是否有办法确定实例被替换的原因,或者当实例关闭时该信息是否丢失?对 tomcat8 的限制有何见解? 可能是因为你的Tomcat被OOM Killer杀死了。因此,没有人会监听 80 端口。默认情况下,在 EB 中,Auto Scaling Group (ASG) 将终止那些未能为 TCP 端口 80 提供服务的实例。

以上是关于Elastic Beanstalk 不断替换我的实例的主要内容,如果未能解决你的问题,请参考以下文章

AWS Elastic Beanstalk / NodeJS / Nginx 错误:不断收到 502 bad gateway

如何替换在我部署 Elastic Beanstalk 应用程序时不再工作的 AWS CLI 命令

自动部署 Elastic Beanstalk 更改

替换 AWS Elastic BeanStalk 上的特定实例?

Amazon Elastic Beanstalk 在运行任何命令时不断询问凭据

通过ebextensions在aws elastic beanstalk中用nginx替换apache