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

简介:

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

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


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

1)ps aux |grep httpd

wKiom1dbwryCWsD4AABsdPFo8v0358.png

2)pidof httpd

wKiom1dbxePQBZiHAAAMuilGXXs292.png


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

wKiom1dbxCSy8LFUAABAIviJadk120.png


wKioL1dbxdqBSnXJAABo_IujK8s467.png


代码如下:

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,并输出返回值


验证结果如下:

wKiom1dbzaGQpYIzAAAeAcu3dRs935.png


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

yum install -y elinks

elinks -dump http://localhost





      本文转自M四月天 51CTO博客,原文链接:http://blog.51cto.com/msiyuetian/1787950,如需转载请自行联系原作者



相关文章
|
2月前
麒麟系统mate-indicators进程占用内存过高问题解决
【10月更文挑战第7天】麒麟系统mate-indicators进程占用内存过高问题解决
305 2
|
8天前
|
运维 监控 Ubuntu
【运维】如何在Ubuntu中设置一个内存守护进程来确保内存不会溢出
通过设置内存守护进程,可以有效监控和管理系统内存使用情况,防止内存溢出带来的系统崩溃和服务中断。本文介绍了如何在Ubuntu中编写和配置内存守护脚本,并将其设置为systemd服务。通过这种方式,可以在内存使用超过设定阈值时自动采取措施,确保系统稳定运行。
25 4
|
21天前
|
C语言 开发者 内存技术
探索操作系统核心:从进程管理到内存分配
本文将深入探讨操作系统的两大核心功能——进程管理和内存分配。通过直观的代码示例,我们将了解如何在操作系统中实现这些基本功能,以及它们如何影响系统性能和稳定性。文章旨在为读者提供一个清晰的操作系统内部工作机制视角,同时强调理解和掌握这些概念对于任何软件开发人员的重要性。
|
20天前
|
Linux 调度 C语言
深入理解操作系统:从进程管理到内存优化
本文旨在为读者提供一次深入浅出的操作系统之旅,从进程管理的基本概念出发,逐步探索到内存管理的高级技巧。我们将通过实际代码示例,揭示操作系统如何高效地调度和优化资源,确保系统稳定运行。无论你是初学者还是有一定基础的开发者,这篇文章都将为你打开一扇了解操作系统深层工作原理的大门。
|
21天前
|
缓存 监控 算法
Python内存管理:掌握对象的生命周期与垃圾回收机制####
本文深入探讨了Python中的内存管理机制,特别是对象的生命周期和垃圾回收过程。通过理解引用计数、标记-清除及分代收集等核心概念,帮助开发者优化程序性能,避免内存泄漏。 ####
31 3
|
27天前
|
算法 Java 程序员
Python内存管理机制深度剖析####
本文将深入浅出地探讨Python中的内存管理机制,特别是其核心组件——垃圾收集器(Garbage Collector, GC)的工作原理。不同于传统的摘要概述,我们将通过一个虚拟的故事线,跟随“内存块”小M的一生,从诞生、使用到最终被回收的过程,来揭示Python是如何处理对象生命周期,确保高效利用系统资源的。 ####
28 1
|
1月前
|
算法 调度 开发者
深入理解操作系统:从进程管理到内存分配
本文旨在为读者提供一个深入浅出的操作系统知识之旅,从进程管理的基础概念出发,探索内存分配的策略与技巧。我们将通过实际代码示例,揭示操作系统背后的逻辑与奥秘,帮助读者构建起对操作系统工作原理的直观理解。文章不仅涵盖理论知识,还提供实践操作的指导,使读者能够将抽象的概念转化为具体的技能。无论你是初学者还是有一定基础的开发者,都能在这篇文章中找到有价值的信息和启发。
|
1月前
|
算法 调度 C++
深入理解操作系统:从进程管理到内存分配
【10月更文挑战第42天】本文将带你进入操作系统的神秘世界,探索其核心概念和关键技术。我们将从进程管理开始,了解操作系统如何协调和管理多个程序的运行;然后,我们将深入研究内存分配,看看操作系统如何有效地分配和管理计算机的内存资源。通过这篇文章,你将获得对操作系统工作原理的深入理解,并学会如何编写高效的代码来利用这些原理。
|
1月前
|
安全 开发者 Python
Python的内存管理pymalloc
Python的内存管理pymalloc
|
1月前
|
安全 开发者 Python
Python的内存管理pymalloc
Python的内存管理pymalloc