From 9cc4d6c8086ca5cf25f96b427d4cf0d9aaff5cca Mon Sep 17 00:00:00 2001 From: Siyu Wu Date: Wed, 17 Dec 2025 21:40:00 +0000 Subject: [PATCH] feat: replace gunicorn with hypercorn for http2 (h2c) support --- lightllm/server/api_start.py | 20 +++++++------------- lightllm/server/req_id_generator.py | 6 +++++- requirements.txt | 2 +- 3 files changed, 13 insertions(+), 15 deletions(-) diff --git a/lightllm/server/api_start.py b/lightllm/server/api_start.py index 9cc3d38c2..51c536ada 100644 --- a/lightllm/server/api_start.py +++ b/lightllm/server/api_start.py @@ -337,13 +337,11 @@ def normal_or_p_d_start(args): ], ) - # 启动 gunicorn + # 启动 Hypercorn command = [ - "gunicorn", + "hypercorn", "--workers", f"{args.httpserver_workers}", - "--worker-class", - "uvicorn.workers.UvicornWorker", "--bind", f"{args.host}:{args.port}", "--log-level", @@ -353,7 +351,7 @@ def normal_or_p_d_start(args): "--error-logfile", "-", "lightllm.server.api_http:app", - "--timeout", + "--read-timeout", f"{get_lightllm_gunicorn_time_out_seconds()}", "--keep-alive", f"{get_lightllm_gunicorn_keep_alive()}", @@ -407,11 +405,9 @@ def pd_master_start(args): ) command = [ - "gunicorn", + "hypercorn", "--workers", "1", - "--worker-class", - "uvicorn.workers.UvicornWorker", "--bind", f"{args.host}:{args.port}", "--log-level", @@ -422,7 +418,7 @@ def pd_master_start(args): "-", "--preload", "lightllm.server.api_http:app", - "--timeout", + "--read-timeout", f"{get_lightllm_gunicorn_time_out_seconds()}", "--keep-alive", f"{get_lightllm_gunicorn_keep_alive()}", @@ -449,11 +445,9 @@ def config_server_start(args): set_env_start_args(args) command = [ - "gunicorn", + "hypercorn", "--workers", "1", - "--worker-class", - "uvicorn.workers.UvicornWorker", "--bind", f"{args.config_server_host}:{args.config_server_port}", "--log-level", @@ -464,7 +458,7 @@ def config_server_start(args): "-", "--preload", "lightllm.server.config_server.api_http:app", - "--timeout", + "--read-timeout", f"{get_lightllm_gunicorn_time_out_seconds()}", "--keep-alive", f"{get_lightllm_gunicorn_keep_alive()}", diff --git a/lightllm/server/req_id_generator.py b/lightllm/server/req_id_generator.py index 9bf9040c3..f7c099c29 100644 --- a/lightllm/server/req_id_generator.py +++ b/lightllm/server/req_id_generator.py @@ -125,10 +125,14 @@ def _find_sibling_processes(): # 查找兄弟进程 sibling_processes = [] - for proc in psutil.process_iter(["pid", "name"]): + for proc in psutil.process_iter(["pid", "name", "cmdline"]): try: # 检查是否是兄弟进程(同一父进程且不是当前进程) if proc.pid != current_pid and proc.ppid() == parent_process.pid: + # 过滤掉 multiprocessing.resource_tracker 进程 + cmdline = proc.cmdline() + if cmdline and "multiprocessing.resource_tracker" in " ".join(cmdline): + continue sibling_processes.append(proc) except (psutil.NoSuchProcess, psutil.AccessDenied): continue diff --git a/requirements.txt b/requirements.txt index 23c59b779..cce994379 100644 --- a/requirements.txt +++ b/requirements.txt @@ -79,7 +79,7 @@ ujson==5.10.0 frozendict==2.4.6 atomics==1.0.3 easydict==1.13 -gunicorn==23.0.0 +hypercorn==0.18.0 flashinfer-python==0.2.4 sgl-kernel==0.3.7.post1 httpx==0.28.1