我创建了一个部署在Heroku上的Django应用程序。该应用程序正在处理一个重要的后台任务(运行需要 5-10mn(。它涉及抓取数据并创建绘图可视化。后台任务通过 Celeri 应用处理。Celeri和Django之间的沟通是通过Redis完成的。
当地一切正常。在抓取少量数据(具有 50 行的数据帧(的情况下,一切正常。但是一旦我增加使用的数据量(数据帧> 50 行(,Heroku 工作线程就会崩溃,没有任何错误消息。
2020-05-18T12:32:11.945988+00:00 app[web.1]: 10.101.144.240 - - [18/May/2020:12:32:11 +0000] "GET /task/bef2fea5-b7f7-4c37-b32e-2a7888486925/ HTTP/1.1" 200 77 "https://community-detection-instagram.herokuapp.com/parameters/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36"
2020-05-18T12:32:14.039229+00:00 heroku[worker.1]: State changed from up to crashed
2020-05-18T12:32:14.042067+00:00 heroku[worker.1]: State changed from crashed to starting
它总是发生在情节的创建过程中,这是我后台任务的最后一步。
同样,当我只抓取少量数据(即使在生产中(时,可视化效果很好。我认为这可能是内存问题,但看起来我没有使用全部内存。
来自 Heroku 的内存使用情况屏幕
我很想听听你的想法。后台任务对 Heroku/Redis 来说会太重吗?为什么工作线程崩溃而没有任何错误消息?
PS:我没有将抓取的数据存储在数据库中。它"只是"一个 500 行的熊猫数据帧,它是在后台任务的抓取阶段创建的。会不会有问题?
刷新内存仪表板后,看起来是内存问题。
希罗库记忆报告的新屏幕
以防万一有人遇到同样的问题,我不得不升级我的 Heroku 计划才能看到内存报告。