自定义 CPU/内存规格

更新时间:
复制 MD 格式

E2B 沙箱模板默认使用 2 vCPU 和 2048 MB 内存。当默认规格无法满足计算需求时,可以在构建模板时通过 SDK 参数自定义 CPU 核数(2–16)和内存大小(2048–16384 MB),匹配实际业务场景的资源需求。

通过 SDK 指定规格

运行前,先在终端配置环境变量(将 e2b_xxxxx 替换为您的实际 API Key):

export E2B_API_URL="https://api.cn-beijing.e2b.fc.aliyuncs.com"
export E2B_DOMAIN="cn-beijing.e2b.fc.aliyuncs.com"
export E2B_API_KEY="e2b_xxxxx"

Python SDK

Python SDK 使用 cpu_countmemory_mb 参数指定规格:

import os
from e2b import Template, Sandbox


def require_env(name: str) -> str:
    value = os.environ.get(name, "").strip()
    if not value:
        raise RuntimeError(f"缺少环境变量: {name}")
    return value


# conn_opts 包含 API Key 和北京地域的服务端点
conn_opts = {
    "api_key": require_env("E2B_API_KEY"),
    "api_url": require_env("E2B_API_URL"),
    "domain": require_env("E2B_DOMAIN"),
}

# 构建模板,指定 4 vCPU 和 8192 MB 内存
build = Template.build(
    Template().from_image(
        "your-registry-xx.cn-beijing.cr.aliyuncs.com/origin/python:3.13-slim"
    ),
    name="my-4c8g-template",
    cpu_count=4,
    memory_mb=8192,
    **conn_opts,
)
print(f"模板创建成功: {build.template_id}")

# 验证:用该模板创建沙箱并检查资源
sandbox = Sandbox.create(
    template=build.template_id,
    timeout=300,
    **conn_opts,
)
try:
    result = sandbox.commands.run("python3 -c \"import os; print(os.cpu_count())\"")
    print(f"CPU 核数: {result.stdout.strip()}")

    result = sandbox.commands.run(
        "python3 -c \""
        "import os; "
        "mem_bytes = os.sysconf('SC_PAGE_SIZE') * os.sysconf('SC_PHYS_PAGES'); "
        "print(f'{mem_bytes // 1024 // 1024} MB')"
        "\""
    )
    print(f"内存大小: {result.stdout.strip()}")
finally:
    sandbox.kill()
    print("沙箱已销毁")

TypeScript SDK

TypeScript SDK 使用 cpuCountmemoryMB(camelCase 命名)指定规格:

import "dotenv/config";
import { Template, Sandbox } from "e2b";

const apiKey = process.env.E2B_API_KEY!;
const apiUrl = process.env.E2B_API_URL!;
const domain = process.env.E2B_DOMAIN!;

async function main() {
  // 构建模板,指定 4 vCPU 和 8192 MB 内存
  const template = await Template.build({
    template: Template.fromImage(
      "xl-bj-fc-registry-vpc.cn-beijing.cr.aliyuncs.com/origin/python:3.13-slim"
    ),
    name: "my-4c8g-template",
    cpuCount: 4,
    memoryMB: 8192,
    apiKey,
    apiUrl,
    domain,
  });
  console.log(`模板创建成功: ${template.templateId}`);

  // 验证:用该模板创建沙箱并检查资源
  const sandbox = await Sandbox.create({
    template: template.templateId,
    timeoutMs: 300_000,
    apiKey,
  });

  try {
    const cpuResult = await sandbox.commands.run(
      "python3 -c \"import os; print(os.cpu_count())\""
    );
    console.log(`CPU 核数: ${cpuResult.stdout.trim()}`);

    const memResult = await sandbox.commands.run(
      `python3 -c "import os; mem = os.sysconf('SC_PAGE_SIZE') * os.sysconf('SC_PHYS_PAGES'); print(f'{mem // 1024 // 1024} MB')"`
    );
    console.log(`内存大小: ${memResult.stdout.trim()}`);
  } finally {
    await sandbox.kill();
    console.log("沙箱已销毁");
  }
}

main();

参数说明

Python 参数

TypeScript 参数

类型

默认值

说明

cpu_count

cpuCount

int

2

CPU 核数,取值 2–16。

memory_mb

memoryMB

int

2048

内存大小(MB),取值 2048–16384,必须为 64 的整数倍,且满足 CPU 与内存比例约束。

通过 E2B CLI 查看规格

使用 e2b template list 命令查看已有模板的资源配置:

export E2B_API_KEY=e2b_xxx
export E2B_ACCESS_TOKEN=$E2B_API_KEY
export E2B_API_URL=https://api.cn-beijing.e2b.fc.aliyuncs.com
export E2B_DOMAIN=cn-beijing.e2b.fc.aliyuncs.com

e2b template list

输出示例:

Access   Template ID           Template Name          vCPUs  RAM MiB  Disk size MiB  buildStatus
Public   z736qq9k2qtazlr1u80z  base                       2     2048          10240  ready
Public   27y6ril28g82jzzxgqec  code-interpreter-v1        2     2048          10240  ready
Private  a1b2c3d4e5f6g7h8i9j0  my-4c8g-template           4     8192            512  ready

输出中的 vCPUsRAM MiB 列对应模板的 CPU 和内存规格。

修改已有模板的规格

当前版本的 E2B SDK 不支持直接修改已有模板的 CPU 和内存规格。如需使用不同规格,请执行以下操作:

  1. 使用新的 cpu_countmemory_mb 值创建一个新模板。

  2. 将业务代码中的模板 ID 或模板名称替换为新模板。

  3. 验证新模板的沙箱可正常运行后,删除旧模板。