休眠与恢复

更新时间:
复制 MD 格式

活跃、浅休眠和深休眠分别是什么?

活跃状态表示 Sandbox 正在运行,适合持续执行命令、保持服务端口、处理交互式任务或承载 longrun 任务。

浅休眠用于在保留 Sandbox 现场的同时降低资源占用。当 Sandbox 空闲(CPU 消耗低于 0.01 core、网络流量低于 1,000 Bytes/s 或无请求)时,会自动进入浅休眠。不建议依赖上述阈值设计精确的状态切换逻辑。浅休眠仅 Pro 计划支持,无需申请白名单,浅休眠期间不收取 vCPU 费用,仅收取内存和磁盘费用。

深休眠用于在更低资源成本下保留 Sandbox 状态。它不收取 vCPU 和内存费用,但仍收取深休眠磁盘费用。

浅休眠和深休眠解决什么问题?

它们用于在保留 Sandbox 现场的同时减少重复初始化和空闲资源占用。

如果每次任务都重新创建 Sandbox,开发者需要反复等待环境准备、依赖加载、服务启动和上下文恢复。休眠/恢复让 Sandbox 可以在保留现场的基础上重新进入可用状态,减少重复初始化。

当前 E2B 兼容 SDK 对外提供的是 sandbox.pause():Sandbox 会进入 paused(深休眠)状态,之后可通过 Sandbox.connect(sandboxId) 恢复。暂停与恢复功能当前仅对已开通白名单的账号可用。SDK 文档未提供由应用选择浅休眠的接口,浅休眠由系统在 Sandbox 空闲时自动触发。

恢复需要多长时间?

恢复耗时受 Sandbox 状态、资源规格、网络访问和平台调度影响。当前文档没有承诺固定恢复时延,业务链路应设置超时和有限重试,并在恢复后完成健康检查。

云沙箱休眠/恢复和 E2B pause/resume 有什么区别?

E2B 的 pause() 用于暂停一个 Sandbox,后续再连接同一个 Sandbox 继续使用。云沙箱兼容这一模式;当前 SDK 的 pause() 对应 paused(深休眠)状态。

浅休眠和深休眠的计费差异、计划限制参见按量付费。不要把 pause() 默认理解为浅休眠,也不要仅凭一次恢复成功就假设进程、端口或外部连接仍然可用。

开发者应该如何选择浅休眠和深休眠?

使用 E2B 兼容 SDK 时,需要保留现场的任务调用 pause(),之后通过 Sandbox.connect() 恢复。任务已经完成、不再需要恢复现场时,应终止 Sandbox,释放资源。

浅休眠由系统在 Sandbox 空闲时自动触发,无需申请白名单。

使用休眠/恢复时需要记录什么?

至少记录 sandboxId、任务 ID、模板版本、当前阶段、关键文件路径、关键进程或端口信息。

恢复后建议做一次轻量健康检查,例如确认命令通道可用、关键文件存在、服务端口可访问。这样可以把休眠/恢复纳入稳定的业务状态机,而不是只依赖一次 SDK 调用结果。

调用 sandbox.kill() 后,Sandbox 是否会自动销毁?

会。sandbox.kill() 是显式销毁操作。调用成功后,Sandbox 将被永久销毁,无法再通过 Sandbox.connect(sandboxId) 恢复。

如果后续仍需恢复 Sandbox,请使用暂停操作,不要调用 sandbox.kill()。

Sandbox 在多久没有请求后会进入浅休眠?

浅休眠不是单纯按距离上次请求的时间触发的。系统基于请求感知判断 Sandbox 是否空闲:当 CPU 消耗低于 0.01 core、网络流量低于 1,000 Bytes/s 或无请求时,Sandbox 会自动进入浅休眠,浅休眠期间不收取 vCPU 费用,仅收取内存和磁盘费用。

不建议依赖上述阈值设计精确的状态切换逻辑。浅休眠仅 Pro 计划支持,无需申请白名单。

Sandbox 正在执行代码或命令时,timeout 计时器是否会暂停或重置?

不会。timeout 从 Sandbox 创建后连续计时,执行代码或命令不会暂停或重置计时器。

到达超时时间后,即使 Sandbox 仍在执行代码或命令,也会触发 lifecycle.on_timeout 配置的行为:配置为 pause 时,Sandbox 进入深休眠状态;配置为 kill 时,Sandbox 被永久销毁。

Sandbox 活跃使用期间是否会自动续期 timeout?

不会。运行代码、执行命令或发送请求均不会自动延长 Sandbox 的超时时间。如需续期,需在超时前显式调用 SDK 的 set_timeout 方法。

set_timeout 接收以秒为单位的新超时时长,并从调用时刻重新开始倒计时。例如,调用 sandbox.set_timeout(600) 后,Sandbox 将从本次调用开始重新倒计时 600 秒。该行为与 E2B 官方 SDK 一致。

能否通过 reserve-paused-sandbox-duration 配置暂停后保留时长?

不能。e2b.agents.kruise.io/reserve-paused-sandbox-duration 不是当前服务支持的配置,而是其他平台使用的 Metadata 参数,不能用于设置暂停后的 Sandbox 保留时长。

当前服务仅支持通过 timeout 参数管理 Sandbox 的超时时间。不要依赖上述 Metadata 实现暂停后保留 48 小时的机制。

不同的 Plan 提供不同的深休眠 Sandbox 保存时长,具体时长请以对应 Plan 的服务说明为准。

是否支持自定义深休眠 Sandbox 的保存时长,并在到期后自动删除?

暂不支持。目前用户无法自定义深休眠 Sandbox 的保存时长,也无法配置在指定时间后自动删除。该能力正在规划中。

是否支持自动恢复已暂停的 Sandbox?

支持。创建 Sandbox 时,可以通过 lifecycle 配置开启自动恢复,例如 lifecycle={"on_timeout": "pause", "auto_resume": True}(要求 on_timeout 设置为 pause)。暂停与恢复功能需要先开通白名单。开启后,后续对 Sandbox 的请求或 SDK 操作会直接唤醒已暂停的 Sandbox,无需先调用 Sandbox.connect(sandboxId)。未开启自动恢复时,通过 Sandbox.connect(sandboxId) 重连也会恢复已暂停的 Sandbox。