sgl-project/sglang · error · ValueError

Message size {length} exceeds {MAX_MSG_SIZE} byte cap

Error message

Message size {length} exceeds {MAX_MSG_SIZE} byte cap

What it means

recv_msg read a length prefix exceeding MAX_MSG_SIZE, so the framed message is rejected. This guards against corrupted frames or malicious/buggy peers sending huge payloads over the weight cache socket.

Source

Thrown at python/sglang/srt/weight_cache/protocol.py:224

MAX_MSG_SIZE = 256 * 1024 * 1024  # 256 MiB


def send_msg(sock, obj: Any) -> None:
    """Send a length-prefixed pickled message over a socket."""
    data = pickle.dumps(obj, protocol=pickle.HIGHEST_PROTOCOL)
    header = struct.pack("!I", len(data))
    sock.sendall(header + data)


def recv_msg(sock) -> Any:
    """Receive a length-prefixed pickled message from a socket."""
    header = _recv_exact(sock, 4)
    if header is None:
        raise ConnectionError("Connection closed while reading message header")
    length = struct.unpack("!I", header)[0]
    if length > MAX_MSG_SIZE:
        raise ValueError(f"Message size {length} exceeds {MAX_MSG_SIZE} byte cap")
    data = _recv_exact(sock, length)
    if data is None:
        raise ConnectionError("Connection closed while reading message body")
    return safe_pickle_loads(data)


def _recv_exact(sock, n: int) -> Optional[bytes]:
    """Receive exactly n bytes from a socket."""
    buf = bytearray()
    while len(buf) < n:
        chunk = sock.recv(n - len(buf))
        if not chunk:
            return None
        buf.extend(chunk)
    return bytes(buf)


def compute_env_stamp() -> Dict[str, str]:

View on GitHub (pinned to 0132848349)

Solutions

  1. Restart both client and daemon so they run the same sglang version
  2. Reduce payload size (fewer tensors per message) or raise MAX_MSG_SIZE if legitimate
  3. Check for socket data corruption / interleaved writers
Defensive patterns

Strategy: validation

Try / catch

try:
    recv_msg(sock)
except ValueError as e:
    if 'byte cap' in str(e): log_protocol_corruption()

Prevention

When it happens

Trigger: Corrupted 4-byte big-endian length header (partial write, garbage bytes); peer sending a pickled message larger than the protocol cap.

Common situations: Protocol version mismatch between client and daemon; memory corruption or wrong-endianness framing; oversized fetch-state payload.

Related errors


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