You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python多进程脚本中malloc释放内存无法复用问题求助

PyTorch多进程脚本内存异常:已释放内存无法复用(Debian下malloc相关)

我有一个基于PyTorch多进程的Python脚本,依赖部分C/C++库。主循环每次迭代时,top显示内存占用持续增长,但理论上迭代间不应有大对象被持续引用。然而用Python的tracemalloc检测仅显示约100MiB内存占用,top却显示30GiB。

排查结果

为定位问题,让脚本运行1.5次迭代后中止生成core dump,用chap分析得到以下结果:

chap> count used
3547398 allocations use 0xa990c7f0 (2,844,837,872) bytes.
chap> count free
34154 allocations use 0x4ff33cc08 (21,461,453,832) bytes.
chap> count leaked
41752 allocations use 0x2cef18 (2,944,792) bytes.

可见仅存在少量内存泄漏或被占用,但有近21GB已释放内存。第一次迭代的内存已被标记为释放,但后续无法再使用,表现类似内存泄漏但并非真正泄漏。

假设与环境特征

我的假设:Python多进程与malloc存在异常交互,导致特定进程分配释放的内存无法被其他进程使用,进程结束后该内存也无法被脚本其他部分复用。

环境相关信息:

  • 该问题仅在Debian机器出现,CentOS环境下无此问题
  • 使用jemalloc时无此问题,因此确定与malloc实现相关

复现代码

mylist = [...]
model = PytorchModel()
for el in mylist:
   ds = PytorchDataset()
   dl = PytorchDataloader(num_workers=32)
   for x, y in dl:
      # 用x、y和model执行操作
      # x和y最初为C对象,转换为numpy数组后转为torch张量

外层循环每次迭代后,仅model被保留引用,且model不会存储循环内创建的对象,这已被内存分配标记为free所证实。分配内存的进程在第二层循环结束后终止,但它们的"free"内存从未归还系统。

求助建议

目前我陷入了困境,恳请各位提供排查或解决的建议。

内容的提问来源于stack exchange,提问作者florobax

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 01:20:23