以下是测量当前进程自启动以来峰值内存使用情况的方法。
process= psutil.Process(os.getpid())
process.memory_full_info().peak_wset
但是,如果我想对程序的不同部分(函数)进行几次测量,该怎么办?如何在任意时刻获取程序使用的内存以检查前后差异?也许有一种方法可以重置peak_wset吗?
目前在检查当前进程时,不再需要使用os.getpid()
。只需使用psutil.Process()
1) 为了在函数调用之前测量峰值内存是否增加(从不减少),请在函数调用之前和之后调用此函数,并取差值:
psutil.Process().memory_info().peak_wset
psutil.Process().memory_full_info().peak_wset
resource.getrusage(resource.RUSAGE_SELF).ru_maxrss
可以解决问题,但我还没有测试过。2) 为了在函数调用之前和之后测量当前内存变化,请在函数调用之前和之后调用它并取差值:
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) 要测量函数调用期间在进行垃圾回收之前使用的特定内存,您需要内存分析器。