@@ -294,13 +294,15 @@ export class ProcessSpawner {
294294 // Ensure team-specific cache directory exists before mounting
295295 const cacheDir = await this . ensureCacheDirectory ( config . team_id , runtime ) ;
296296
297- // Log cgroup version for diagnostics
297+ // Log cgroup status (disabled due to permissions)
298298 const cgroupVersion = existsSync ( '/sys/fs/cgroup/cgroup.controllers' ) ? 'v2' : 'v1' ;
299299 this . logger . info ( {
300- operation : 'cgroup_version_detected ' ,
300+ operation : 'cgroup_status ' ,
301301 version : cgroupVersion ,
302+ enabled : false ,
303+ reason : 'permissions' ,
302304 team_id : config . team_id
303- } , `Detected cgroup ${ cgroupVersion } ` ) ;
305+ } , `Cgroup ${ cgroupVersion } detected but disabled (using rlimit only) ` ) ;
304306
305307 this . logger . info ( {
306308 operation : 'spawn_nsjail' ,
@@ -309,14 +311,12 @@ export class ProcessSpawner {
309311 runtime : runtime ,
310312 cache_dir : cacheDir ,
311313 memory_limit_mb : nsjailConfig . memoryLimitMB ,
312- cgroup_mem_max_mb : Math . floor ( nsjailConfig . cgroupMemMaxBytes / ( 1024 * 1024 ) ) ,
313314 cpu_time_limit_seconds : nsjailConfig . cpuTimeLimitSeconds ,
314315 max_processes : nsjailConfig . maxProcesses ,
315- cgroup_pids_max : nsjailConfig . cgroupPidsMax ,
316316 max_open_files : nsjailConfig . maxOpenFiles ,
317317 max_file_size_mb : nsjailConfig . maxFileSizeMB ,
318318 tmpfs_size : nsjailConfig . tmpfsSize
319- } , `Spawning ${ runtime } MCP server with nsjail isolation (cgroup mem: 512MB )` ) ;
319+ } , `Spawning ${ runtime } MCP server with nsjail isolation (rlimit only )` ) ;
320320
321321 // Get current user UID and GID (deploystack user in production)
322322 const uid = process . getuid ? process . getuid ( ) : 1000 ;
@@ -338,11 +338,9 @@ export class ProcessSpawner {
338338 '--rlimit_nofile' , String ( nsjailConfig . maxOpenFiles ) , // Max file descriptors
339339 '--rlimit_fsize' , String ( nsjailConfig . maxFileSizeMB ) , // Max file size (MB)
340340 '--time_limit' , '0' , // No wall-clock time limit
341- // Cgroup v2 limits for precise resource control
342- '--use_cgroupv2' ,
343- '--cgroupv2_mount' , '/sys/fs/cgroup' ,
344- '--cgroup_mem_max' , String ( nsjailConfig . cgroupMemMaxBytes ) , // Physical memory limit (512MB)
345- '--cgroup_pids_max' , String ( nsjailConfig . cgroupPidsMax ) , // Process limit (1000)
341+ // Cgroup limits disabled due to permissions (rlimit provides fallback limits)
342+ // Physical memory limit removed (only virtual memory via rlimit_as: 2048MB)
343+ // Process limit relies on rlimit_nproc: 1000
346344 '-R' , '/usr' , // Read-only mount: /usr
347345 '-R' , '/lib' , // Read-only mount: /lib
348346 '-R' , '/lib64' , // Read-only mount: /lib64
@@ -484,11 +482,7 @@ export class ProcessSpawner {
484482 '--rlimit_nofile' , String ( nsjailConfig . maxOpenFiles ) ,
485483 '--rlimit_fsize' , String ( nsjailConfig . maxFileSizeMB ) ,
486484 '--time_limit' , String ( timeoutSeconds ) ,
487- // Cgroup v2 limits
488- '--use_cgroupv2' ,
489- '--cgroupv2_mount' , '/sys/fs/cgroup' ,
490- '--cgroup_mem_max' , String ( nsjailConfig . cgroupMemMaxBytes ) ,
491- '--cgroup_pids_max' , String ( nsjailConfig . cgroupPidsMax ) ,
485+ // Cgroup limits disabled due to permissions (rlimit provides fallback limits)
492486 // Read-only system mounts
493487 '-R' , '/usr' ,
494488 '-R' , '/lib' ,
0 commit comments