Python进程使用的总内存?

新手上路,请多包涵

有没有办法让 Python 程序确定它当前使用了多少内存?我看过有关单个对象的内存使用情况的讨论,但我需要的是进程的总内存使用情况,以便我可以确定何时有必要开始丢弃缓存数据。

原文由 rwallace 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 261
2 个回答

是适用于各种操作系统(包括 Linux、Windows 等)的有用解决方案:

 import os, psutil
process = psutil.Process(os.getpid())
print(process.memory_info().rss)  # in bytes

笔记:

  • 执行 pip install psutil 如果尚未安装

  • 如果您想快速了解您的过程需要多少 MiB,那么方便的一行代码:

   import os, psutil; print(psutil.Process(os.getpid()).memory_info().rss / 1024 ** 2)

  • 对于 Python 2.7 和 psutil 5.6.3,它是 process.memory_info()[0] (后来 API 发生了变化)。

原文由 Basj 发布,翻译遵循 CC BY-SA 4.0 许可协议

对于基于 Unix 的系统(Linux、Mac OS X、Solaris),您可以使用标准库模块中的 getrusage() 函数 resource 。生成的对象具有属性 ru_maxrss ,它给出了调用进程的 峰值 内存使用情况:

 >>> resource.getrusage(resource.RUSAGE_SELF).ru_maxrss
2656  # peak memory usage (kilobytes on Linux, bytes on OS X)

Python 文档 没有记录单位。请参阅您特定系统的 man getrusage.2 页面以检查值的单位。在 Ubuntu 18.04 上,单位记为千字节。在 Mac OS X 上,它是字节。

getrusage() 也可以给出函数 resource.RUSAGE_CHILDREN 获取子进程的使用情况,以及(在某些系统上) resource.RUSAGE_BOTH 总进程使用情况(自身和子进程) .

如果您只关心 Linux,您也可以阅读 /proc/self/status/proc/self/statm 文件,如这个问题和 这个 问题的其他答案中所述。

原文由 Nathan Craike 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题