以下是测量自流程开始以来当前流程的峰值内存使用情况的方法。
process= psutil.Process(os.getpid())
process.memory_full_info().peak_wset
但是如果我想对程序的不同部分(功能)进行一些测量呢?如何在任何所需的时刻获取程序使用的内存以检查前后的差异? 也许有办法重置peak_wset?
答案 0 :(得分:1)
当前,在检查当前过程时,您不再需要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
来自docs:
memory_full_info()
返回与memory_info()
相同的信息,此外,在某些平台(Linux,macOS,Windows)上,它还提供其他指标(USS,PSS和掉期)。额外的指标可以更好地表示“有效的”过程内存消耗(在USS的情况下),如本博文中详细说明的那样。它通过整个过程地址来实现。因此,与memory_info()
相比,它通常需要更高的用户特权,并且速度要慢得多。在未实现额外字段的平台上,这只会返回与memory_info()
相同的指标。
uss
(Linux,macOS,Windows):又名“唯一设置大小”,这是进程唯一的内存,如果进程终止,则将释放该内存现在。注意:
uss
可能是确定进程实际使用多少内存的最具代表性的指标。
3)要测量函数调用在执行过程中使用的特定内存,在进行任何垃圾回收之前,您需要一个memory profiler。