mirror of
https://github.com/simstudioai/sim.git
synced 2026-09-24 15:45:35 +08:00
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:
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user