|
#!/usr/bin/env python
"""filename: 10_httpd.py"""
from subprocess import Popen, PIPE # 因为要执行linux 的命令,需要使用subprocess 模块
import os
"""定义一个函数,用于获取所有的httpd 的pid号"""
def getPid():
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()[1]) #以空格分割,返回第二部分,内存数
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()[1])
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) |
|
|