mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-02-03 02:25:32 +08:00
feat:内存监控开关
This commit is contained in:
@@ -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
|
||||
# 是否启用编码探测的性能模式
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user