我正在使用 django、celery 和 rabbitmq 运行 2 个定期任务和 6 个临时任务。所有任务都位于 (app)/tasks.py 中。周期性任务和临时任务被分成两个单独的队列(high_priority_queue 和 low_priority_queue)。
我为节拍和两个队列设置了三个主管命令:
$ ./manage.py celeryd --concurrency=1 --verbosity=3 --loglevel=INFO --beat
$ ./manage.py celeryd --concurrency=1 --autoscale=2,1 --verbosity=3 --loglevel=INFO --queues=high_priority_queue
$ ./manage.py celeryd --concurrency=1 --autoscale=2,1 --verbosity=3 --loglevel=INFO --queues=low_priority_queue
tasks.py 文件大约有 686 行 python,主要用于网络和数据库工作。有 15 行导入和大约 14 个 Django 模型。一个导入行中的模型类被导入。
在我的 ubuntu 服务器上,我可以看到每个线程正在使用 41-48MB 的 RES 内存。我觉得这很多,我想知道是否有办法降低每个线程的 RES 内存使用量。我可以做一个代码组织技巧吗?我应该在每个任务中使用模型之前就导入模型吗?
这是顶部的摘录:
VIRT RES SHR %MEM COMMAND 18701 mark 20 0 253m 61m 1396 S 26 8.3 0:10.90 /home/mark/.virtualenvs/searchrank.is/bin/python /home/mark/searchrank.is/src/manage.py celeryd --concurrency=1 --autoscale=2,1 --verbosity=3 --loglevel=INFO --queues=low_priority_queue
320m 59m 1400 8.1 .../manage.py celeryd --concurrency=1 --autoscale=2,1 --verbosity=3 --loglevel=INFO --queues=low_priority_queue
317m 59m 1360 8.0 .../manage.py celeryd --concurrency=1 --autoscale=2,1 --verbosity=3 --loglevel=INFO --queues=high_priority_queue
303m 45m 1172 6.2 .../manage.py celeryd --concurrency=1 --autoscale=2,1 --verbosity=3 --loglevel=INFO --queues=high_priority_queue
300m 43m 1056 5.9 .../manage.py celeryd --concurrency=1 --autoscale=2,1 --verbosity=3 --loglevel=INFO --queues=low_priority_queue
300m 43m 348 5.9 .../manage.py celeryd --concurrency=1 --autoscale=2,1 --verbosity=3 --loglevel=INFO --queues=high_priority_queue
305m 30m 0 4.1 .../manage.py celeryd --concurrency=1 --autoscale=2,1 --verbosity=3 --loglevel=INFO --queues=high_priority_queue
305m 29m 0 4.0 .../manage.py celeryd --concurrency=1 --autoscale=2,1 --verbosity=3 --loglevel=INFO --queues=low_priority_queue
306m 27m 8 3.7 .../manage.py celeryd --concurrency=1 --autoscale=2,1 --verbosity=3 --loglevel=INFO --queues=high_priority_queue
305m 25m 16 3.5 .../manage.py celeryd --concurrency=1 --autoscale=2,1 --verbosity=3 --loglevel=INFO --queues=low_priority_queue
304m 24m 0 3.4 .../manage.py celeryd --concurrency=1 --autoscale=2,1 --verbosity=3 --loglevel=INFO --queues=high_priority_queue
304m 24m 12 3.4 .../manage.py celeryd --concurrency=1 --autoscale=2,1 --verbosity=3 --loglevel=INFO --queues=low_priority_queue
305m 19m 4 2.7 .../manage.py celeryd --concurrency=1 --autoscale=2,1 --verbosity=3 --loglevel=INFO --queues=low_priority_queue
230m 19m 164 2.6 .../manage.py celeryd --concurrency=1 --verbosity=3 --loglevel=INFO --beat
306m 18m 0 2.5 .../manage.py celeryd --concurrency=1 --autoscale=2,1 --verbosity=3 --loglevel=INFO --queues=high_priority_queue
303m 16m 4 2.3 .../manage.py celeryd --concurrency=1 --autoscale=2,1 --verbosity=3 --loglevel=INFO --queues=low_priority_queue
299m 15m 1020 2.2 .../manage.py celeryd --concurrency=1 --verbosity=3 --loglevel=INFO --beat