我的要求是能够在一分钟内终止 EC2 实例。
当前进程每个实例耗时不到 2 分钟,因为操作系统关闭进程耗时 60 秒。如果可能的话,我希望大大加快终止速度。
有人知道加速terminate()
EC2 功能的方法吗?有没有办法像其他虚拟化解决方案一样,无需关闭进程就能“拔掉电源”?
背景:
在Boto中,我在处理子网删除或其他后续任务之前先用该terminate()
函数调用该函数。wait_until_terminated()
但是,我通过第三方 API 触发 boto,如果进程(如终止)耗时超过一分钟,该 API 就会超时。这意味着每次我终止时,API 都会返回错误。
我曾尝试与第三方合作来增加超时时间,但终止之类的事情并不在他们的预期用例中,而且截至目前,第三方还没有解决方案。
我尝试了一下,stop(Force=True)
速度稍微快了一点,但仍然超过一分钟。
我试图强制删除 EBS 卷,但您必须先关闭实例,这会使该过程超过 1 分钟。
我尝试通过 SSH 运行各种命令shutdown
参数halt
,但找不到运行时间少于 60 秒的 OS 命令。正在运行的服务已达到最低限度,我无法进一步加快 OS 关闭速度。
我希望找到一种通过 AWS 来“切断”连接的方法。或者其他快速终止的方法。终止似乎需要关闭操作系统,当我想烧毁实例时,这对我来说有点奇怪。
答案1
虽然我同意这肯定是 XY 问题,你应该用另一种方式解决这个问题,但有比使用 更快的方式来关闭操作系统shutdown
。没有理由等待 Linux 调用 init 脚本并向所有进程发出TERM
和。KILL
从历史上看,我killall -9 init
相信神奇的 SysRq 键是最快的方法。但是,systemd
列出了许多方法(man systemd
),例如:
SIGRTMIN+13
Immediately halts the machine.
SIGRTMIN+14
Immediately powers off the machine.
您可能需要测试几个选项才能找到 AWS 反应最快的选项,但从 60 秒操作系统关闭到 1-5 秒应该足够简单。