python查看物理内存_获取进程所占的物理内存

## 概述

通过计算linux系统的/proc文件中物理内存相关内容,获取指定进程所占的物理内存。

这里以获取apache进程的物理内存和所占比例为例。

### 脚本

* 此脚本可以作为模块使用

* apache会开启多个进程,因此这个脚本适合单进程和多进程。

* 在主函数外,对计算过程进程了封装,定义了`getProgTotalMem`函数,简化了主函数中的内容.

* 当进程不存在时,pidof不报错,输出为空,因此这里检测进程是否存在应特别注意

* 可在[github gist][1]中获取脚本,被墙的原因,多数情况网页开。

```python

#!/usr/bin/env python

# coding: utf-8

import os

import sys

from subprocess import Popen, PIPE

def getPidList(prog_name):

"""获取进程的所有PID

输入:进程名

返回:进程PID列表"""

p = Popen(['pidof', '%s' % prog_name], stdout=PIPE, stderr=PIPE)

std_out, std_err = p.communicate()

# 当进程不存在时,pidof也不报错,所以检测std_out如果为空,说明进程不存在。

if std_out:

pids = std_out.split()

return pids

else:

print 'the prog %s is not exist.' % prog_name

sys.exit()

def getProgMemDict(pids):

"""获取进程每个PID所占的物理内存,存入字典

输入:进程PID列表

返回:形如{PID:mem}的字典"""

mem_dict = {}

for pid in pids:

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

with open(fn,'r') as fd:

for line in fd:

if line.startswith('VmRSS'):

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

mem_dict[pid] = mem

break

return mem_dict

def getProgTotalMem(prog_name):

"""获取进程所占的物理内存

输入:进程名

输出:进程所占的物理内存"""

# 获取进程所有PID

pid_list = getPidList(prog_name)

# 获取进程物理内存字典

prog_mem_dict = getProgMemDict(pid_list)

# 计算进程总的的物理内存

prog_total_mem = sum([mem for mem in prog_mem_dict.itervalues()])

return prog_total_mem

def getSysTotalMem():

"""获取系统总的物理内存

输入:无

输出:总的物理内存"""

with open('/proc/meminfo') as fd:

for line in fd:

if line.startswith('MemTotal'):

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

return mem

if __name__ == '__main__':

httpd_total_mem = getProgTotalMem('http')

sysmem = getSysTotalMem()

print 'apache memory is: %d kb, and %.2f%%' % (httpd_total_mem, httpd_total_mem/float(sysmem))

```

[1]:https://gist.github.com/PoplarYang/69daae1e2b11a309e0de5a6a52cca5c4

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值