diff --git a/python/sglang/srt/disaggregation/common/conn.py b/python/sglang/srt/disaggregation/common/conn.py index 3b19529cd..2b0fb414a 100644 --- a/python/sglang/srt/disaggregation/common/conn.py +++ b/python/sglang/srt/disaggregation/common/conn.py @@ -198,6 +198,11 @@ class CommonKVManager(BaseKVManager): # bind zmq socket self._zmq_ctx = zmq.Context() + # Raise libzmq's per-context socket cap because this manager caches two + # sockets per decode endpoint, so large fleets can exceed the default. + self._zmq_ctx.set( + zmq.MAX_SOCKETS, envs.SGLANG_DISAGGREGATION_ZMQ_MAX_SOCKETS.get() + ) self.rank_port, self.server_socket = get_zmq_socket_on_host( self._zmq_ctx, zmq.PULL, host=self.local_ip ) @@ -1244,6 +1249,7 @@ class CommonKVSender(BaseKVSender): class CommonKVReceiver(BaseKVReceiver): _ctx = zmq.Context() + _ctx.set(zmq.MAX_SOCKETS, envs.SGLANG_DISAGGREGATION_ZMQ_MAX_SOCKETS.get()) _socket_cache = {} _socket_locks = {} _global_lock = threading.Lock() diff --git a/python/sglang/srt/environ.py b/python/sglang/srt/environ.py index bf3c1eab3..83a512ad3 100644 --- a/python/sglang/srt/environ.py +++ b/python/sglang/srt/environ.py @@ -431,6 +431,7 @@ class Envs: SGLANG_DISAGGREGATION_NIXL_BACKEND = EnvStr("UCX") SGLANG_DISAGGREGATION_NIXL_BACKEND_PARAMS = EnvStr("{}") SGLANG_DISAGG_PREFILL_EARLY_SEND_CACHED_PREFIX = EnvBool(True) + SGLANG_DISAGGREGATION_ZMQ_MAX_SOCKETS = EnvInt(16384) SGLANG_DISAGGREGATION_ALL_CP_RANKS_TRANSFER = EnvBool(False) SGLANG_DISAGGREGATION_FORCE_QUERY_PREFILL_DP_RANK = EnvBool(False) SGLANG_DISAGGREGATION_SAMPLING_MASK_MAX_TOKENS = EnvInt(0)