首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >芹菜-减少内存消耗

芹菜-减少内存消耗
EN

Stack Overflow用户
提问于 2010-12-03 14:08:47
回答 4查看 20.8K关注 0票数 14

我们有大约300个进程在Ubuntu 10.4 64位下运行,空闲时每个进程占用~19 of,~174 of,因此,对于所有进程来说,空闲内存大约为6GB。在活动状态下,进程占用多达100 In的RES和~300 In的VIRT。

每个进程都使用minidom(xml文件小于500 and,结构简单)和urllib。

问题是--我们怎样才能降低RAM的容量--至少对于闲散的工人来说,一些芹菜或蟒蛇的选择可能会有所帮助。如何确定哪一部分占用了大部分内存?

UPD:是航班搜索代理,一个机构/日期的一名工作人员。我们有10个代理,一个用户搜索== 9日期,因此我们有10*9代理每一个用户的搜索。

是否有可能按需启动celeryd进程以避免空闲工人(类似于apache上的MaxSpareServers )?

UPD2:代理生命周期是-发送HTTP请求,等待响应~10-20秒,解析(所需时间少于0.02s),将结果保存到MySQL

EN

回答 4

Stack Overflow用户

发布于 2010-12-03 17:09:35

请阅读以下内容:

http://docs.celeryproject.org/en/latest/userguide/workers.html#concurrency

听起来你每个芹菜都有一个工人。这似乎不对。你应该有几十个工人。继续增加工人的数量(并降低赛利的数量),直到你的系统非常繁忙和缓慢。

票数 8
EN

Stack Overflow用户

发布于 2010-12-03 19:48:18

罗特是对的。主实例使用消息并将它们委托给员工池进程。在一台机器上运行300个池进程可能是没有意义的!尝试4或5乘以CPU核心的数量。您可以通过运行比在celeryd上多运行几个进程获得一些东西,有些人这样做了,但是您必须为您的应用程序进行实验。

请参阅http://celeryq.org/docs/userguide/workers.html#concurrency

对于即将发布的2.2版本,我们正在研究Eventlet池支持,这可能是IO绑定任务的一个很好的替代方案,这将使您能够以最小的内存开销运行1000+线程,但它仍然是试验性的,并且正在为最终版本修复but。

请参阅http://groups.google.com/group/celery-users/browse_thread/thread/94fbeccd790e6c04

即将发布的2.2版本还支持自动扩展,它根据需要添加/删除过程。请参阅Changelog:http://ask.github.com/celery/changelog.html#version-2-2-0 (此变更日志尚未完整编写)

票数 3
EN

Stack Overflow用户

发布于 2010-12-03 21:21:45

工人的自然数量接近于你拥有的核心数量。工作人员在那里,以便cpu密集型任务能够有效地使用整个核心。代理在那里,这样没有工人在手边处理它们的请求就会排队。队列的数量可能很高,但这并不意味着您也需要大量的代理。一个代理就足够了,或者,如果稍后发现快速的工作队列交互是有益的,那么可以将队列分解到每台机器上的一个代理。

你的问题似乎与此无关。我猜您的代理没有提供消息队列api,而且您必须保持大量的请求。如果是这样的话,您需要一些(强调不是很多)偶发过程,例如基于扭曲或基于node.js的进程。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4346318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档