sgl-project/sglang · critical · RuntimeError
{name} port {port} duplicates {seen_ports[port]} port and --
Error message
{name} port {port} duplicates {seen_ports[port]} port and --strict-ports is enabled. What it means
Under --strict-ports, all requested ports (HTTP, Master, and others) must be pairwise distinct. This error fires when two requested ports share the same number, before per-port availability is even checked.
Source
Thrown at python/sglang/multimodal_gen/runtime/server_args/server_args.py:1227
needs_http = self.disagg_role in (
RoleType.MONOLITHIC,
RoleType.SERVER,
)
if self.strict_ports:
requested_ports = []
if needs_http:
requested_ports.append((self.port, "HTTP"))
for replica in range(self.dp_size or 1):
requested_ports.append(
(self.scheduler_port + replica, f"Scheduler[{replica}]")
)
if self.master_port is not None:
requested_ports.append((self.master_port, "Master"))
seen_ports: dict[int, str] = {}
for port, name in requested_ports:
if port in seen_ports:
raise RuntimeError(
f"{name} port {port} duplicates {seen_ports[port]} port and "
"--strict-ports is enabled."
)
seen_ports[port] = name
self._require_port(port, name)
else:
settled_ports: set[int] = set()
if needs_http:
self.port = self.settle_port(self.port)
settled_ports.add(self.port)
initial_scheduler_port = self.scheduler_port + (
random.randint(0, 100) if self.scheduler_port == 5555 else 0
)
self.scheduler_port = self.settle_port(
initial_scheduler_port, avoid=settled_ports
)
settled_ports.add(self.scheduler_port)
self.scheduler_ports = [self.scheduler_port]View on GitHub (pinned to 0132848349)
Solutions
- Assign distinct values to each port flag (e.g. --port 30000 --master-port 30001 ...)
- Parameterize port flags as BASE, BASE+1, ... in launch scripts
- Audit the full port list in your launch config for duplicates
Example fix
# before --port 30000 --master-port 30000 # after --port 30000 --master-port 30001
Defensive patterns
Strategy: validation
Validate before calling
ports = [http_port, master_port] # all requested ports assert len(ports) == len(set(ports)), 'duplicate ports under --strict-ports'
Prevention
- Derive ports as base+i offsets in scripts
- Fail fast on duplicate port config before launch
When it happens
Trigger: --port 30000 --master-port 30000, or any two of the requested port options set to the same value.
Common situations: Copy-pasted config where every port field got the same value; scripts templating a single $PORT into multiple flags.
Related errors
- {name} port {port} is unavailable and --strict-ports is enab
- Failed to get server info. {error_data['error']['message']}
- batching config {source} does not contain any rules
- Component {component_name!r} resolved to layerwise-offload,
- launch_local_runtime requires --dp-size 1; got dp_size={get_
AI-assisted analysis of sgl-project/sglang@0132848349 (2026-08-28).
Data as JSON: /api/errors/7b8d4009f951be48.
Report an issue: GitHub.