当Heroku警告内存配额大大超过(R15)时,Python是否进行垃圾收集?

2024-09-29 17:09:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个后台任务在Heroku上的Celery下运行,它经常得到“errorr14(内存配额超出)”和“errorr15(内存配额大大超出)”的情况。我从数据库加载了很多东西(通过Postgres上的Django),但它应该加载一个大对象,处理它,然后处理引用并加载下一个大对象。在

我的问题是,垃圾收集器是否知道在达到Heroku的内存限制之前运行?我应该手动运行gc吗?在

另一件事是,我的任务有时失败,然后芹菜自动重试,它成功了。它应该是确定性的。我想知道任务完成后是否有什么东西在内存中徘徊,并且在下一个任务开始时仍然占用空间。重新启动工作进程将清除内存并使其成功。也许Django或DB有一些缓存没有被清除?在

我用的是标准尺寸的2x。我可以去performance-m或performance-l,但尽量避免,因为那样会花更多的钱。在


Tags: 对象django内存数据库herokuperformance情况postgres
1条回答
网友
1楼 · 发布于 2024-09-29 17:09:23

问题似乎是我没有使用.iterator()来迭代主查询集。即使我在每次迭代之后释放我正在创建的数据结构,实际的查询结果都会被缓存。在

不幸的是,我不能使用.iterator(),因为我广泛使用prefetch_related。在

我需要某种混合方法。我认为这将涉及批量处理顶级查询集。它不会完全拥有prefetch_related所拥有的有限数量查询的优势,但是它比每个模型对象一个查询要好。在

相关问题 更多 >

    热门问题