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 命令
替换 AWS Elastic BeanStalk 上的特定实例?