fix(execution): cap isolate memory at 128MB and recycle workers every 200 executions (#4543)

* fix(execution): cap isolate memory at 128MB and recycle workers every 100 executions

* fix(execution): set IVM_MAX_EXECUTIONS_PER_WORKER env default to 100

* fix(execution): raise MAX_EXECUTIONS_PER_WORKER from 100 to 200

* fix(execution): update memory limit error messages from 256 MB to 128 MB
This commit is contained in:
Waleed
2026-05-09 18:43:32 -07:00
committed by GitHub
parent 94f60e79b2
commit aae93f8228
3 changed files with 6 additions and 6 deletions
+1 -1
View File
@@ -248,7 +248,7 @@ export const env = createEnv({
IVM_DISTRIBUTED_MAX_INFLIGHT_PER_OWNER:z.string().optional().default('2200'), // Max owner in-flight leases across replicas
IVM_DISTRIBUTED_LEASE_MIN_TTL_MS: z.string().optional().default('120000'), // Min TTL for distributed in-flight leases (ms)
IVM_QUEUE_TIMEOUT_MS: z.string().optional().default('300000'), // Max queue wait before rejection (ms)
IVM_MAX_EXECUTIONS_PER_WORKER: z.string().optional().default('500'), // Max lifetime executions before worker is recycled
IVM_MAX_EXECUTIONS_PER_WORKER: z.string().optional().default('200'), // Max lifetime executions before worker is recycled
IVM_MAX_BROKER_ARGS_JSON_CHARS: z.string().optional().default('262144'), // Max JSON payload size for sandbox task broker args (isolate→host)
IVM_MAX_BROKER_RESULT_JSON_CHARS: z.string().optional().default('16777216'),// Max JSON payload size for sandbox task broker results (host→isolate)
IVM_MAX_BROKERS_PER_EXECUTION: z.string().optional().default('1000'), // Max broker calls per sandbox task execution
@@ -183,7 +183,7 @@ async function executeCode(request, executionId) {
const externalCopies = []
try {
isolate = new ivm.Isolate({ memoryLimit: 256 })
isolate = new ivm.Isolate({ memoryLimit: 128 })
if (executionId !== undefined) activeIsolates.set(executionId, isolate)
context = await isolate.createContext()
const jail = context.global
@@ -388,7 +388,7 @@ async function executeCode(request, executionId) {
stdout,
error: {
message:
'Execution exceeded memory limit (256 MB). Reduce image sizes or split the work into smaller batches.',
'Execution exceeded memory limit (128 MB). Reduce image sizes or split the work into smaller batches.',
name: 'MemoryLimitError',
},
}
@@ -529,7 +529,7 @@ async function executeTask(request, executionId) {
let tPhase = tStart
try {
isolate = new ivm.Isolate({ memoryLimit: 256 })
isolate = new ivm.Isolate({ memoryLimit: 128 })
if (executionId !== undefined) activeIsolates.set(executionId, isolate)
context = await isolate.createContext()
const jail = context.global
@@ -945,7 +945,7 @@ async function executeTask(request, executionId) {
stdout,
error: {
message:
'Execution exceeded memory limit (256 MB). Reduce image sizes or split the work into smaller batches.',
'Execution exceeded memory limit (128 MB). Reduce image sizes or split the work into smaller batches.',
name: 'MemoryLimitError',
},
timings,
+1 -1
View File
@@ -128,7 +128,7 @@ const DISTRIBUTED_MAX_INFLIGHT_PER_OWNER =
Number.parseInt(env.IVM_DISTRIBUTED_MAX_INFLIGHT_PER_OWNER) ||
MAX_ACTIVE_PER_OWNER + MAX_QUEUED_PER_OWNER
const DISTRIBUTED_LEASE_MIN_TTL_MS = Number.parseInt(env.IVM_DISTRIBUTED_LEASE_MIN_TTL_MS) || 120000
const MAX_EXECUTIONS_PER_WORKER = Number.parseInt(env.IVM_MAX_EXECUTIONS_PER_WORKER) || 500
const MAX_EXECUTIONS_PER_WORKER = Number.parseInt(env.IVM_MAX_EXECUTIONS_PER_WORKER) || 200
const MAX_BROKER_ARGS_JSON_CHARS = Number.parseInt(env.IVM_MAX_BROKER_ARGS_JSON_CHARS) || 262_144
const MAX_BROKER_RESULT_JSON_CHARS =
Number.parseInt(env.IVM_MAX_BROKER_RESULT_JSON_CHARS) || 16_777_216