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

View File

@@ -247,6 +247,8 @@ class ConfigModel(BaseModel):
REPO_GITHUB_TOKEN: Optional[str] = None
# 大内存模式
BIG_MEMORY_MODE: bool = False
# 内存使用监控
MEMORY_MONITOR_ENABLE: bool = False
# 全局图片缓存,将媒体图片缓存到本地
GLOBAL_IMAGE_CACHE: bool = False
# 是否启用编码探测的性能模式

View File

@@ -456,6 +456,9 @@ class EventManager(metaclass=Singleton):
elif class_name.endswith("Chain"):
module_name = f"app.chain.{class_name[:-5].lower()}"
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:
module_name = f"app.{class_name.lower()}"
module = importlib.import_module(module_name)

View File

@@ -4,11 +4,16 @@ import threading
import time
from typing import Optional, Callable, Any
from functools import wraps
from app.core.config import settings
from app.core.event import eventmanager, Event
from app.log import logger
from app.schemas import ConfigChangeEventData
from app.schemas.types import EventType
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")
return True
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):
"""
开始内存监控
"""
if not settings.MEMORY_MONITOR_ENABLE:
return
if self._monitoring:
return
@@ -95,7 +116,7 @@ class MemoryManager(metaclass=Singleton):
self._monitoring = False
if self._monitor_thread:
self._monitor_thread.join(timeout=5)
logger.info("内存监控已停止")
logger.info("内存监控已停止")
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:
@wraps(func)
def wrapper(*args, **kwargs) -> Any:
memory_manager = MemoryManager()
if log_memory:
before_memory = memory_manager.get_memory_usage()
logger.info(f"{func.__name__} 执行前内存: {before_memory['rss']:.1f}MB")
if settings.MEMORY_MONITOR_ENABLE:
if log_memory:
before_memory = MemoryHelper().get_memory_usage()
logger.info(f"{func.__name__} 执行前内存: {before_memory['rss']:.1f}MB")
try:
result = func(*args, **kwargs)
return result
finally:
if force_gc_after:
memory_manager.force_gc()
if log_memory:
after_memory = memory_manager.get_memory_usage()
logger.info(f"{func.__name__} 执行后内存: {after_memory['rss']:.1f}MB")
if settings.MEMORY_MONITOR_ENABLE:
if force_gc_after:
MemoryHelper().force_gc()
if log_memory:
after_memory = MemoryHelper().get_memory_usage()
logger.info(f"{func.__name__} 执行后内存: {after_memory['rss']:.1f}MB")
return wrapper
return decorator

View File

@@ -1,12 +1,12 @@
from app.core.config import settings
from app.helper.memory import MemoryManager
from app.helper.memory import MemoryHelper
def init_memory_manager():
"""
初始化内存监控器
"""
memory_manager = MemoryManager()
memory_manager = MemoryHelper()
# 设置内存阈值和启动监控
memory_manager.set_threshold(settings.CACHE_CONF['memory'])
memory_manager.start_monitoring()
@@ -16,4 +16,4 @@ def stop_memory_manager():
"""
停止内存监控器
"""
MemoryManager().stop_monitoring()
MemoryHelper().stop_monitoring()