2016-04-12 38 views
5

multiprocessingを使用してPythonスクリプトのメモリ使用量を監視する良い方法が見つかりませんでした。具体的には、私はこれを行うと言う:/usr/bin/time -vtopの両方によって測定されるようにPythonマルチプロセッシング - メモリ使用量を監視するには?

import time 

biglist = range(pow(10, 7)) 
time.sleep(5) 

メモリ使用量は、1.3ギガバイトです。しかし、今、私はこれを行うと言う:

import time 
from multiprocessing import Pool 

def worker(x): 
    biglist = range(pow(10, 7)) 
    time.sleep(5) 
    return 

Pool(5).map(worker, range(5)) 

topは正しいです5×1.3ギガバイトを、報告します。しかし/usr/bin/time -vは依然として1.3GBを報告していますが、これは意味をなさないものです。親プロセスの消費量を測定している場合は、0とします。親と子供を測定する場合は、5 x 1.3 GBを報告する必要があります。なぜ1.3 GBと言われますか?今度は、コピー・オン・ライト試してみましょう:

import time 
from multiprocessing import Pool 

biglist = range(pow(10, 7)) 

def worker(x): 
    time.sleep(5) 
    return 

Pool(5).map(worker, range(5)) 

/usr/bin/time -vが正しいれ、1.3ギガバイト(再び)を報告します。しかし、topは6 x 1.3 GBを報告していますが、これは間違っています。コピーオンライトでは、1.3 GBしか報告しません。

multiprocessingを使用して、Pythonスクリプトのメモリ使用量を確実に監視できますか?

答えて

0

本当に「信頼できる」とはどういう意味ですか。 pmap <pid>コマンドを使用して、プロセスのメモリ使用量に関する統計情報を取得できます(totalフィールドに興味があると思います)。あなたはプログラムの実行中に作成されたすべてのプロセスを追跡する必要があります(私はps --forestがあなたに役立つかもしれないと思います)。

詳細をご希望の場合は/proc/[pid]/{smaps,status,maps}man pages)をご利用ください。

RSS and VSZの違いについても覚えておいてください。

関連する問題