Package conduit :: Package utils :: Module Memstats
[hide private]

Source Code for Module conduit.utils.Memstats

 1  import os 
 2  import logging 
 3  log = logging.getLogger("Utils") 
 4   
5 -class Memstats:
6 """ 7 Memory analysis functions taken from 8 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/286222 9 """ 10 11 _proc_status = '/proc/%d/status' % os.getpid() 12 _scale = {'kB': 1024.0, 'mB': 1024.0*1024.0, 13 'KB': 1024.0, 'MB': 1024.0*1024.0} 14
15 - def __init__(self):
16 self.prev = [0.0,0.0,0.0]
17
18 - def _VmB(self, VmKey):
19 #get pseudo file /proc/<pid>/status 20 try: 21 t = open(self._proc_status) 22 v = t.read() 23 t.close() 24 except Exception, err: 25 return 0.0 # non-Linux? 26 #get VmKey line e.g. 'VmRSS: 9999 kB\n ...' 27 i = v.index(VmKey) 28 v = v[i:].split(None, 3) # whitespace 29 if len(v) < 3: 30 return 0.0 # invalid format? 31 #convert Vm value to bytes 32 return float(v[1]) * self._scale[v[2]]
33
34 - def calculate(self):
35 VmSize = self._VmB('VmSize:') - self.prev[0] 36 VmRSS = self._VmB('VmRSS:') - self.prev [1] 37 VmStack = self._VmB('VmStk:') - self.prev [2] 38 log.info("Memory Stats: VM=%sMB RSS=%sMB STACK=%sMB" %( 39 VmSize / self._scale["MB"], 40 VmRSS / self._scale["MB"], 41 VmStack / self._scale["MB"], 42 )) 43 return VmSize,VmRSS,VmStack
44