Total memory used by Python process? Total memory used by Python process? python python

Total memory used by Python process?

Here is a useful solution that works for various operating systems, including Linux, Windows, etc.:

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

With Python 2.7 and psutil 5.6.3, the last line should be


instead (there was a change in the API later).


  • do pip install psutil if it is not installed yet

  • handy one-liner if you quickly want to know how many MB your process takes:

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

For Unix based systems (Linux, Mac OS X, Solaris), you can use the getrusage() function from the standard library module resource. The resulting object has the attribute ru_maxrss, which gives the peak memory usage for the calling process:

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

The Python docs don't make note of the units. Refer to your specific system's man getrusage.2 page to check the unit for the value. On Ubuntu 18.04, the unit is noted as kilobytes. On Mac OS X, it's bytes.

The getrusage() function can also be given resource.RUSAGE_CHILDREN to get the usage for child processes, and (on some systems) resource.RUSAGE_BOTH for total (self and child) process usage.

If you care only about Linux, you can alternatively read the /proc/self/status or /proc/self/statm file as described in other answers for this question and this one too.

On Windows, you can use WMI (home page, cheeseshop):

def memory():    import os    from wmi import WMI    w = WMI('.')    result = w.query("SELECT WorkingSet FROM Win32_PerfRawData_PerfProc_Process WHERE IDProcess=%d" % os.getpid())    return int(result[0].WorkingSet)

On Linux (from python cookbook

import os_proc_status = '/proc/%d/status' % os.getpid()_scale = {'kB': 1024.0, 'mB': 1024.0*1024.0, 'KB': 1024.0, 'MB': 1024.0*1024.0}def _VmB(VmKey):    '''Private.'''    global _proc_status, _scale     # get pseudo file  /proc/<pid>/status    try:        t = open(_proc_status)        v =        t.close()    except:        return 0.0  # non-Linux?     # get VmKey line e.g. 'VmRSS:  9999  kB\n ...'    i = v.index(VmKey)    v = v[i:].split(None, 3)  # whitespace    if len(v) < 3:        return 0.0  # invalid format?     # convert Vm value to bytes    return float(v[1]) * _scale[v[2]]def memory(since=0.0):    '''Return memory usage in bytes.'''    return _VmB('VmSize:') - sincedef resident(since=0.0):    '''Return resident memory usage in bytes.'''    return _VmB('VmRSS:') - sincedef stacksize(since=0.0):    '''Return stack size in bytes.'''    return _VmB('VmStk:') - since