sgl-project/sglang · critical · FileNotFoundError
Shared memory {name} not found
Error message
Shared memory {name} not found What it means
During multi-tokenizer startup the scheduler publishes state (tokenizer/scheduler info) via POSIX shared memory; read_from_shared_memory re-raises FileNotFoundError when the named segment does not exist — typically a race where the reader runs before the writer creates it, or the writer crashed.
Source
Thrown at python/sglang/srt/managers/multi_tokenizer_mixin.py:806
shm.unlink()
shm = shared_memory.SharedMemory(create=True, size=size, name=name)
except FileNotFoundError:
# If not present, create new shared memory
shm = shared_memory.SharedMemory(create=True, size=size, name=name)
shm.buf[:size] = serialized
return shm
def read_from_shared_memory(name: str) -> Any:
"""Read data from shared memory"""
try:
shm = shared_memory.SharedMemory(name=name)
data = pickle.loads(bytes(shm.buf))
shm.close()
return data
except FileNotFoundError:
raise FileNotFoundError(f"Shared memory {name} not found")
def write_data_for_multi_tokenizer(
port_args: PortArgs,
server_args: ServerArgs,
scheduler_info: Dict,
):
"""Write args information to share memory for multi-tokenizer"""
# get main process ID
main_pid = get_main_process_id()
current_pid = os.getpid()
logger.info(f"main process ID: {main_pid}, current process ID: {current_pid}")
args = (port_args, server_args, scheduler_info)
args_shm = write_to_shared_memory(args, f"multi_tokenizer_args_{current_pid}")
args_shm.close()
return args_shm
View on GitHub (pinned to 0132848349)
Solutions
- Retry the read with a short backoff until the writer creates the segment, or ensure write_data_for_multi_tokenizer completed before init
- Check scheduler process liveness — if it crashed, fix the root crash first
- Verify the PortArgs-derived shm name matches across processes
Example fix
// before
data = read_from_shared_memory(name)
// after
for _ in range(50):
try:
data = read_from_shared_memory(name); break
except FileNotFoundError:
time.sleep(0.1) Defensive patterns
Strategy: retry
Validate before calling
import os # ensure writer side has run before init from sglang.srt.managers.multi_tokenizer_mixin import read_from_shared_memory
Try / catch
for attempt in range(100):
try:
data = read_from_shared_memory(name)
break
except FileNotFoundError:
if scheduler_process.is_alive() is False:
raise
time.sleep(0.1) Prevention
- Sequence startup: write shm before spawning readers
- Monitor scheduler liveness; treat persistent miss as writer crash
When it happens
Trigger: init_multi_tokenizer reading shm before the parent process called write_data_for_multi_tokenizer; a crashed scheduler leaving no segment; stale name/port mismatch after restart.
Common situations: Enabling the multi-tokenizer path under load where init races; container restarts with leftover state; version changes to the shm protocol.
Related errors
- SGLANG_RUST_SERVER is not supported with the offline Engine
- Multi-node weight cache daemons (nnodes > 1) require --dist-
- Weight cache daemon for pp_rank={pp_rank} tp_rank={tp_rank}
- Weight cache daemon (pid={p.pid}) exited prematurely with co
- engine_info_bootstrap_port {bootstrap_port} is already in us
AI-assisted analysis of sgl-project/sglang@0132848349 (2026-08-28).
Data as JSON: /api/errors/8839508a7ee39e56.
Report an issue: GitHub.