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

  1. Assign distinct values to each port flag (e.g. --port 30000 --master-port 30001 ...)
  2. Parameterize port flags as BASE, BASE+1, ... in launch scripts
  3. 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

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


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