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