## 概述
這裡以獲取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中變數以引用的方式指向物件,如果變數引用了不可變物件,當改變該變數時,由於其所指的物件的值不能被改變,相當於把原來的值複製乙份後再改變,這會開...