2017-08-14 12 views
2

私はPythonのconcurrent.futures.ThreadPoolExecutorを使用すると、vmsのメモリ使用量(psutilによって報告されたもの)が劇的に増加することがわかりました。なぜconcurrent.futuresがvmsメモリを増やすのですか?

In [1]: import psutil 

In [2]: psutil.Process().memory_info().vms/1e6 
Out[2]: 360.636416 

In [3]: from concurrent.futures import ThreadPoolExecutor 

In [4]: e = ThreadPoolExecutor(20) 

In [5]: psutil.Process().memory_info().vms/1e6 
Out[5]: 363.15136 

In [6]: futures = e.map(lambda x: x + 1, range(100)) 

In [7]: psutil.Process().memory_info().vms/1e6 
Out[7]: 1873.580032 

In [8]: e.shutdown() 

In [9]: psutil.Process().memory_info().vms/1e6 
Out[9]: 1722.51136 

これはスレッドの数に多少比例するようです。

+0

'rss'のような他のメモリ属性は、より控えめな値を返します – MRocklin

答えて

1

あなたは(あなたがLinux上であると仮定して)このに実行している可能性があります:

https://siddhesh.in/posts/malloc-per-thread-arenas-in-glibc.html

これは、RSSはあまり増えていない場合でも、仮想メモリのサイズを膨らますることができます。

(なお、VMSは、このようなドライバは、システム内のCUDAデバイスのすべてに統一アドレス空間を作成するために、プロセスの仮想メモリ空​​間を拡張CUDA、を有するような他の状況では誤解を招くことができます。)

関連する問題