备忘,其实是想知道该进程使用的内存状况。
首先要获取系统的内存信息:
def memory_stat():
‘‘‘
return the memory info
‘‘‘
mem = {}
stat = {}
f = open(‘/proc/meminfo‘)
lines = f.readlines()
for line in lines:
if len(line) < 2 : continue
name = line.split(‘:‘)[0]
var = line.split(‘:‘)[1].split()[0]
mem[name] = long(var) * 1024.0
stat[‘MemUsed‘] = mem[‘MemTotal‘] - mem[‘MemFree‘] - mem[‘Buffers‘] - mem[‘Cached‘]
stat[‘MemTotal‘] = mem[‘MemTotal‘]
stat[‘MemFree‘] = mem[‘MemFree‘]
stat[‘Buffers‘] = mem[‘Buffers‘]
stat[‘Cached‘] = mem[‘Cached‘]
return stat
因为我下面使用的方法来获取的进程信息,只能知道该进程占内存的百分比。所以必须先获取内存的总量。
接下来定义一个获取进程信息的函数。
def proc_stat(procid):
import commands
ps_stat = None
try:
#获取进程的内存信息
ps_stat = commands.getoutput(‘ps -fp %s -u‘ % procid).split(‘\n‘)[2].split()
except:
return {}
procInfo = {}
procInfo[‘PID‘] = procid
#这里调用了刚才定义的 memory_stat 获取内存总量,
#然后乘以该进程所占内存的百分比,即为内存使用量
procInfo[‘MemoryUsed‘] = memory_stat()[‘MemTotal‘] * float(ps_stat[3]) / 100
procInfo[‘Start‘] = ps_stat[8]
procInfo[‘StartCommand‘] = ps_stat[10]
return procInfo
接着使用 ipython ,测试 ,先开一个 python 进程 ,假设进程ID为2168,则:
from MachineInfo import proc_stat
ps = proc_stat(2168)
ps
{‘MemoryUsed‘: 3650289.6639999999, #这里是以 byte 为单位,也可以自己进行转换
‘PID‘: 2168,
‘Start‘: ‘21:56‘,
‘StartCommand‘: ‘python‘}
记录完毕。Over~