From 837111b17e36515cb77d456bd4a1b3225b7756ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B4=94=E6=B0=B8=E4=BA=AE?= <702625325@qq.com> Date: Sat, 22 Feb 2025 16:23:50 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E5=A1=AB=E5=8A=A0=E5=85=B7=E4=BD=93?= =?UTF-8?q?=E5=8D=A0=E7=94=A8=E8=BF=9B=E7=A8=8B=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- astrbot/dashboard/server.py | 28 +++++++++++++++++++++++++++- requirements.txt | 1 + 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/astrbot/dashboard/server.py b/astrbot/dashboard/server.py index 7cb7f95ae..e3f28cb55 100644 --- a/astrbot/dashboard/server.py +++ b/astrbot/dashboard/server.py @@ -4,6 +4,7 @@ import asyncio import os import socket import sys +import psutil from astrbot.core.config.default import VERSION from quart import Quart, request, jsonify, g from quart.logging import default_handler @@ -88,6 +89,28 @@ class AstrBotDashboard(): # 如果出现异常,保守起见认为端口可能被占用 return True + def get_process_using_port(self, port: int) -> str: + """获取占用端口的进程详细信息""" + try: + for conn in psutil.net_connections(kind='inet'): + if conn.laddr.port == port: + try: + process = psutil.Process(conn.pid) + # 获取详细信息 + proc_info = [ + f"进程名: {process.name()}", + f"PID: {process.pid}", + f"执行路径: {process.exe()}", + f"工作目录: {process.cwd()}", + f"启动命令: {' '.join(process.cmdline())}" + ] + return "\n ".join(proc_info) + except (psutil.NoSuchProcess, psutil.AccessDenied) as e: + return f"无法获取进程详细信息(可能需要管理员权限): {str(e)}" + return "未找到占用进程" + except Exception as e: + return f"获取进程信息失败: {str(e)}" + def run(self): try: ip_addr = get_local_ip_addresses() @@ -99,7 +122,10 @@ class AstrBotDashboard(): port = int(port) if self.check_port_in_use(port): - logger.error(f"错误:端口 {port} 已被占用,请确保:\n" + process_info = self.get_process_using_port(port) + logger.error(f"错误:端口 {port} 已被占用\n" + f"占用信息: \n {process_info}\n" + f"请确保:\n" f"1. 没有其他 AstrBot 实例正在运行\n" f"2. 端口 {port} 没有被其他程序占用\n" f"3. 如需使用其他端口,请修改配置文件") diff --git a/requirements.txt b/requirements.txt index 39abe351d..441d73d47 100644 --- a/requirements.txt +++ b/requirements.txt @@ -18,6 +18,7 @@ apscheduler docstring_parser aiodocker silk-python +psutil>=5.8.0 lark-oapi ormsgpack