# 负载问题排查与快速降负载指南

## 当前负载：1.59（2 CPU 系统）

**Load average: 1.59, 0.55, 0.24** 表示：
- **1 分钟平均**：1.59（接近 2 CPU 满载，约 79.5% CPU 使用）
- **5 分钟平均**：0.55（之前较低，说明是最近才涨起来的）
- **15 分钟平均**：0.24（历史较低）

## 快速诊断

运行诊断脚本：
```bash
cd backend
./诊断负载.sh
```

这会显示：
- CPU 占用最高的进程
- Python 交易服务进程的资源占用
- 是否有同步操作在运行
- 数据库连接数
- 内存和 I/O 状态

## 常见原因

### 1. **订单同步正在运行**（最可能）

如果前端正在执行「同步订单」（特别是「全量同步 + 30 天」），会：
- 从币安拉取**所有交易对**的历史订单（可能几百个 symbol × 每个 symbol 的订单）
- 对每个订单做多次数据库查询（`get_by_exit_order_id`、`get_by_symbol` 等）
- 如果有 1000 个订单，可能产生 3000+ 次数据库查询

**解决方法**：
- **等待同步完成**（不要手动取消，否则数据可能不完整）
- 如果必须停止，可以在前端取消，但已处理的数据会保留
- 下次同步时选择**更短的时间范围**（如 7 天而不是 30 天）
- 或**不勾选「全量同步」**（只同步数据库中已有的交易对）

### 2. **市场扫描正在运行**

交易服务会定期扫描市场并计算技术指标（RSI、MACD、布林带、ATR 等），这是 CPU 密集操作。

**检查方法**：
```bash
# 查看交易服务日志
tail -f trading_system/logs/trading_*.log | grep -i "扫描\|scan"
```

**临时降负载**：
在配置中设置 `SCAN_ENABLED=False` 暂停扫描（但会停止策略交易）

### 3. **多个账号进程同时运行**

如果有多个账号，每个账号一个进程，且**同时**开始扫描，负载会叠加。

**检查方法**：
```bash
ps aux | grep "python.*trading\|python.*main" | grep -v grep
```

**优化**：
- 确保 `SCAN_CONCURRENT_SYMBOLS=2`（2 CPU 4G 多账号建议 2）
- 如果仍高，可降为 `1`

### 4. **数据库查询慢**

虽然已优化了订单列表查询，但同步操作仍可能产生大量查询。

**检查方法**：
```bash
# 如果有 MySQL 慢查询日志
tail -f /var/log/mysql/slow.log
```

## 快速降负载方法

### 方法 1：等待同步完成（推荐）

如果正在同步订单，**等待完成**是最安全的做法。同步完成后负载会自动降下来。

### 方法 2：降低扫描并发

在配置中设置：
```json
{
  "SCAN_CONCURRENT_SYMBOLS": 1
}
```

这会降低市场扫描的 CPU 占用，但扫描时间会变长。

### 方法 3：暂停市场扫描（临时）

在配置中设置：
```json
{
  "SCAN_ENABLED": false
}
```

**注意**：这会停止策略交易，只在紧急降负载时使用。

### 方法 4：重启交易服务（最后手段）

如果进程异常或卡死：
```bash
# 通过 supervisor
supervisorctl restart auto_sys_*

# 或手动
pkill -f "python.*trading"
# 然后重新启动
```

## 预防措施

1. **同步订单时**：
   - 优先选择**较短时间范围**（7 天而不是 30 天）
   - **不勾选「全量同步」**（除非确实需要补全所有交易对）
   - 避免在交易高峰期同步

2. **配置优化**：
   - `SCAN_CONCURRENT_SYMBOLS=2`（2 CPU 4G 多账号）
   - `SCAN_INTERVAL_SEC` 不要太短（建议 ≥ 300 秒）

3. **监控**：
   - 定期运行 `./诊断负载.sh` 检查系统状态
   - 关注日志中的错误和警告

## 负载正常范围

对于 **2 CPU 4G** 系统：
- **正常**：Load average < 1.0（CPU 使用率 < 50%）
- **偏高**：Load average 1.0-1.5（CPU 使用率 50-75%）
- **过高**：Load average > 1.5（CPU 使用率 > 75%，需要关注）
- **满载**：Load average ≥ 2.0（CPU 100% 使用，有进程在等待）

当前 **1.59** 属于**偏高**，需要排查原因。
