BodyBalanceEvaluation/MEMORY_OPTIMIZATION_GUIDE.md
2025-07-30 19:09:15 +08:00

226 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 内存优化指南
## 概述
本指南介绍了身体平衡评估系统中WebSocket视频流的内存优化功能帮助您解决浏览器内存占用缓慢增长的问题。
## 问题描述
在长时间运行WebSocket视频流时可能会遇到以下问题
- 浏览器内存使用量持续增长
- 页面响应速度逐渐变慢
- 系统资源占用过高
- 可能导致浏览器崩溃
## 优化方案
### 1. 前端优化
#### 1.1 帧率控制
- **最大FPS限制**: 默认15fps可根据需要调整
- **跳帧机制**: 每3帧显示1帧减少处理负担
- **自适应帧率**: 根据内存使用情况动态调整
#### 1.2 内存监控
- **实时监控**: 每10秒检查一次内存使用情况
- **自动清理**: 内存使用率超过80%时自动垃圾回收
- **手动控制**: 提供手动垃圾回收按钮
#### 1.3 图像缓存优化
- **缓存复用**: 重用Image对象避免频繁创建
- **及时清理**: 及时释放不再使用的图像资源
- **强制重绘**: 使用requestAnimationFrame优化渲染
### 2. 后端优化
#### 2.1 图像压缩
- **尺寸压缩**: 最大分辨率320x240
- **质量压缩**: JPEG质量设为50%
- **编码优化**: 禁用渐进式JPEG启用优化
#### 2.2 内存管理
- **内存限制**: 后端最大内存使用100MB
- **定期检查**: 每50帧检查一次内存使用
- **强制清理**: 内存超限时强制垃圾回收
#### 2.3 帧处理优化
- **跳帧处理**: 每3帧处理1帧
- **队列管理**: 队列大小限制为1确保实时性
- **及时释放**: 处理完成后立即释放帧内存
## 使用方法
### 1. 启动优化版本
确保使用最新的优化版本:
```bash
# 启动后端(已包含内存优化)
python backend/app.py
# 打开前端页面
# 访问 frontend_websocket_example.html
```
### 2. 监控内存使用
在前端页面中:
1. 点击 **"内存使用情况"** 按钮查看当前内存状态
2. 观察以下指标:
- 已使用内存
- 总分配内存
- 内存使用率
- 接收帧数和跳帧率
### 3. 手动优化
当发现内存使用过高时:
1. 点击 **"强制垃圾回收"** 按钮
2. 观察内存使用情况的变化
3. 如果问题持续,考虑刷新页面
### 4. 配置调整
编辑 `memory_config.py` 文件来调整优化参数:
```python
# 前端配置
MAX_FPS = 15 # 降低可减少内存使用
FRAME_SKIP_THRESHOLD = 2 # 增加可减少处理负担
MAX_MEMORY_USAGE_PERCENT = 80 # 调整自动清理阈值
# 后端配置
JPEG_QUALITY = 50 # 降低可减少内存使用
MAX_FRAME_WIDTH = 320 # 降低可减少内存使用
MAX_BACKEND_MEMORY_MB = 100 # 调整内存限制
```
## 性能调优建议
### 1. 根据硬件调整
**低配置设备**:
```python
MAX_FPS = 10
FRAME_SKIP_THRESHOLD = 4
JPEG_QUALITY = 40
MAX_FRAME_WIDTH = 240
```
**高配置设备**:
```python
MAX_FPS = 20
FRAME_SKIP_THRESHOLD = 1
JPEG_QUALITY = 60
MAX_FRAME_WIDTH = 480
```
### 2. 根据网络调整
**慢速网络**:
- 降低帧率和质量
- 增加跳帧比例
- 减小图像尺寸
**快速网络**:
- 可适当提高帧率和质量
- 减少跳帧比例
### 3. 长时间运行优化
对于需要长时间运行的场景:
1. 设置更严格的内存限制
2. 增加自动清理频率
3. 定期刷新页面建议每2-4小时
## 故障排除
### 1. 内存仍然增长
**可能原因**:
- 浏览器不支持强制垃圾回收
- 其他页面或扩展占用内存
- 系统内存不足
**解决方案**:
1. 使用Chrome浏览器并启用 `--enable-precise-memory-info` 标志
2. 关闭其他不必要的标签页
3. 降低优化参数设置
4. 定期刷新页面
### 2. 视频卡顿
**可能原因**:
- 帧率设置过低
- 跳帧比例过高
- 网络延迟
**解决方案**:
1. 适当提高MAX_FPS
2. 减少FRAME_SKIP_THRESHOLD
3. 检查网络连接
4. 优化后端处理性能
### 3. 图像质量差
**可能原因**:
- JPEG质量设置过低
- 图像尺寸压缩过度
**解决方案**:
1. 提高JPEG_QUALITY建议不超过70
2. 增加MAX_FRAME_WIDTH和MAX_FRAME_HEIGHT
3. 平衡质量和内存使用
## 监控和日志
### 1. 前端监控
在浏览器控制台中查看:
```javascript
// 查看内存使用
console.log(performance.memory);
// 查看优化统计
console.log('帧数:', frameCount);
console.log('跳帧数:', frameSkipCount);
```
### 2. 后端日志
查看后端日志中的内存相关信息:
```
[INFO] 内存使用: 45.2MB
[WARNING] 内存使用过高: 105.3MB,强制清理
[INFO] 垃圾回收完成,内存降至: 38.7MB
```
## 最佳实践
1. **定期监控**: 每隔一段时间检查内存使用情况
2. **合理配置**: 根据实际需求调整优化参数
3. **及时清理**: 发现内存异常时及时进行清理
4. **版本更新**: 保持使用最新的优化版本
5. **硬件匹配**: 根据硬件配置调整参数
## 技术原理
### 1. 内存泄漏原因
- 频繁创建Image对象
- Base64字符串累积
- 事件监听器未正确清理
- 浏览器垃圾回收不及时
### 2. 优化原理
- 对象复用减少创建开销
- 及时释放减少内存占用
- 跳帧处理减少处理负担
- 强制垃圾回收释放内存
### 3. 性能平衡
- 内存使用 vs 视频质量
- 实时性 vs 资源占用
- 用户体验 vs 系统稳定性
---
如有其他问题,请查看项目文档或联系技术支持。