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 socket网络编程步骤详解(socket套接字使用)
Dec 06 Python
python调用新浪微博API项目实践
Jul 28 Python
python 添加用户设置密码并发邮件给root用户
Jul 25 Python
python如何拆分含有多种分隔符的字符串
Mar 20 Python
PyQt5每天必学之带有标签的复选框
Apr 19 Python
用Python写脚本,实现完全备份和增量备份的示例
Apr 29 Python
django缓存配置的几种方法详解
Jul 16 Python
Python中logging.NullHandler 的使用教程
Nov 29 Python
详解python使用pip安装第三方库(工具包)速度慢、超时、失败的解决方案
Dec 02 Python
详解numpy的argmax的具体使用
May 27 Python
keras 自定义loss model.add_loss的使用详解
Jun 22 Python
python 读取yaml文件的两种方法(在unittest中使用)
Dec 01 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
windows下apache搭建php开发环境
2015/08/27 PHP
PHP读取大文件的多种方法介绍
2016/04/04 PHP
Ubuntu VPS中wordpress网站打开时提示”建立数据库连接错误”的解决办法
2016/11/03 PHP
php实现socket推送技术的示例
2017/12/20 PHP
jQuery 对象中的类数组操作
2009/04/27 Javascript
JavaScript 精粹读书笔记(1,2)
2010/02/07 Javascript
Jquery 扩展方法
2010/05/06 Javascript
jquery的Theme和Theme Switcher使用小结
2010/09/08 Javascript
javascript 获取所有id中包含某关键字的控件的实现代码
2010/11/25 Javascript
页面只能打开一次Cooike如何实现
2012/12/04 Javascript
js动态设置鼠标事件示例代码
2013/10/30 Javascript
jquery select 设置默认选中的示例代码
2014/02/07 Javascript
JavaScript中常用的六种互动方法示例
2015/03/13 Javascript
D3.js实现折线图的方法详解
2016/09/21 Javascript
js数组操作方法总结(必看篇)
2016/11/22 Javascript
webpack里使用jquery.mCustomScrollbar插件的方法
2018/05/30 jQuery
基于js实现判断浏览器类型代码实例
2020/07/17 Javascript
[36:14]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第二局
2016/02/28 DOTA
Python入门篇之正则表达式
2014/10/20 Python
用Python登录Gmail并发送Gmail邮件的教程
2015/04/17 Python
python之信息加密题目详解
2019/06/26 Python
使用python 写一个静态服务(实战)
2019/06/28 Python
Python networkx包的实现
2020/02/14 Python
解决Python安装cryptography报错问题
2020/09/03 Python
python爬取招聘要求等信息实例
2020/11/20 Python
美国儿童服装、家具和玩具精品店:Maisonette
2019/11/24 全球购物
垃圾回收的优点和原理
2014/05/16 面试题
咖啡店创业计划书范文
2014/09/15 职场文书
公证书格式
2015/01/23 职场文书
售票员岗位职责
2015/02/15 职场文书
拯救大兵瑞恩观后感
2015/06/09 职场文书
单位病假条范文
2015/08/17 职场文书
周末问候语大全
2015/11/10 职场文书
如何让vue长列表快速加载
2021/03/29 Vue.js
低门槛开发iOS、Android、小程序应用的前端框架详解
2021/10/16 Javascript
Python可视化神器pyecharts绘制水球图
2022/07/07 Python