【问题标题】:Is it possible to get a "high water mark" of memory usage from Python?是否有可能从 Python 获得内存使用的“高水位线”?
【发布时间】:2011-09-03 18:46:18
【问题描述】:

(C)Python 中是否有任何方法可以检查进程的当前内存使用情况?特别是,我想在测试脚本中确定内存使用的高水位线,但如有必要,我不介意定期检查内存使用情况并为自己计算高水位线。

编辑:我正在寻找纯 python 解决方案,或者适用于 OS X 的解决方案。

【问题讨论】:

  • 调用子进程是否仍然符合“纯python”的条件?
  • 那很好......也许我的问题已经变成了,“我应该调用什么 OS X 命令来找出特定进程正在使用多少内存”?我猜答案是ps 或类似的东西?

标签: python macos memory-management


【解决方案1】:

看看我对this question 的回答。它使用标准库的resource 模块中的getrusage() 函数,适用于Mac OS X。

【讨论】:

  • 另外,这个问题有点是我链接到的问题的副本,除了该问题接受的答案仅限 Linux。
【解决方案2】:

在 Linux 上,您可以检查 /proc/self/status 文件:

VmPeak:     6784 kB
VmSize:     6784 kB
VmLck:         0 kB
VmHWM:       572 kB
VmRSS:       572 kB
VmData:      180 kB
VmStk:       136 kB
VmExe:        44 kB
VmLib:      1640 kB
VmPTE:        36 kB
VmSwap:        0 kB

可能VmPeak 是您最感兴趣的行,但如果您mmap(2) 是一个千兆字节大小的文件,即使您只使用来自文件。

如果您知道通过top(1)ps(1) 检查内存的局限性,那么您可能会很高兴。如果您不了解检查内存使用的限制,请务必查看top(1) 输出中VirtResShr 列的含义。 :)

【讨论】:

  • 抱歉,我应该更清楚一些——寻找纯 Python 或适用于 OS X 的东西。我将编辑问题。
【解决方案3】:

您可以使用os.getpid() 获取当前PID,然后使用该PID 在调用top/free/ps 等的子进程的输出中查找进程。

我不是 OSX/BSD 专家,所以我不确定哪个命令的标志会给你进程的内存使用情况

【讨论】:

    【解决方案4】:

    MacosX 有 vmmapvmmap64 可以用来访问信息。我不懂python,但我想你应该能够打开一个通往子进程的管道以某种方式读取输出。

    编辑:可以找到一些额外的非 python 信息here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-05
      • 2011-05-02
      • 1970-01-01
      • 2019-02-12
      • 2020-01-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多