python檢視物理記憶體 獲取程序所佔的物理記憶體

2021-10-19 21:37:33 字數 2032 閱讀 5529

## 概述

這裡以獲取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列表

返回:形如的字典"""

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():

"""獲取系統總的物理記憶體

輸入:無

輸出:總的物理記憶體"""

linux平台檢視CPU 記憶體消耗降序的程序列表

ps auxw head 1 ps auxw sort rn k3 head 10 ps auxw head 1 ps auxw sort rn k4 head 10 ps auxw head 1 ps auxw sort rn k5 head 10 ps auxw sort rss ps auxw...

linux檢視記憶體 CPU占用資源最多的程序

記憶體占用 利用ps命令,預設使用ps引數會顯示的結果 ps aux user pid cpu mem vsz rss tty stat start time command root 1 0.0 0.0 19352 1308 ss jul29 0 00 sbin init root 2 0.0 0...

python檢視記憶體位址

python 通過id檢視記憶體位址 eg a 1 print id a 輸出94486697843200不可變物件是指物件的記憶體值不能被改變。python中變數以引用的方式指向物件,如果變數引用了不可變物件,當改變該變數時,由於其所指的物件的值不能被改變,相當於把原來的值複製乙份後再改變,這會開...