Python多进程 - 如何监控内存使用情况?

10

我还没有找到一种好的方法来使用multiprocessing监控Python脚本的内存使用情况。更具体地说,假设我这样做:

import time

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

根据/usr/bin/time -vtop的测量,内存使用量为1.3 GB。但现在,假设我这样做:

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 呢?现在让我们尝试写时复制:

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,这是不正确的。使用写时复制技术,它只应该报告 1.3 GB。

如何可靠地监视使用 multiprocessing 的 Python 脚本的内存使用情况?

1个回答

1
这取决于“可靠”是什么意思。您可能想使用pmap <pid>命令获取进程的内存使用统计信息(我猜您对total字段感兴趣)。您需要跟踪在程序执行期间创建的所有进程(我猜ps --forest可以帮助您)。
如果您想获得详细信息,则可能需要使用/proc/[pid]/{smaps,status,maps}(手册页)。
还请记住RSS和VSZ之间的区别

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接