跳转至

已知问题

本页记录当前确认的用户侧可感知问题与规避方案。 如果你的使用场景命中这些条件,建议按文中建议调整部署策略。

示例代码

from tarsio import Struct

for i in range(1_000_000):
    Dynamic = type(f"S{i}", (Struct,), {"x": int})
    _ = Dynamic(1)

这类无界动态建类并实例化的模式,可能导致进程内存持续上升。

核心概念

动态 Struct 子类的内存增长

  • 现象: 动态创建并实例化大量 Struct 子类后,类型对象可能长期存活。
  • 影响: 常驻服务在长时间运行下可能出现明显内存增长。
  • 根因状态: 当前更可能与 PyO3 和 CPython 的类型生命周期交互相关,仍在持续定位。

触发条件

  • 只动态创建类型但不实例化时,问题通常不明显。
  • 在无界循环中持续创建新类型并实例化时,最容易触发。

临时规避

  • 优先缓存并复用 Struct 类型,避免每次请求重新建类。
  • 对必须动态生成 schema 的任务,建议放到独立 worker 进程并周期性重启。
  • 为高风险路径增加内存监控告警和熔断策略。

注意事项

  • 此问题主要影响“动态 schema 生成”场景,静态 schema 项目通常不受影响。
  • 若你确认出现同类现象,建议附最小复现脚本反馈到仓库 Issue。