在django下使用celery作为异步任务系统,十分方便。
同时celery也提供定时任务机制,celery beat。使用celery beat 可以为我们提供 cron,schedule 形式的定时任务。
在django下使用celery beat的过程中,发现了 celery beat进程 占用内存非常大,而且一直不释放。
怀疑其有内存占用不释放的可能。
因为之前使用django的时候,就知道在django中开启DEBUG模式,会为每次的SQL查询 缓存结果。
celery beat 作为 定时任务的timer和heartbeat程序,是长期运行的,而我使用了MYSQL作为存储定时任务的backend。因为每次heartbeat和timer产生的sql查询在开启了DEBUG模式下的django环境中,都会缓存查询结果集。因此 celery beat占用的 内存会一直不释放。在我的线上环境中 达到10G内存占用!
解决: 关掉django的DEBUG模式,在setting中,设置DEBUG=False 即可。
关闭DEBUG模式后的celery beat程序 的内存占用大概 一直维持在150M左右。