簡體   English   中英

芹菜 - 減少內存消耗

[英]Celery - minimize memory consumption

我們有大約300個芹菜進程在Ubuntu 10.4 64位下運行,在空閑時每個進程需要~19mb RES,~174mbV VIRT,因此 - 對於所有進程來說,空閑時大約有6GB RAM。 在活動狀態 - 過程需要高達100mb的RES和~300mbV的VIRT

每個進程都使用minidom(xml文件<500kb,結構簡單)和urllib。

問題是 - 我們如何減少RAM的消耗 - 至少對於閑置工人來說,可能一些芹菜或python選項可能會有所幫助? 如何確定哪個部分占用大部分內存?

UPD:那是航班搜索代理商,一個代理商/日期的一名工人。 我們有10個代理商,一個用戶搜索== 9個日期,因此我們每個用戶搜索有10 * 9個代理商。

是否有可能按需啟動celeryd進程以避免閑置工作者(類似於apache上的MaxSpareServers)?

UPD2:代理生命周期是 - 發送HTTP請求,等待響應~10-20秒,解析xml(少於0.02秒),將結果保存到MySQL

讀這個:

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

聽起來你每個芹菜有一個工人。 這似乎是錯的。 每個芹菜應該有幾十個工人。 繼續增加工人的數量(並減少芹菜的數量),直到你的系統非常繁忙和非常慢。

S. Lott是對的。 主實例使用消息並將它們委托給工作池進程。 在一台機器上運行300個池進程可能沒有意義! 嘗試4或5乘以CPU核心數。 你可以通過運行比celeryd更多的東西來獲得一些東西,每個都有一些進程,但是你必須為你的應用程序進行實驗。

請參閱http://celeryq.org/docs/userguide/workers.html#concurrency

對於即將發布的2.2版本,我們正在研究Eventlet池支持,這可能是IO綁定任務的一個很好的替代方案,這將使您能夠以最小的內存開銷運行1000多個線程,但它仍然是實驗性的,並且修復了錯誤最后的發布。

請參閱http://groups.google.com/group/celery-users/browse_thread/thread/94fbeccd790e6c04

即將推出的2.2版本也支持自動縮放,可根據需要添加/刪除流程。 請參閱更改日志: http//ask.github.com/celery/changelog.html#version-2-2-0 (此更改日志尚未完整編寫)

使用自動縮放。 這允許每個芹菜實例下的工人數量根據需要增加或減少。 http://docs.celeryproject.org/en/latest/userguide/workers.html#autoscaling

工人的自然數量接近您擁有的核心數量。 工作人員在那里,因此cpu密集型任務可以有效地使用整個核心。 經紀人在那里,以便那些沒有工人來處理它們的請求保持排隊。 隊列數量可能很高,但這並不意味着您需要大量的經紀人。 單個代理應該足夠,或者如果稍后證明快速工作隊列交互是有益的,則可以將每個機器的隊列分成一個代理。

你的問題似乎與此無關。 我猜你的代理商沒有提供消息隊列api,你必須保留很多請求。 如果是這樣,您需要一些(強調不多)的事件進程,例如twisted或node.js。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM