这篇文章的灵感来自于关于如何在CPython中为对象分配内存的评论.原来,这是创建一个列表,并追加到它在一个for循环的环境相一相的列表理解.
所以这是我的问题:
malloc称为?(malloc根据本评论中的内容,列表理解可能不会导致调用lists是动态数组,这意味着它们需要一块连续的内存.这意味着如果我尝试将对象附加到列表中,其底层C数据结构数组无法扩展,则将数组复制到内存的不同部分,其中可以使用更大的连续块.那么当我初始化列表时,为这个数组分配了多少空间?
编辑:从评论中,我认为这里有太多问题.我这样做只是因为这些问题都非常相关.不过,如果是这样的话,我很乐意把它分成几个帖子(请在评论中告诉我这样做)
看起来芹菜在任务完成后不释放内存.每次任务完成时,都会有5m-10m的内存泄漏.因此,随着成千上万的任务,很快就会耗尽所有内存.
BROKER_URL = 'amqp://user@localhost:5672/vhost'
# CELERY_RESULT_BACKEND = 'amqp://user@localhost:5672/vhost'
CELERY_IMPORTS = (
'tasks.tasks',
)
CELERY_IGNORE_RESULT = True
CELERY_DISABLE_RATE_LIMITS = True
# CELERY_ACKS_LATE = True
CELERY_TASK_RESULT_EXPIRES = 3600
# maximum time for a task to execute
CELERYD_TASK_TIME_LIMIT = 600
CELERY_DEFAULT_ROUTING_KEY = "default"
CELERY_DEFAULT_QUEUE = 'default'
CELERY_DEFAULT_EXCHANGE = "default"
CELERY_DEFAULT_EXCHANGE_TYPE = "direct"
# CELERYD_MAX_TASKS_PER_CHILD = 50
CELERY_DISABLE_RATE_LIMITS = True
CELERYD_CONCURRENCY = 2
Run Code Online (Sandbox Code Playgroud)
可能与问题相同,但它没有答案: RabbitMQ/Celery/Django内存泄漏?
我没有使用django,我的包是:
Chameleon==2.11
Fabric==1.6.0
Mako==0.8.0
MarkupSafe==0.15
MySQL-python==1.2.4
Paste==1.7.5.1
PasteDeploy==1.5.0
SQLAlchemy==0.8.1
WebOb==1.2.3
altgraph==0.10.2
amqp==1.0.11
anyjson==0.3.3
argparse==1.2.1
billiard==2.7.3.28
biplist==0.5
celery==3.0.19
chaussette==0.9
distribute==0.6.34 …Run Code Online (Sandbox Code Playgroud) 将Django升级到1.6后,我的芹菜工人正在吃掉RAM.似乎为工作人员分配的内存不会在每项任务之后释放并增长.
相关设置:
# DB:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'somedb',
'USER': '',
'PASSWORD': '',
'HOST': 'localhost',
'PORT': '',
}
}
# CELERY SETTINGS:
CELERY_RESULT_BACKEND = 'redis://'
BROKER_URL = 'redis://'
Run Code Online (Sandbox Code Playgroud)
相关软件包版本:
Django==1.6
celery==3.0.24
django-celery==3.0.23
billiard==2.7.3.34
kombu==2.5.16
redis==2.7.6
Run Code Online (Sandbox Code Playgroud)
发生在我的本地env(with DEBUG=False)手动运行worker以及芹菜与Upstart一起运行的暂存环境中.
更新:
autocommit=False没有成功.