前面介绍过怎么统计系统剩余内存:http://msiyuetian.blog.51cto.com/8637744/1772888

下面这个主要是统计Apache进程占用的物理内存


我们可以通过以下命令查看Apache有哪些进程及其PID

1)ps aux |grep httpd

Python:统计Apache进程占用的物理内存比_Apache

2)pidof httpd

Python:统计Apache进程占用的物理内存比_Apache_02


这些进程所对应的目录都以PID命名临时存放在/proc/目录下,而记录进程的物理内存信息都记录在对应的PID目录下的 status 文件里面(VmRSS),统计VmRSS总和即为Apache所有进程所占物理内存。

Python:统计Apache进程占用的物理内存比_Apache_03


Python:统计Apache进程占用的物理内存比_memory_04


代码如下:

vim httpd.py

#!/usr/bin/env python


import os

from subprocess import Popen, PIPE


def getPid():

    p = Popen(['pidof', 'httpd'], stdout=PIPE, stderr=PIPE)

    pids = p.stdout.read().split()

    for i in pids:

        fn = os.path.join('/proc/',i,'status')

        with open(fn) as fd:

            for line in fd:

                if line.startswith('VmRSS'):

                    http_mem = int(line.split()[1])

                    sum += http_mem

                    break

    return sum


def total_mem(f):

    with open(f) as fd:

        for line in fd:

            if line.startswith('MemTotal'):

                total_mem = int(line.split()[1])

                return total_mem


if __name__ == '__main__':

    pids = getPid()

    http_mem = parsePidFile(pids)

    total = total_mem('/proc/meminfo')

    print "Apache memory is: %s KB" % http_mem

    print "Percent: %.2f" % (http_mem/float(total)*100)+'%'

代码说明

subprocess 模块可以调用命令 pidof httpd 获取PID,并输出返回值


验证结果如下:

Python:统计Apache进程占用的物理内存比_Apache_05


我们可以通过下面方式来多访问几次Apache,查看内存所占比的变化

yum install -y elinks

elinks -dump http://localhost