python 메모리 모니터링 시스템 구현
사고:시스템 명령 이나 운영 체제 파일 을 통 해 메모리 정 보 를 얻 을 수 있 습 니 다(Liux 메모리 정 보 는/proc/meminfo 파일 에 존재 합 니 다.mac os 는 명령 vmstat 명령 보기)
또한 가 져 온 정 보 를 데이터베이스 에 저장 하고 웹 을 통 해 데 이 터 를 실시 간 으로 보 여 줍 니 다.(데 이 터 를 가 져 옵 니 다-데 이 터 를 보 여 줍 니 다)
1.배경 데이터 수집(데이터 획득)
import subprocess
import re
import MySQLdb as mysql
import time
import socket
# mysql ,
db = mysql.connect(user="root", passwd="123456",host="localhost", db="EBANK", charset="utf8")
db.autocommit(True)
cur = db.cursor()
"""
Mac
"""
def processesUseMeminfo():
ps = subprocess.Popen(['ps', '-caxm', '-orss,comm'], stdout=subprocess.PIPE).communicate()[0]
processLines = ps.split('
')
print processLines
sep = re.compile('[\s]+')
rssTotal = 0 # kB
for row in range(1,len(processLines)):
rowText = processLines[row].strip()
rowElements = sep.split(rowText)
try:
rss = float(rowElements[0]) * 1024
except:
rss = 0 # ignore...
rssTotal += rss
return rssTotal
"""
Mac
"""
def processVM():
vm = subprocess.Popen(['vm_stat'], stdout=subprocess.PIPE).communicate()[0]
vmLines = vm.split('
')
sep = re.compile(':[\s]+')
vmStats = {}
for row in range(1,len(vmLines)-2):
rowText = vmLines[row].strip()
rowElements = sep.split(rowText)
vmStats[(rowElements[0])] = int(rowElements[1].strip('\.'))/1024
return vmStats
"""
, web
"""
erval = 0
def execute():
''' '''
global erval
try:
ip = socket.gethostbyname(socket.gethostname()) # ip
#ip = '10.21.8.10'
vmStats = processVM()
wired = vmStats['Pages wired down']
active = vmStats['Pages active']
free = vmStats['Pages free']
inactive = vmStats['Pages inactive']
t = int(time.time())
sql = "insert into stat(host,mem_free,mem_usage,mem_total,load_avg,time) VALUES ('%s','%d','%d','%d','%d','%d')"\
%(ip,wired,active,free,inactive,t)
print sql
cur.execute(sql)
erval += 1
if erval > 50:
del_sql = "delete from stat where time < %d "%t
print ' .',del_sql
cur.execute(del_sql)
erval = 0
except Exception , message :
print ' :',message
#pass
finally:
pass
''' '''
#TODO
#rssTotal = processesUseMeminfo()
# ,
while True:
time.sleep(1)
execute()
print 'none.'
데 이 터 를 가 져 와 MySQL 데이터 에 저장 합 니 다.새 테이블:
CREATE TABLE `stat` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`host` varchar(256) DEFAULT NULL,
`mem_free` int(11) DEFAULT NULL,
`mem_usage` int(11) DEFAULT NULL,
`mem_total` int(11) DEFAULT NULL,
`load_avg` varchar(128) DEFAULT NULL,
`time` bigint(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `host` (`host`(255))
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
2.프론트 웹 은 fllask 응용 프레임 워 크 를 사용 하여 하 이 스톡 을 통 해 실시 간 으로 접 힌 그림 데 이 터 를 보 여 줍 니 다.
from flask import Flask, request, render_template
import json
import MySQLdb as mysql
app = Flask(__name__)
db = mysql.connect(user="root", passwd="123456",host="localhost", db="EBANK", charset="utf8")
db.autocommit(True)
cur = db.cursor()
@app.route("/")
def index():
return render_template("monitor.html")
tmp_time = 0
@app.route("/data")
def getdata():
''' , '''
global tmp_time
if tmp_time > 0 :
sql = "select time,mem_free from stat where time >%s" %(tmp_time)
else:
sql = "select time,mem_free from stat"
cur.execute(sql)
datas = []
for i in cur.fetchall():
datas.append([i[0], i[1]])
if len(datas) > 0 :
tmp_time = datas[-1][0]
return json.dumps(datas)
if __name__ == "__main__":
app.run(host='0.0.0.0',port=8888,debug=True)
모니터.html 새로 만 들 기
<html lang="en">
<head>
<meta charset="UTF-8">
<title> </title>
<script src="http://cdn.hcharts.cn/jquery/jquery-1.8.3.min.js"></script>
<script src="http://cdn.hcharts.cn/highstock/highstock.js"></script>
<script src="http://cdn.hcharts.cn/highcharts/modules/exporting.js"></script>
</head>
<body>
<div id="container" style="min-width:400px;height:400px"></div>
</body>
<script type="text/javascript">
$(function () {
$.getJSON('/data', function (data) {
// Create the chart
$('#container').highcharts('StockChart', {
chart: {
events: {
load: function () {
var chart = $('#container').highcharts();
var series = chart.series[0];
// 1 , /data,
setInterval(function () {
$.getJSON("/data", function (res) {
$.each(res, function (i, v) {
series.addPoint(v);
});
});
}, 1000);
}
}
},
rangeSelector : {
selected : 1
},
title : {
text : 'AAPL Stock Price'
},
series : [{
name : 'AAPL',
data : data,
tooltip: {
valueDecimals: 2
}
}]
});
});
});
</script>
</html>
done.배경 데이터 수집 을 실행 하고 프론트 웹 을 실행 합 니 다.http://localhost:8888/ 메모리 의 활동 상황 을 실시 간 으로 감시 하 다.
효과 도
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.