python 메모리 모니터링 시스템 구현

본 논문 의 사례 는 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/ 메모리 의 활동 상황 을 실시 간 으로 감시 하 다.
효과 도

이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기