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查询Mysql时返回字典结构的代码
Jun 18 Python
python基于右递归解决八皇后问题的方法
May 25 Python
Python随机生成均匀分布在单位圆内的点代码示例
Nov 13 Python
Python+matplotlib实现华丽的文本框演示代码
Jan 22 Python
Python cookbook(数据结构与算法)字典相关计算问题示例
Feb 18 Python
Python实现ping指定IP的示例
Jun 04 Python
Windows 64位下python3安装nltk模块
Sep 19 Python
PyQt5通信机制 信号与槽详解
Aug 07 Python
Pandas 缺失数据处理的实现
Nov 04 Python
python 五子棋如何获得鼠标点击坐标
Nov 04 Python
Django 简单实现分页与搜索功能的示例代码
Nov 07 Python
Python pip install之SSL异常处理操作
Sep 03 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基础知识:类与对象(2) 自动加载对象
2006/12/13 PHP
PHP中使用break跳出多重循环代码实例
2015/01/21 PHP
php 实现进制相互转换
2016/04/07 PHP
splice slice区别
2006/10/09 Javascript
javascript一个无懈可击的实例化XMLHttpRequest的方法
2010/10/13 Javascript
如何实现移动端浏览器不显示 pc 端的广告
2015/10/15 Javascript
Angular.js与Bootstrap相结合实现表格分页代码
2016/04/12 Javascript
轻松5句话解决JavaScript的作用域
2016/07/15 Javascript
第一次接触神奇的Bootstrap菜单和导航
2016/08/01 Javascript
JS获取鼠标相对位置的方法
2016/09/20 Javascript
浅谈JavaScript中的apply/call/bind和this的使用
2017/02/26 Javascript
详解Vue中使用v-for语句抛出错误的解决方案
2017/05/04 Javascript
浅析JS抽象工厂模式
2017/12/14 Javascript
详解微信小程序input标签正则初体验
2018/08/18 Javascript
详解es6新增数组方法简便了哪些操作
2019/05/09 Javascript
layui use 定义js外部引用函数的方法
2019/09/26 Javascript
JavaScript碰撞检测原理及其实现代码
2020/03/12 Javascript
python笔记(1) 关于我们应不应该继续学习python
2012/10/24 Python
python分析apache访问日志脚本分享
2015/02/26 Python
python编码总结(编码类型、格式、转码)
2016/07/01 Python
Python3 Random模块代码详解
2017/12/04 Python
Python实现可设置持续运行时间、线程数及时间间隔的多线程异步post请求功能
2018/01/11 Python
python的常用模块之collections模块详解
2018/12/06 Python
Scrapy框架爬取Boss直聘网Python职位信息的源码
2019/02/22 Python
在OpenCV里使用特征匹配和单映射变换的代码详解
2019/10/23 Python
python给指定csv表格中的联系人群发邮件(带附件的邮件)
2019/12/31 Python
Jupyter Notebook的连接密码 token查询方式
2020/04/21 Python
Jupyter Notebook 远程访问配置详解
2021/01/11 Python
Html5游戏开发之乒乓Ping Pong游戏示例(三)
2013/01/21 HTML / CSS
html5响应式开发自动计算fontSize的方法
2020/01/13 HTML / CSS
玩具反斗城葡萄牙官方商城:Toys"R"Us葡萄牙
2016/10/21 全球购物
一套软件测试笔试题
2014/07/25 面试题
通息工程毕业生自荐信
2013/10/16 职场文书
保险公司晨会主持词
2014/03/22 职场文书
消防宣传语大全
2015/07/13 职场文书
MySQL 数据表操作
2022/05/04 MySQL