auto_trade_sys/docs/多账号与低配服务器优化.md
薇薇安 857128bca9 feat(config, market_scanner, strategy): 增强多账号支持与并发控制
在 `config.py` 中新增多账号扫描配置,支持并发数和错峰扫描设置。更新 `market_scanner.py` 以根据配置动态调整并发请求数,优化资源使用。修改 `strategy.py` 以实现多账号错峰扫描,避免低配服务器的 CPU 过载,提升系统稳定性和效率。
2026-02-16 18:28:38 +08:00

4.3 KiB
Raw Blame History

多账号与低配服务器负载优化

针对 2 CPU / 4 GB 等低配服务器、多账号交易进程同时运行时的 CPU 打满问题,说明主要负载来源与可调参数。


一、负载从哪里来

1. 每个账号 = 一个独立进程

  • 每个 ATS_ACCOUNT_ID 一个 Python 进程(如 4 个账号 = 4 个进程)。
  • 每个进程内:市场扫描持仓同步User Data Stream、若为 Leader 还有 Ticker/K线/BookTicker WS 及写 Redis。

2. CPU 最重的部分:市场扫描

  • 扫描阶段:对「初步筛选」后的几十个交易对,并发做「拉 K 线 + 算技术指标RSI/MACD/布林/ATR/EMA」。
  • 指标是纯 Python 循环,每个 symbol 算 5+ 个指标,单次扫描就有大量计算。
  • 并发度:由 SCAN_CONCURRENT_SYMBOLS 控制「同时分析几个 symbol」默认已改为 2(原 3
  • 多进程叠加:若 4 个进程同时开始扫描,相当于 4 × 2 = 8 路同时在算指标2 核很容易打满。

因此:扫描并发多账号是否同时扫是 CPU 的两大主要来源。

3. 其他相对较轻的部分

模块 说明 负载
User Data Stream 每进程 1 个 WS收订单/持仓/余额
市场 WSTicker/K线/Book Leader 进程建连接并写 Redis其余进程只从 Redis 读 Leader 中,其余低
Redis 刷新 每 2 秒从 Redis 拉 Ticker/Book 到本地
持仓同步 POSITION_SYNC_INTERVAL(如 60s一次 REST 同步 低~中(与持仓数有关)
配置重载 每轮扫描前从 Redis 重载配置
exchange_info / 行情 API 已优先走 DB/Redis 缓存,未命中才请求 API 中(主要在未命中时)

二、已做的可调项(直接生效)

1. 扫描并发:SCAN_CONCURRENT_SYMBOLS

  • 含义:单进程内,同时分析多少个交易对K 线 + 指标)。
  • 默认2(适合 2 CPU 4G、多账号
  • 建议
    • 2 CPU 4G、多账号2
    • 单账号或 4 CPU+:可试 35
  • 配置:在 trading_configconfig.pySCAN_CONCURRENT_SYMBOLS 中设置数字110

2. 多账号错峰:SCAN_STAGGER_BY_ACCOUNT + SCAN_STAGGER_SEC

  • 含义:按 ATS_ACCOUNT_ID 延迟首次扫描开始时间,避免多进程在同一时刻一起扫。
  • 默认SCAN_STAGGER_BY_ACCOUNT=TrueSCAN_STAGGER_SEC=60
  • 效果:例如 4 个账号,则 account 1 立即扫2 延迟 60s3 延迟 120s4 延迟 180s之后仍按各自 SCAN_INTERVAL 循环,自然错开。
  • 配置
    • SCAN_STAGGER_BY_ACCOUNTtrue/false
    • SCAN_STAGGER_SEC:每多一个账号增加的延迟秒数(建议 60120

三、还可调节的项(按需)

配置项 说明 建议2 CPU 4G
SCAN_INTERVAL 扫描间隔(秒) 90015 分钟)或 180030 分钟),减少扫描频率
MAX_SCAN_SYMBOLS 参与扫描的最大交易对数 200300减少进入「详细分析」的 symbol 数
MIN_CHANGE_PERCENT / MIN_VOLUME_24H 初步筛选更严 略提高可减少 pre_filtered 数量,从而减少指标计算量
POSITION_SYNC_INTERVAL 持仓同步间隔(秒) 60 或 120略增可减 REST 调用
同一台机账号数 2 CPU 4G 上跑的进程数 建议 ≤ 34若仍卡可先跑 2 个账号

四、推荐组合2 CPU 4G、多账号

  • SCAN_CONCURRENT_SYMBOLS = 2
  • SCAN_STAGGER_BY_ACCOUNT = true
  • SCAN_STAGGER_SEC = 60
  • SCAN_INTERVAL = 900(或 1800 若可接受更慢扫描)
  • MAX_SCAN_SYMBOLS = 200300(可选)

若仍 CPU 偏高,可再:

  • SCAN_CONCURRENT_SYMBOLS 降为 1,或
  • 同一台机器只跑 2 个账号,其余账号迁到另一台或扩容后再加。

五、如何确认是否生效

  • 看日志:
    • 多账号错峰应出现类似「多账号错峰account_id=2延迟 60 秒后开始首次扫描」。
    • 扫描并发:无单独日志,可通过「扫描耗时」和 CPU 曲线判断。
  • top/htop 观察:多进程同时扫描时 CPU 应比「错峰 + 并发 2」时明显更低、更平稳。