已知问题
本页记录当前确认的用户侧可感知问题与规避方案。 如果你的使用场景命中这些条件,建议按文中建议调整部署策略。
示例代码
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。