我已经找到了以下问题,但我想知道是否有一种更快,更脏的方法来估算不依赖外部库的python解释器当前正在使用多少内存。
我来自PHP,过去经常为此目的使用memory_get_usage()和memory_get_peak_usage(),我希望能找到一个等效的对象。
/proc/self/status以下代码为Linux和其他系统提供了一个简单的解决方案,我在我的项目中使用了以下代码:
/proc/self/status
def memory_usage(): """Memory usage of the current process in kilobytes.""" status = None result = {'peak': 0, 'rss': 0} try: # This will only work on systems with a /proc file system # (like Linux). status = open('/proc/self/status') for line in status: parts = line.split() key = parts[0][2:-1].lower() if key in result: result[key] = int(parts[1]) finally: if status is not None: status.close() return result
它返回当前和峰值驻留内存大小(这可能是人们在谈论应用程序使用多少RAM时的意思)。很容易扩展它以从/proc/self/status文件中获取其他信息。
出于好奇:的完整输出cat /proc/self/status如下所示:
cat /proc/self/status
% cat /proc/self/status Name: cat State: R (running) Tgid: 4145 Pid: 4145 PPid: 4103 TracerPid: 0 Uid: 1000 1000 1000 1000 Gid: 1000 1000 1000 1000 FDSize: 32 Groups: 20 24 25 29 40 44 46 100 1000 VmPeak: 3580 kB VmSize: 3580 kB VmLck: 0 kB VmHWM: 472 kB VmRSS: 472 kB VmData: 160 kB VmStk: 84 kB VmExe: 44 kB VmLib: 1496 kB VmPTE: 16 kB Threads: 1 SigQ: 0/16382 SigPnd: 0000000000000000 ShdPnd: 0000000000000000 SigBlk: 0000000000000000 SigIgn: 0000000000000000 SigCgt: 0000000000000000 CapInh: 0000000000000000 CapPrm: 0000000000000000 CapEff: 0000000000000000 CapBnd: ffffffffffffffff Cpus_allowed: 03 Cpus_allowed_list: 0-1 Mems_allowed: 1 Mems_allowed_list: 0 voluntary_ctxt_switches: 0 nonvoluntary_ctxt_switches: 0