【问题标题】:How to measure process memory usage in given moment如何测量给定时刻的进程内存使用情况
【发布时间】:2017-02-09 09:55:44
【问题描述】:

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

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

但是,如果我想对程序的不同部分(功能)进行少量测量怎么办?如何在任何需要的时刻获得程序使用的内存来检查前后的差异? 或许有办法重置peak_wset?

【问题讨论】:

    标签: python memory


    【解决方案1】:

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

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

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

    来自docs

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-10-05
      • 2016-04-17
      • 2010-12-25
      • 1970-01-01
      • 1970-01-01
      • 2012-08-12
      • 2015-10-25
      • 2016-05-15
      • 1970-01-01
      相关资源
      最近更新 更多