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的Django应用程序解决AJAX跨域访问问题的方法
May 31 Python
Python实现获取命令行输出结果的方法
Jun 10 Python
Python获取CPU、内存使用率以及网络使用状态代码
Feb 08 Python
python:print格式化输出到文件的实例
May 14 Python
Python3.4 tkinter,PIL图片转换
Jun 21 Python
对Python3 pyc 文件的使用详解
Feb 16 Python
python爬虫 基于requests模块发起ajax的get请求实现解析
Aug 20 Python
Python使用Pandas读写Excel实例解析
Nov 19 Python
python错误调试及单元文档测试过程解析
Dec 19 Python
python实现每天自动签到领积分的示例代码
Aug 18 Python
Python基于unittest实现测试用例执行
Nov 25 Python
Python+Appium实现自动抢微信红包
May 21 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
神族 Protoss 剧情介绍
2020/03/14 星际争霸
php 正则 过滤html 的超链接
2009/06/02 PHP
PHP parse_url 一个好用的函数
2009/10/03 PHP
PHP 魔术函数使用说明
2010/05/14 PHP
PHP面向对象学习笔记之一 基础概念
2012/10/06 PHP
PHP中使用break跳出多重循环代码实例
2015/01/21 PHP
Yii2实现多域名跨域同步登录退出
2017/02/04 PHP
PHP对称加密算法(DES/AES)类的实现代码
2017/11/14 PHP
JS获取scrollHeight问题想到的标准问题
2007/05/27 Javascript
Jquery 表格合并的问题分享
2011/09/17 Javascript
javascript 随机展示头像实现代码
2011/12/06 Javascript
JavaScript中的单引号和双引号报错的解决方法
2014/09/01 Javascript
AngularJS 自定义指令详解及示例代码
2016/08/17 Javascript
前端js实现文件的断点续传 后端PHP文件接收
2016/10/14 Javascript
jquery uploadify如何取消已上传成功文件
2017/02/08 Javascript
JavaScript 字符串数字左补位,右补位,取固定长度,截位扩展函数代码
2017/03/25 Javascript
Vue.js实现输入框绑定的实例代码
2017/08/24 Javascript
利用ES6的Promise.all实现至少请求多长时间的实例
2017/08/28 Javascript
详解在express站点中使用ejs模板引擎
2017/09/21 Javascript
vue生成token并保存到本地存储中
2018/07/17 Javascript
python实现微信自动回复功能
2018/04/11 Python
django 发送手机验证码的示例代码
2018/04/25 Python
对pandas中两种数据类型Series和DataFrame的区别详解
2018/11/12 Python
python批量替换文件名中的共同字符实例
2020/03/05 Python
Python任务调度利器之APScheduler详解
2020/04/02 Python
Python捕获异常堆栈信息的几种方法(小结)
2020/05/18 Python
使用Python制作一个数据预处理小工具(多种操作一键完成)
2021/02/07 Python
基于html和CSS3制作酷炫的导航栏
2015/09/23 HTML / CSS
请说出几个常用的异常类
2013/01/08 面试题
汽车技术服务与营销专业推荐信
2013/11/29 职场文书
教师考核材料
2014/05/21 职场文书
学校党的群众路线教育实践活动总结报告
2014/07/03 职场文书
酒店采购员岗位职责
2015/04/03 职场文书
python3 hdf5文件 遍历代码
2021/05/19 Python
关于springboot配置druid数据源不生效问题(踩坑记)
2021/09/25 Java/Android
python小型的音频操作库mp3Play
2022/04/24 Python