2012-10-16 31 views
3

我有一個基本的Python程序,使大量的線程(2000年),處理的東西,然後寫出來。python線程內存使用情況64位與32位

我已經收窄我的代碼與此類似(與2K線程): 網址提取線程例如在: http://www.ibm.com/developerworks/aix/library/au-threadingpython/

除了我的類中我簡直什麼也不做(從隊列中獲取的項目,然後呼叫任務完成)。在這個縮小版本和我做事情的版本中,內存使用情況都是一樣的。在32位Python解釋器中,我使用了大約105MB的虛擬內存。在64位中,我使用了超過8個演出。

我正在運行rhel 6.我還添加了: threading.stack_size(32768) 以減小堆棧大小。我假設python正在抓取一些預留的內存限制,我只是不知道這個限制是什麼。

任何想法?

謝謝!

+1

爲什麼要關注VIRTUAL的使用?什麼是RSS值? – qdot

+0

我知道這不是「真正的」內存使用情況,但我想知道爲什麼。 RSS非常低,只有幾個兆字節。 – Jon

+0

在python保留空間中列出項目,可能是這個問題? – lolopop

回答

2

如果您在RHEL6或你的glibc版本較新,2.10(你可以用rpm檢查-q glibc)。這是由於MALLOC_ARENA_MAX的缺失。

在RHEL 6中,glibc(> = 2.10)的malloc有一個新的舞臺分配器,它允許每個線程分配自己的舞臺。而可重用的競技場的最大數量取決於核心的數量。在64位系統上,這些舞臺是64M映射,16核系統的默認場景數量可以達到128.您可以輕鬆獲得128 * 64MB = 8GB。因此,當使用多線程時,可能會導致大量的虛擬內存(VMS)(雖然RSS的增加可能完全正常)。

這可以通過設置env來解決。變量MALLOC_ARENA_MAX添加到像1或4這樣的小數字。