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

时间:2017-02-09 09:55:44

标签: python memory

以下是测量自流程开始以来当前流程的峰值内存使用情况的方法。

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

但是如果我想对程序的不同部分(功能)进行一些测量呢?如何在任何所需的时刻获取程序使用的内存以检查前后的差异? 也许有办法重置peak_wset?

1 个答案:

答案 0 :(得分:1)

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

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

  • 在Windows上:
    • psutil.Process().memory_info().peak_wset
    • psutil.Process().memory_full_info().peak_wset
  • 在Linux上:
    • 我读过hereresource.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

来自docs

memory_full_info() 返回与 memory_info() 相同的信息,此外,在某些平台(Linux,macOS,Windows)上,它还提供其他指标(USS,PSS和掉期)。额外的指标可以更好地表示“有效的”过程内存消耗(在USS的情况下),如本博文中详细说明的那样。它通过整个过程地址来实现。因此,与 memory_info() 相比,它通常需要更高的用户特权,并且速度要慢得多。在未实现额外字段的平台上,这只会返回与 memory_info() 相同的指标。

uss (Linux,macOS,Windows):又名“唯一设置大小”,这是进程唯一的内存,如果进程终止,则将释放该内存现在。

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

3)要测量函数调用在执行过程中使用的特定内存,在进行任何垃圾回收之前,您需要一个memory profiler