auto_trade_sys/docs/common/单账号内存评估与Redis减压.md
薇薇安 13a0e7d580 delete: 移除过时的文档与代码文件
删除了多个不再使用的文档和代码文件,包括交易更新推送、条件订单推送、REST API 文档、WebSocket API 文档及相关的策略分析文档。这些文件的移除有助于清理代码库,确保项目的整洁性与可维护性。
2026-02-20 17:49:00 +08:00

2.7 KiB
Raw Permalink Blame History

单账号交易服务内存评估与 Redis 减压

1. 单账号合理内存区间

组成部分 预估范围 说明
Python 解释器 + asyncio 5080 MB 进程基础
aiohttp + WebSocket 连接 x4 2050 MB UserData / K线 / Ticker24h / BookTicker
Redis 客户端连接与缓冲 515 MB 远端 Valkey
各模块小缓存(有上限) 520 MB 价格、symbol_info、持仓等已限制条数
策略/扫描/持仓状态 1030 MB active_positions、top_symbols 等
分配器碎片、未归还 OS 50150 MB Python 常见
合计(合理区间) 250400 MB 单账号、设计正常时

结论:单账号约 250400 MB 属正常;500 MB 偏上但尚可接受;若持续升到 700 MB+ 则偏异常。

你当前「多了约 500 MB」无服务约 720 MB开服务约 1223 MB → 交易进程约 500 MB,处于偏上、可接受范围。目标是通过 Redis 把压力放到远端,把进程压到 300 MB 左右 并稳定。

2. 当前仍占进程内存的来源

  • Ticker24h / BookTickerrefresh 循环每 2 秒从 Redis 拉全量(最多 500 条)回进程,进程内常驻一份完整拷贝(约 200+ 条 × 若干 KB是主要可优化点。
  • K 线Leader 已只写 Redis进程内仅少量元数据和待写队列占比已较小。
  • 持仓/余额:有 Redis 时只写 Redis进程内几乎不保留。
  • 价格 / symbol_info:有 Redis 时仅降级写,条数有上限,占比小。

因此,把 Ticker24h/BookTicker 改为“只从 Redis 按需读、进程内不再保留全量回填”,是当前最有效的 Redis 减压手段。

3. 已实现Ticker24h/BookTicker 完全用 Redis进程内不保留全量

  • Leader 不变WS 收到后只写 Redis并写入 market:ticker_24h:updated_at / market:book_ticker:updated_at(时间戳,供 refresh 判断是否新鲜)。
    • Ticker24hget_tickers_24h_from_redis(redis_cache),由 market_scanner 在 is_ticker_24h_cache_fresh() 为 True 时 await 调用,数据全部来自 Redis。
    • BookTickerget_book_ticker_from_redis(redis_cache, symbol),由 position_manager、binance_client 在有 redis_cache 时 await 调用。
  • refresh 循环:只从 Redis 读取 updated_at 并写回 _ticker_24h_updated_at / _book_ticker_updated_at不再拉全量数据,进程内 _ticker_24h_cache / _book_ticker_cache 在有 Redis 时保持为空。
  • 进程内:不再保留 200500 条 ticker/book_ticker单账号进程内存预计可再降约 50150MB稳定在约 300400MB,压力由远端 Redis 承担。