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

  1. Retry the read with a short backoff until the writer creates the segment, or ensure write_data_for_multi_tokenizer completed before init
  2. Check scheduler process liveness — if it crashed, fix the root crash first
  3. 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

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


AI-assisted analysis of sgl-project/sglang@0132848349 (2026-08-28). Data as JSON: /api/errors/8839508a7ee39e56. Report an issue: GitHub.