備忘,其實是想知道該進程使用的記憶體狀況。
首先要擷取系統的記憶體資訊:
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~