mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-09-05 23:47:41 +08:00
fix memory snapshot
This commit is contained in:
+1
-1
@@ -250,7 +250,7 @@ class ConfigModel(BaseModel):
|
|||||||
# 是否启用内存监控
|
# 是否启用内存监控
|
||||||
MEMORY_ANALYSIS: bool = False
|
MEMORY_ANALYSIS: bool = False
|
||||||
# 内存快照间隔(分钟)
|
# 内存快照间隔(分钟)
|
||||||
MEMORY_SNAPSHOT_INTERVAL: int = 30
|
MEMORY_SNAPSHOT_INTERVAL: int = 60
|
||||||
# 保留的内存快照文件数量
|
# 保留的内存快照文件数量
|
||||||
MEMORY_SNAPSHOT_KEEP_COUNT: int = 20
|
MEMORY_SNAPSHOT_KEEP_COUNT: int = 20
|
||||||
# 全局图片缓存,将媒体图片缓存到本地
|
# 全局图片缓存,将媒体图片缓存到本地
|
||||||
|
|||||||
+17
-3
@@ -1,4 +1,5 @@
|
|||||||
import gc
|
import gc
|
||||||
|
import sys
|
||||||
import threading
|
import threading
|
||||||
import time
|
import time
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
@@ -300,8 +301,8 @@ class MemoryHelper(metaclass=Singleton):
|
|||||||
class_name = f"<unknown_class_{id(obj_class)}>"
|
class_name = f"<unknown_class_{id(obj_class)}>"
|
||||||
logger.debug(f"获取类名失败: {e}")
|
logger.debug(f"获取类名失败: {e}")
|
||||||
|
|
||||||
# 计算对象的内存使用
|
# 计算对象本身的内存使用(不包括引用对象,避免重复计算)
|
||||||
size_bytes = asizeof.asizeof(obj)
|
size_bytes = sys.getsizeof(obj)
|
||||||
if size_bytes < 100: # 跳过太小的对象
|
if size_bytes < 100: # 跳过太小的对象
|
||||||
continue
|
continue
|
||||||
|
|
||||||
@@ -334,9 +335,11 @@ class MemoryHelper(metaclass=Singleton):
|
|||||||
def _get_large_variables(self, limit=100):
|
def _get_large_variables(self, limit=100):
|
||||||
"""
|
"""
|
||||||
获取大内存变量信息,按内存大小排序
|
获取大内存变量信息,按内存大小排序
|
||||||
|
使用已计算对象集合避免重复计算
|
||||||
"""
|
"""
|
||||||
large_vars = []
|
large_vars = []
|
||||||
processed_count = 0
|
processed_count = 0
|
||||||
|
calculated_objects = set() # 避免重复计算
|
||||||
|
|
||||||
# 获取所有对象
|
# 获取所有对象
|
||||||
all_objects = muppy.get_objects()
|
all_objects = muppy.get_objects()
|
||||||
@@ -347,8 +350,18 @@ class MemoryHelper(metaclass=Singleton):
|
|||||||
if isinstance(obj, type):
|
if isinstance(obj, type):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
# 跳过已经计算过的对象
|
||||||
|
obj_id = id(obj)
|
||||||
|
if obj_id in calculated_objects:
|
||||||
|
continue
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# 计算对象大小
|
# 首先使用 sys.getsizeof 快速筛选
|
||||||
|
shallow_size = sys.getsizeof(obj)
|
||||||
|
if shallow_size < 1024: # 只处理大于1KB的对象
|
||||||
|
continue
|
||||||
|
|
||||||
|
# 对于较大的对象,使用 asizeof 进行深度计算
|
||||||
size_bytes = asizeof.asizeof(obj)
|
size_bytes = asizeof.asizeof(obj)
|
||||||
|
|
||||||
# 只处理大于10KB的对象,提高分析效率
|
# 只处理大于10KB的对象,提高分析效率
|
||||||
@@ -357,6 +370,7 @@ class MemoryHelper(metaclass=Singleton):
|
|||||||
|
|
||||||
size_mb = size_bytes / 1024 / 1024
|
size_mb = size_bytes / 1024 / 1024
|
||||||
processed_count += 1
|
processed_count += 1
|
||||||
|
calculated_objects.add(obj_id)
|
||||||
|
|
||||||
# 获取对象信息
|
# 获取对象信息
|
||||||
var_info = self._get_variable_info(obj, size_mb)
|
var_info = self._get_variable_info(obj, size_mb)
|
||||||
|
|||||||
+1
-1
@@ -18,6 +18,6 @@ DB_TIMEOUT=60
|
|||||||
# 是否启用内存监控,开启后将定期生成内存快照文件
|
# 是否启用内存监控,开启后将定期生成内存快照文件
|
||||||
MEMORY_ANALYSIS=false
|
MEMORY_ANALYSIS=false
|
||||||
# 内存快照间隔(分钟)
|
# 内存快照间隔(分钟)
|
||||||
MEMORY_SNAPSHOT_INTERVAL=30
|
MEMORY_SNAPSHOT_INTERVAL=60
|
||||||
# 保留的内存快照文件数量
|
# 保留的内存快照文件数量
|
||||||
MEMORY_SNAPSHOT_KEEP_COUNT=20
|
MEMORY_SNAPSHOT_KEEP_COUNT=20
|
||||||
Reference in New Issue
Block a user