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
- Restart both client and daemon so they run the same sglang version
- Reduce payload size (fewer tensors per message) or raise MAX_MSG_SIZE if legitimate
- 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
- Run client and daemon on the same sglang version
- Keep messages under MAX_MSG_SIZE
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
- Remote media exceeds the {max_bytes} byte download limit
- duplicate fd for {key}
- Connection closed while reading message header
- Connection closed while reading message body
- received truncated fd header: {len(data)} < {_FD_INDEX_STRUC
AI-assisted analysis of sgl-project/sglang@0132848349 (2026-08-28).
Data as JSON: /api/errors/9bab8098878d4ec4.
Report an issue: GitHub.