mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-05-24 07:26:50 +00:00
Add comprehensive memory analysis tool with guide and test script
Co-authored-by: jxxghp <jxxghp@163.com>
This commit is contained in:
131
test_memory_analysis.py
Normal file
131
test_memory_analysis.py
Normal file
@@ -0,0 +1,131 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
内存分析工具测试脚本
|
||||
用于验证内存分析工具的功能和修复后的效果
|
||||
"""
|
||||
|
||||
import sys
|
||||
import os
|
||||
import time
|
||||
import gc
|
||||
|
||||
# 添加项目路径
|
||||
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'app'))
|
||||
|
||||
from app.helper.memory import MemoryHelper
|
||||
from app.log import logger
|
||||
|
||||
def test_memory_analysis():
|
||||
"""测试内存分析功能"""
|
||||
print("开始测试内存分析工具...")
|
||||
|
||||
# 创建内存分析器实例
|
||||
memory_helper = MemoryHelper()
|
||||
|
||||
# 1. 测试内存摘要
|
||||
print("\n1. 测试内存摘要:")
|
||||
summary = memory_helper.get_memory_summary()
|
||||
for key, value in summary.items():
|
||||
print(f" {key}: {value:.2f}")
|
||||
|
||||
# 2. 测试强制垃圾回收
|
||||
print("\n2. 测试强制垃圾回收:")
|
||||
collected = memory_helper.force_garbage_collection()
|
||||
print(f" 清理了 {collected} 个对象")
|
||||
|
||||
# 3. 创建一些测试数据来模拟内存使用
|
||||
print("\n3. 创建测试数据:")
|
||||
test_data = {
|
||||
'large_list': [i for i in range(100000)], # 约2.4MB
|
||||
'large_dict': {f'key_{i}': f'value_{i}' for i in range(50000)}, # 约3MB
|
||||
'large_string': 'x' * 1000000, # 约1MB
|
||||
}
|
||||
print(f" 创建了测试数据,包含 {len(test_data)} 个大对象")
|
||||
|
||||
# 4. 再次获取内存摘要
|
||||
print("\n4. 创建测试数据后的内存摘要:")
|
||||
summary_after = memory_helper.get_memory_summary()
|
||||
for key, value in summary_after.items():
|
||||
print(f" {key}: {value:.2f}")
|
||||
|
||||
# 5. 计算内存增长
|
||||
print("\n5. 内存增长分析:")
|
||||
if summary and summary_after:
|
||||
total_growth = summary_after['total_memory_mb'] - summary['total_memory_mb']
|
||||
python_growth = summary_after['python_objects_mb'] - summary['python_objects_mb']
|
||||
unaccounted_growth = summary_after['unaccounted_mb'] - summary['unaccounted_mb']
|
||||
|
||||
print(f" 总内存增长: {total_growth:.2f} MB")
|
||||
print(f" Python对象增长: {python_growth:.2f} MB")
|
||||
print(f" 未统计内存增长: {unaccounted_growth:.2f} MB")
|
||||
|
||||
# 6. 创建详细分析报告
|
||||
print("\n6. 创建详细分析报告:")
|
||||
analysis_file = memory_helper.create_detailed_memory_analysis()
|
||||
if analysis_file:
|
||||
print(f" 详细分析报告已保存到: {analysis_file}")
|
||||
|
||||
# 显示报告的前几行
|
||||
print("\n 报告预览:")
|
||||
try:
|
||||
with open(analysis_file, 'r', encoding='utf-8') as f:
|
||||
lines = f.readlines()[:20]
|
||||
for line in lines:
|
||||
print(f" {line.rstrip()}")
|
||||
print(" ...")
|
||||
except Exception as e:
|
||||
print(f" 读取报告失败: {e}")
|
||||
|
||||
# 7. 清理测试数据
|
||||
print("\n7. 清理测试数据:")
|
||||
del test_data
|
||||
collected = memory_helper.force_garbage_collection()
|
||||
print(f" 清理了 {collected} 个对象")
|
||||
|
||||
# 8. 最终内存摘要
|
||||
print("\n8. 清理后的内存摘要:")
|
||||
final_summary = memory_helper.get_memory_summary()
|
||||
for key, value in final_summary.items():
|
||||
print(f" {key}: {value:.2f}")
|
||||
|
||||
print("\n内存分析工具测试完成!")
|
||||
|
||||
def test_memory_growth_detection():
|
||||
"""测试内存增长检测功能"""
|
||||
print("\n开始测试内存增长检测...")
|
||||
|
||||
memory_helper = MemoryHelper()
|
||||
|
||||
# 获取初始内存
|
||||
initial_summary = memory_helper.get_memory_summary()
|
||||
print(f"初始内存: {initial_summary.get('total_memory_mb', 0):.2f} MB")
|
||||
|
||||
# 创建一些数据
|
||||
data_list = []
|
||||
for i in range(10):
|
||||
data_list.append([j for j in range(10000)]) # 每次约240KB
|
||||
time.sleep(0.1) # 短暂延迟
|
||||
|
||||
# 获取最终内存
|
||||
final_summary = memory_helper.get_memory_summary()
|
||||
print(f"最终内存: {final_summary.get('total_memory_mb', 0):.2f} MB")
|
||||
|
||||
# 计算增长
|
||||
if initial_summary and final_summary:
|
||||
growth = final_summary['total_memory_mb'] - initial_summary['total_memory_mb']
|
||||
print(f"内存增长: {growth:.2f} MB")
|
||||
|
||||
# 清理
|
||||
del data_list
|
||||
memory_helper.force_garbage_collection()
|
||||
|
||||
print("内存增长检测测试完成!")
|
||||
|
||||
if __name__ == "__main__":
|
||||
try:
|
||||
test_memory_analysis()
|
||||
test_memory_growth_detection()
|
||||
except Exception as e:
|
||||
print(f"测试过程中出现错误: {e}")
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
Reference in New Issue
Block a user