为什么Amazon EC2状态检查成功执行无响应的实例?

危险!

除非您准备好崩溃和/或强制重新启动系统,否则不要运行此命令来“testing”它。

我采取的步骤:

  • 我在运行Ubuntu 14.01 LTS的EC2上创build了一个t1.micro实例。
  • 我证实了这两个状态检查通过。
  • 我SSH到了实例。
  • 为什么这个命令让我的系统滞后那么糟糕,我不得不重启? 。
    • 我的SSH会话如下所示。
  • 正如你所看到的,这个实例(很快)耗尽内存,并且会话在超时之后终止。

我期望实例状态检查失败。 但是,两次状态检查都在20分钟后继续通过。 该实例对SSH和ping无响应,尽pipenmap报告端口22已打开。

我希望能够使用状态检查来确定实例是否响应,并使其自动缩放组终止并将其replace,但看起来我不能做到这一点。

我有两个问题:

  1. 为什么通过两个状态检查的实例?
  2. 是否有另一种解决scheme(除了为负载均衡器支付$ 18 /月,而不是用于平衡负载)来终止无响应的实例吗? 有什么我可以用cloudwatch警报做什么?
    • 理想情况下,我希望能够定期报告实例的健康状况,如果在一段时间内没有这样做,终止它(让我的自动调整组负责其余部分)。

我的SSH会话:

Welcome to Ubuntu 14.04.2 LTS (GNU/Linux 3.13.0-57-generic x86_64) * Documentation: https://help.ubuntu.com/ System information as of Thu Jul 9 18:50:39 UTC 2015 System load: 0.0 Memory usage: 7% Processes: 47 Usage of /: 16.8% of 7.75GB Swap usage: 0% Users logged in: 0 Graph this data and manage this system at: https://landscape.canonical.com/ Get cloud support with Ubuntu Advantage Cloud Guest: http://www.ubuntu.com/business/services/cloud Last login: [[redacted]] ubuntu@ip-172-31-18-225:~$ :(){ :|: & };: [1] 1218 ubuntu@ip-172-31-18-225:~$ -bash: fork: Cannot allocate memory -bash: fork: Cannot allocate memory Connection to 52.2.62.141 closed. 

编辑:所以,我真正的目标是缩小状态检查检查之间的差距,并检查我的应用程序正在运行。 如果状态检查确实检查内核是否运行正常,那么我可以使用内核软件看门狗(如softdog内核模块)来弥补这一缺陷。

  • 状态检查是否真的检查内核是否正常运行?
  • 如果状态检查表明内核正在运行,那么这是否意味着我已经加载的所有内核模块都正常运行?

没有反应!=没有心跳。 内核仍在运行。 AWS没有办法知道你已经消耗了你所有的内存。

AWS Cloudwatch监控实际上只是您应该做的最低限度的事情。 如果你需要更详细的监控,你需要自己推出。

由于状态检查已经确保内核已经启动,所以使用softdog内核模块就足够了。 虽然这是一个软件看门狗定时器,但是它是内核模块的事实意味着看门狗本身变得没有响应的任何实例也会被AWS执行的实例状态检查检测到,这将进而终止EC2实例。

这是我在我的设置脚本(这是一个Ubuntu AMI)做的:

 cat >>/etc/modules <<EOF softdog EOF apt-get install watchdog cat >>/etc/watchdog.conf <<EOF interval = 10 logtick = 60 max-load-1 = 24 max-load-5 = 18 max-load-15 = 12 min-memory = 65536 watchdog-device = /dev/watchdog0 ping = 8.8.8.8 interface = eth0 test-binary = /path/to/my/health/check/script.sh test-timeout = 30 realtime = yes priority = 1 EOF ...other setup stuff... reboot # If you don't want to reboot, you can instead do: modprobe softdog service watchdog restart