如何在特定时刻测量进程内存使用情况

3

以下是测量当前进程自启动以来峰值内存使用情况的方法。

process= psutil.Process(os.getpid())
process.memory_full_info().peak_wset

但是,如果我想对程序的不同部分(函数)进行几次测量,该怎么办?如何在任意时刻获取程序使用的内存以检查前后差异?也许有一种方法可以重置peak_wset吗?

1个回答

2

目前在检查当前进程时,不再需要使用os.getpid()。只需使用psutil.Process()

1) 为了在函数调用之前测量峰值内存是否增加(从不减少),请在函数调用之前和之后调用此函数,并取差值:

  • 在Windows上:
    • psutil.Process().memory_info().peak_wset
    • psutil.Process().memory_full_info().peak_wset
  • 在Linux上:
    • 我在这里读到这里resource.getrusage(resource.RUSAGE_SELF).ru_maxrss可以解决问题,但我还没有测试过。

2) 为了在函数调用之前和之后测量当前内存变化,请在函数调用之前和之后调用它并取差值:

  • 在Windows和Linux上:
    • psutil.Process().memory_info().rss
    • psutil.Process().memory_full_info().rss
    • psutil.Process().memory_full_info().uss

来自文档

memory_full_info()返回与memory_info()相同的信息,另外,在某些平台(Linux、macOS、Windows)上还提供了其他指标(USS、PSS和交换)。这些额外的指标提供了更好的“有效”进程内存消耗表示(在USS的情况下),如本博客文章中详细说明。它通过整个进程地址传递实现。因此,它通常需要比memory_info()更高的用户权限,并且速度较慢。在没有实现额外字段的平台上,它只返回与memory_info()相同的指标。

uss(Linux、macOS、Windows):也称为“唯一集大小”,这是一个进程独有的内存,如果现在终止进程,该内存将被释放。

注意uss可能是确定进程实际使用多少内存的最具代表性指标。

3) 要测量函数调用期间在进行垃圾回收之前使用的特定内存,您需要内存分析器


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