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中的tuple元组详细介绍
Feb 02 Python
python遍历目录的方法小结
Apr 28 Python
python3实现ftp服务功能(服务端 For Linux)
Mar 24 Python
python opencv 直方图反向投影的方法
Feb 24 Python
解决tensorflow1.x版本加载saver.restore目录报错的问题
Jul 26 Python
Python Unittest根据不同测试环境跳过用例的方法
Dec 16 Python
Pytorch根据layers的name冻结训练方式
Jan 06 Python
pycharm设置python文件模板信息过程图解
Mar 10 Python
Python3 selenium 实现QQ群接龙自动化功能
Apr 17 Python
提高python代码运行效率的一些建议
Sep 29 Python
python 如何引入协程和原理分析
Nov 30 Python
python 三边测量定位的实现代码
Apr 22 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
从一个不错的留言本弄的mysql数据库操作类
2007/09/02 PHP
php 判断IP为有效IP地址的方法
2018/01/28 PHP
YII2框架中behavior行为的理解与使用方法示例
2020/03/13 PHP
thinkphp5.1 框架导入/导出excel文件操作示例
2020/05/25 PHP
用js代码改变单选框选中状态的简单实例
2013/12/18 Javascript
javascript 中__proto__和prototype详解
2014/11/25 Javascript
JavaScript中document对象使用详解
2015/01/06 Javascript
原生JS和jQuery版实现文件上传功能
2016/04/18 Javascript
javascript实现下雪效果【实例代码】
2016/05/03 Javascript
Vue.js动态添加、删除选题的实例代码
2016/09/30 Javascript
javascript实现动态显示颜色块的报表效果
2017/04/10 Javascript
Node调用Java的示例代码
2017/09/20 Javascript
vue代理和跨域问题的解决
2018/07/18 Javascript
详解Vue依赖收集引发的问题
2019/04/22 Javascript
javascript的this关键字详解
2019/05/20 Javascript
vue+elementUi图片上传组件使用详解
2019/08/20 Javascript
JavaScript setInterval()与setTimeout()计时器
2019/12/27 Javascript
详解Python中__str__和__repr__方法的区别
2015/04/17 Python
Python中Django框架利用url来控制登录的方法
2015/07/25 Python
PHP网页抓取之抓取百度贴吧邮箱数据代码分享
2016/04/13 Python
python实现壁纸批量下载代码实例
2018/01/25 Python
python得到电脑的开机时间方法
2018/10/15 Python
pygame游戏之旅 计算游戏中躲过的障碍数量
2018/11/20 Python
python使用wxpy实现微信消息防撤回脚本
2019/04/29 Python
pyQt5实时刷新界面的示例
2019/06/25 Python
python实现最小二乘法线性拟合
2019/07/19 Python
python matplotlib库直方图绘制详解
2019/08/10 Python
python 负数取模运算实例
2020/06/03 Python
上班睡觉检讨书
2014/01/09 职场文书
知识竞赛拉拉队口号
2014/06/16 职场文书
出纳试用期自我鉴定范文
2014/09/16 职场文书
小学生毕业评语
2014/12/26 职场文书
开场白怎么写
2015/06/01 职场文书
理想国读书笔记
2015/06/25 职场文书
教师反邪教心得体会
2016/01/15 职场文书
【DOTA2】半决赛强强对话~ PSG LGD vs EHOME - DPC 2022 CN REGIONAL FINALS WINTER
2022/04/02 DOTA