python实现内存监控系统


Posted in Python onMarch 07, 2021

本文实例为大家分享了python实现内存监控系统的具体代码,供大家参考,具体内容如下

思路:通过系统命令或操作系统文件获取到内存信息(linux 内存信息存在/proc/meminfo文件中,mac os 通过命令vm_stat命令可以查看)

并将获取到信息保存到数据库中,通过web将数据实时的展示出来.(获取数据—展示数据)

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('\n')
 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('\n')
 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、前台web采用flask应用框架,通过highstock实时展示折线图数据

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)

新建一个monitor.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.

运行后台数据采集,运行前台web,通过http://localhost:8888/ 实时监控内存的活动情况。

效果图

python实现内存监控系统

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python返回昨天日期的方法
May 13 Python
windows上安装Anaconda和python的教程详解
Mar 28 Python
基于Python3 逗号代码 和 字符图网格(详谈)
Jun 22 Python
python 输出上个月的月末日期实例
Apr 11 Python
Python 使用PIL中的resize进行缩放的实例讲解
Aug 03 Python
python pygame实现2048游戏
Nov 20 Python
对Python3中dict.keys()转换成list类型的方法详解
Feb 03 Python
Pytorch卷积层手动初始化权值的实例
Aug 17 Python
python 实现兔子生兔子示例
Nov 21 Python
python thrift 实现 单端口多服务的过程
Jun 08 Python
在pycharm中关掉ipython console/PyDev操作
Jun 09 Python
pandas中DataFrame检测重复值的实现
May 26 Python
Python之csv文件从MySQL数据库导入导出的方法
Jun 21 #Python
python 从csv读数据到mysql的实例
Jun 21 #Python
OPENCV去除小连通区域,去除孔洞的实例讲解
Jun 21 #Python
python读取文本绘制动态速度曲线
Jun 21 #Python
python实现可视化动态CPU性能监控
Jun 21 #Python
python实时监控cpu小工具
Jun 21 #Python
python实现监控某个服务 服务崩溃即发送邮件报告
Jun 21 #Python
You might like
smarty静态实验表明,网络上是错的~呵呵
2006/11/25 PHP
linux使用crontab实现PHP执行计划定时任务
2014/05/10 PHP
PDO::getAttribute讲解
2019/01/28 PHP
让JavaScript 轻松支持函数重载 (Part 1 - 设计)
2009/08/04 Javascript
jQuery中hasClass()方法用法实例
2015/01/06 Javascript
JavaScript中用getDate()方法返回指定日期的教程
2015/06/09 Javascript
jquery实现点击变换导航样式的方法
2015/08/31 Javascript
在javascript中随机数 math random如何生成指定范围数值的随机数
2015/10/21 Javascript
JavaScript笔记之数据属性和存储器属性
2016/03/31 Javascript
详解node.js平台下Express的session与cookie模块包的配置
2017/04/26 Javascript
JS 判断某变量是否为某数组中的一个值的3种方法(总结)
2017/07/10 Javascript
vue 计时器组件的实现代码
2017/09/14 Javascript
JS实现遍历不规则多维数组的方法
2018/03/21 Javascript
Vue 项目中遇到的跨域问题及解决方法(后台php)
2018/03/28 Javascript
vue+axios+element ui 实现全局loading加载示例
2018/09/11 Javascript
JavaScript时间日期操作实例小结【5个示例】
2018/12/22 Javascript
jQuery插件实现非常实用的tab栏切换功能【案例】
2019/02/18 jQuery
详解小程序退出页面时清除定时器
2019/04/28 Javascript
python实现类的静态变量用法实例
2015/05/08 Python
Django组件cookie与session的具体使用
2019/06/05 Python
Python3中urlencode和urldecode的用法详解
2019/07/23 Python
Python如何实现小程序 无限求和平均
2020/02/18 Python
在Python中用GDAL实现矢量对栅格的切割实例
2020/03/11 Python
python实现超级马里奥
2020/03/18 Python
Python 使用office365邮箱的示例
2020/10/29 Python
商务日语毕业生自荐信范文
2013/11/14 职场文书
大学毕业感言一句话
2014/02/06 职场文书
社区党员志愿服务活动方案
2014/08/18 职场文书
安全先进个人材料
2014/12/29 职场文书
老兵退伍感言
2015/08/03 职场文书
2016年万圣节家长开放日活动总结
2016/04/05 职场文书
详解Nginx启动失败的几种错误处理
2021/04/01 Servers
Nginx进程管理和重载原理详解
2021/04/22 Servers
Python办公自动化之Excel(中)
2021/05/24 Python
CSS精灵图的原理与使用方法介绍
2022/03/17 HTML / CSS
Golang 入门 之url 包
2022/05/04 Golang