feat:内存监控开关

This commit is contained in:
jxxghp
2025-06-06 13:49:52 +08:00
parent e42d2baf8a
commit de4973a270
4 changed files with 42 additions and 18 deletions
+2
View File
@@ -247,6 +247,8 @@ class ConfigModel(BaseModel):
REPO_GITHUB_TOKEN: Optional[str] = None REPO_GITHUB_TOKEN: Optional[str] = None
# 大内存模式 # 大内存模式
BIG_MEMORY_MODE: bool = False BIG_MEMORY_MODE: bool = False
# 内存使用监控
MEMORY_MONITOR_ENABLE: bool = False
# 全局图片缓存,将媒体图片缓存到本地 # 全局图片缓存,将媒体图片缓存到本地
GLOBAL_IMAGE_CACHE: bool = False GLOBAL_IMAGE_CACHE: bool = False
# 是否启用编码探测的性能模式 # 是否启用编码探测的性能模式
+3
View File
@@ -456,6 +456,9 @@ class EventManager(metaclass=Singleton):
elif class_name.endswith("Chain"): elif class_name.endswith("Chain"):
module_name = f"app.chain.{class_name[:-5].lower()}" module_name = f"app.chain.{class_name[:-5].lower()}"
module = importlib.import_module(module_name) module = importlib.import_module(module_name)
elif class_name.endswith("Helper"):
module_name = f"app.helper.{class_name[:-6].lower()}"
module = importlib.import_module(module_name)
else: else:
module_name = f"app.{class_name.lower()}" module_name = f"app.{class_name.lower()}"
module = importlib.import_module(module_name) module = importlib.import_module(module_name)
+34 -15
View File
@@ -4,11 +4,16 @@ import threading
import time import time
from typing import Optional, Callable, Any from typing import Optional, Callable, Any
from functools import wraps from functools import wraps
from app.core.config import settings
from app.core.event import eventmanager, Event
from app.log import logger from app.log import logger
from app.schemas import ConfigChangeEventData
from app.schemas.types import EventType
from app.utils.singleton import Singleton from app.utils.singleton import Singleton
class MemoryManager(metaclass=Singleton): class MemoryHelper(metaclass=Singleton):
""" """
内存管理工具类,用于监控和优化内存使用 内存管理工具类,用于监控和优化内存使用
""" """
@@ -75,11 +80,27 @@ class MemoryManager(metaclass=Singleton):
logger.info(f"清理后内存: {after_memory['rss']:.1f}MB") logger.info(f"清理后内存: {after_memory['rss']:.1f}MB")
return True return True
return False return False
@eventmanager.register(EventType.ConfigChanged)
def handle_config_changed(self, event: Event):
"""
处理配置变更事件,更新内存监控设置
:param event: 事件对象
"""
if not event:
return
event_data: ConfigChangeEventData = event.event_data
if event_data.key not in ['MEMORY_MONITOR_ENABLE']:
return
self.stop_monitoring()
self.start_monitoring()
def start_monitoring(self): def start_monitoring(self):
""" """
开始内存监控 开始内存监控
""" """
if not settings.MEMORY_MONITOR_ENABLE:
return
if self._monitoring: if self._monitoring:
return return
@@ -95,7 +116,7 @@ class MemoryManager(metaclass=Singleton):
self._monitoring = False self._monitoring = False
if self._monitor_thread: if self._monitor_thread:
self._monitor_thread.join(timeout=5) self._monitor_thread.join(timeout=5)
logger.info("内存监控已停止") logger.info("内存监控已停止")
def _monitor_loop(self): def _monitor_loop(self):
""" """
@@ -142,22 +163,20 @@ def memory_optimized(force_gc_after: bool = False, log_memory: bool = False):
def decorator(func: Callable) -> Callable: def decorator(func: Callable) -> Callable:
@wraps(func) @wraps(func)
def wrapper(*args, **kwargs) -> Any: def wrapper(*args, **kwargs) -> Any:
memory_manager = MemoryManager() if settings.MEMORY_MONITOR_ENABLE:
if log_memory:
if log_memory: before_memory = MemoryHelper().get_memory_usage()
before_memory = memory_manager.get_memory_usage() logger.info(f"{func.__name__} 执行前内存: {before_memory['rss']:.1f}MB")
logger.info(f"{func.__name__} 执行前内存: {before_memory['rss']:.1f}MB")
try: try:
result = func(*args, **kwargs) result = func(*args, **kwargs)
return result return result
finally: finally:
if force_gc_after: if settings.MEMORY_MONITOR_ENABLE:
memory_manager.force_gc() if force_gc_after:
MemoryHelper().force_gc()
if log_memory: if log_memory:
after_memory = memory_manager.get_memory_usage() after_memory = MemoryHelper().get_memory_usage()
logger.info(f"{func.__name__} 执行后内存: {after_memory['rss']:.1f}MB") logger.info(f"{func.__name__} 执行后内存: {after_memory['rss']:.1f}MB")
return wrapper return wrapper
return decorator return decorator
+3 -3
View File
@@ -1,12 +1,12 @@
from app.core.config import settings from app.core.config import settings
from app.helper.memory import MemoryManager from app.helper.memory import MemoryHelper
def init_memory_manager(): def init_memory_manager():
""" """
初始化内存监控器 初始化内存监控器
""" """
memory_manager = MemoryManager() memory_manager = MemoryHelper()
# 设置内存阈值和启动监控 # 设置内存阈值和启动监控
memory_manager.set_threshold(settings.CACHE_CONF['memory']) memory_manager.set_threshold(settings.CACHE_CONF['memory'])
memory_manager.start_monitoring() memory_manager.start_monitoring()
@@ -16,4 +16,4 @@ def stop_memory_manager():
""" """
停止内存监控器 停止内存监控器
""" """
MemoryManager().stop_monitoring() MemoryHelper().stop_monitoring()