我还没有找到一种使用multiprocessing
来监控Python脚本内存使用情况的好方法。更具体地说,我这样说:
import time
biglist = range(pow(10, 7))
time.sleep(5)
内存使用量为1.3 GB,由/usr/bin/time -v
和top
衡量。但现在,我说这样做:
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 x 1.3 GB,这是正确的。但/usr/bin/time -v
仍然报告1.3 GB,这没有任何意义。如果它正在测量父进程的消耗,那么应该说0.如果它正在测量父进程和子进程,那么它应该报告5 x 1.3 GB。为什么说1.3 GB?现在让我们尝试copy-on-write:
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 GB(再次),这是正确的。但top
报告6 x 1.3 GB,这是不正确的。使用copy-on-write,它应该只报告1.3 GB。
如何使用multiprocessing
可靠地监控Python脚本的内存使用情况?
答案 0 :(得分:0)
这实际上取决于&#34;可靠&#34;的含义。您可能希望使用pmap <pid>
命令来获取进程内存使用情况的统计信息(我猜您对total
字段感兴趣)。您需要跟踪在执行程序期间创建的所有进程(我猜ps --forest
可能会对您有帮助。)
如果您想获取详细信息,则可能需要使用/proc/[pid]/{smaps,status,maps}
(man pages)。
另请注意RSS and VSZ之间的区别。