python统计httpd 进程的内存占用百分比
#!/usr/bin/envpython"""filename: 10_httpd.py"""
from subprocessimport Popen, PIPE # 因为要执行linux 的命令,需要使用subprocess 模块
importos
"""定义一个函数,用于获取所有的httpd 的pid号"""
defgetPid():
p = Popen(["pidof", "httpd"], stdout=PIPE, stderr=PIPE)
pids = p.stdout.read().split()#通过管道,读出的结果是字符串,然后用split分割,保存在一个list
return pids
"""
定义一个函数,统计所有httpd 进程的内存
参数:pids 是getPid() 返回的列表
"""
def parsePidFile(pids):
sum = 0
for i in pids:
fn = os.path.join('/proc', i,'status') #返回status文件的绝对路径
with open(fn) as fd:
for line in fd:
if line.startswith('VmRSS'): #遍历文件,找到以"VmRSS"开头的行
mem = int(line.split()) #以空格分割,返回第二部分,内存数
sum += mem
break
return sum
"""
函数,打开"/proc/meminfo",获取总的内存
"""
def total_mem(fn):
with open(fn) as fd:
for line in fd:
if line.startswith("MemTotal"):
total_memory = int(line.split())
return total_memory
if__name__ == "__main__" :
pids = getPid()
sum_mem = parsePidFile(pids)
total_memory = total_mem("/proc/meminfo")
print"Httpd sum memory is: %s KB" % sum_mem
print"Mmeory percent: %.2f%%" % ((sum_mem/float(total_memory))*100)
页:
[1]