1 import os
2 import logging
3 log = logging.getLogger("Utils")
4
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
16 self.prev = [0.0,0.0,0.0]
17
18 - def _VmB(self, VmKey):
19
20 try:
21 t = open(self._proc_status)
22 v = t.read()
23 t.close()
24 except Exception, err:
25 return 0.0
26
27 i = v.index(VmKey)
28 v = v[i:].split(None, 3)
29 if len(v) < 3:
30 return 0.0
31
32 return float(v[1]) * self._scale[v[2]]
33
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