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之使用Python操作数据库(1)
Nov 25 Python
Python功能键的读取方法
May 28 Python
python图像常规操作
Nov 11 Python
Python查找两个有序列表中位数的方法【基于归并算法】
Apr 20 Python
Python视频爬虫实现下载头条视频功能示例
May 07 Python
深入浅析Python获取对象信息的函数type()、isinstance()、dir()
Sep 17 Python
使用python将多个excel文件合并到同一个文件的方法
Jul 09 Python
python 并发编程 多路复用IO模型详解
Aug 20 Python
python 解决cv2绘制中文乱码问题
Dec 23 Python
Python使用多进程运行含有任意个参数的函数
May 02 Python
Python RabbitMQ实现简单的进程间通信示例
Jul 02 Python
利用Python脚本写端口扫描器socket,python-nmap
Jul 23 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
PHP 第二节 数据类型之字符串类型
2012/04/28 PHP
YII2框架中使用yii.js实现的post请求
2017/04/09 PHP
php实现查询功能(数据访问)
2017/05/23 PHP
PHP simplexml_load_file()函数讲解
2019/02/03 PHP
详解PHP变量传值赋值和引用赋值变量销毁
2019/03/23 PHP
php操作redis数据库常见方法实例总结
2020/02/20 PHP
BOOM vs RR BO3 第二场2.13
2021/03/10 DOTA
jQuery 事件队列调整方法
2009/09/18 Javascript
关于javascript中this关键字(翻译+自我理解)
2010/10/20 Javascript
jquery实现奇偶行赋值不同css值
2012/02/17 Javascript
JavaScript加强之自定义event事件
2013/09/21 Javascript
Ajax提交与传统表单提交的区别说明
2014/02/07 Javascript
javascript中的return和闭包函数浅析
2014/06/06 Javascript
百度UEditor编辑器如何关闭抓取远程图片功能
2015/03/03 Javascript
js实现点击链接后延迟3秒再跳转的方法
2015/06/05 Javascript
javascript实现的闭包简单实例
2015/07/17 Javascript
JavaScript笔记之数据属性和存储器属性
2016/03/31 Javascript
js拖拽的原型声明和用法总结
2016/04/04 Javascript
AngularJS入门教程之过滤器详解
2016/08/19 Javascript
微信小程序 PHP生成带参数二维码
2017/02/21 Javascript
jQuery插件HighCharts实现的2D回归直线散点效果示例【附demo源码下载】
2017/03/09 Javascript
Axios学习笔记之使用方法教程
2017/07/21 Javascript
JS中使用react-tooltip插件实现鼠标悬浮显示框
2019/05/15 Javascript
[14:51]DOTA2 HEROS教学视频教你分分钟做大人-卓尔游侠
2014/06/13 DOTA
Python找出文件中使用率最高的汉字实例详解
2015/06/03 Python
python根据京东商品url获取产品价格
2015/08/09 Python
浅析Python编写函数装饰器
2016/03/18 Python
python类的继承实例详解
2017/03/30 Python
Window环境下Scrapy开发环境搭建
2018/11/18 Python
python web框架中实现原生分页
2019/09/08 Python
Tensorflow 模型转换 .pb convert to .lite实例
2020/02/12 Python
世界第一冲浪品牌:O’Neill
2016/08/30 全球购物
节能减排倡议书
2014/04/15 职场文书
财务内勤岗位职责
2014/04/17 职场文书
毕业生求职信范文
2014/06/29 职场文书
主持人开幕词
2015/01/29 职场文书