1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
#!/usr/bin/env python
#encoding: utf-8
'''
思路: /proc/xx_pid/status 文件中的關鍵字段 VmRSS 來獲取某個進程佔用的物理內存
步驟: 獲取 httpd 進程ID列表 --> 經過每一個進程id來獲取該進程佔用物理內存
'''
from
subprocess
import
Popen, PIPE
import
os,sys
# 經過程序名稱獲取 pid 列表
def
getProgPids(prog):
p
=
Popen([
'pidof'
, prog], stdout
=
PIPE, stderr
=
PIPE)
pids
=
p.stdout.read().split()
return
pids
# 經過具體的進程 id 來獲取該進程佔用的物理內存
def
getMemByPid(pid):
fn
=
os.path.join(
'/proc'
, pid,
'status'
)
with
open
(fn) as fd:
for
line
in
fd:
if
line.startswith(
'VmRSS'
):
mem
=
int
(line.split()[
1
])
break
return
mem
# 獲取 httpd 服務全部進程佔用的物理內存
def
getHttpdMem():
httpd_mem_sum
=
0
pids
=
getProgPids(
'httpd'
)
for
pid
in
pids:
httpd_mem_sum
+
=
getMemByPid(pid)
return
httpd_mem_sum
# 獲取系統總的物理內存
def
getOsTotalMemory():
with
open
(
'/proc/meminfo'
) as fd:
for
line
in
fd:
if
line.startswith(
'MemTotal'
):
total_mem
=
int
(line.split()[
1
])
break
return
total_mem
if
__name__
=
=
'__main__'
:
http_mem
=
getHttpdMem()
total_mem
=
getOsTotalMemory()
scale
=
http_mem
/
float
(total_mem)
*
100
print
'Httpd: %d KB'
%
http_mem
print
'Percent: %.2f%%'
%
scale
|