javaScript内存管理及监控

1.1 内存定义

        内存由可读写单元组成,表示一片可操作空间,开发者主动申请空间、使用空间、释放空间。内存主要存储变量等数据,局部变量当程序执行结束,且没有引用的时候就会随着消失,全局对象会始终存活到程序运行结束。

        V8是一款主流的 JavaScript 执行引擎,V8内存分为新生代和老生代。V8内存的大小和操作系统有关:

  • 64位为1.4G,新生代空间为64M,老生代为1400M
  • 32位为0.7G,新生代空间为16M,老生代为700M

1.2 内存查看

  1. Node环境

        通过process.memoryUsage() 查看内存使用情况,具体参数如下:

                rss: V8申请到的总占用空间

                heapTotal: 堆总内存

                heapUsed: 已使用的内存

                external: node专有(底层是c,额外申请到的c++内存 )

2. Chrome浏览器查看内存

打开开发者工具,在控制台输入window.performance.memory。

3. Performance工具

打开开发者工具 => 性能 => 勾选“内存”复选框 => 单击“记录”=> 随便访问网页。如下图所示:

点击停止后,生成如下报告,看JS堆的线条,幅度最大的地方就是内存使用最高的,如果内存一直居高不下,即表示没被回收,可能出现内存泄漏,展示图如下:

4. 堆块照查找分离 DOM

打开开发者工具 => 内存=> 单击“拍摄”=> 生成快照。如下图所示:

操作后再生成快照,在类筛选器框内,输入deta,如下:

输入deta可查看:

      • 界面元素存活在DOM树上,
      • 垃圾对象时的DOM节点 (节点不在当前dom树上,js中也没有人在引用)
      • 分离状态的DOM节点 (不在当前dom树上,但是js有引用)

5. 任务管理器监控内存变化

shift+esc 调出浏览器自带的任务管理器,右击选中javascript内存。

6. Timeline 时序图记录

开发者工具–> 性能–>录制–>模拟用户行为

7. 确定是否频繁垃圾回收

       GC工作时应用程序是停止的,频繁且过长的 GC 会导致应用假死,用户使用中感知到应用卡顿。可通过以下两种方式判断:

  • Timeline 中频繁的上升下降
  • 任务管理器中数据频繁的增加减小
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是一个比较复杂的项目,需要一定的技术基础。以下是大致的步骤: 1. 搭建Flask应用程序,包括路由和页面模板。 2. 安装mysql,并连接到Flask应用程序。 3. 编写采集系统CPU和内存使用率的Python脚本,并将采集到的数据存储到mysql的表。 4. 使用Ajax实现前端页面与后端的数据交互,定时获取mysql数据并更新折线图。 具体实现步骤如下: 1. 搭建Flask应用程序 首先需要安装Flask框架和相关依赖。可以使用pip命令进行安装: ```python pip install flask pip install flask-mysql ``` 接下来创建一个Flask应用程序,并编写路由和页面模板。 ```python from flask import Flask, render_template app = Flask(__name__) @app.route('/') def index(): return render_template('index.html') if __name__ == '__main__': app.run() ``` 在templates文件夹下创建一个名为index.html的模板文件,用于显示实时监控的折线图。 ```html <!DOCTYPE html> <html> <head> <title>CPU内存实时监控</title> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/echarts/4.6.0/echarts.min.js"></script> </head> <body> <div id="chart" style="width: 100%; height: 400px;"></div> <script> var myChart = echarts.init(document.getElementById('chart')); var option = { title: { text: 'CPU内存实时监控' }, tooltip: { trigger: 'axis' }, legend: { data:['CPU使用率', '内存使用率'] }, xAxis: { type: 'category', boundaryGap: false, data: [] }, yAxis: { type: 'value', axisLabel: { formatter: '{value}%' } }, series: [ { name: 'CPU使用率', type: 'line', data: [] }, { name: '内存使用率', type: 'line', data: [] } ] }; myChart.setOption(option); setInterval(function() { $.ajax({ url: '/data', success: function(data) { var xAxisData = []; var cpuData = []; var memData = []; for(var i = 0; i < data.length; i++) { xAxisData.push(data[i].time); cpuData.push(data[i].cpu); memData.push(data[i].memory); } myChart.setOption({ xAxis: { data: xAxisData }, series: [ { name: 'CPU使用率', data: cpuData }, { name: '内存使用率', data: memData } ] }); } }); }, 1000); </script> </body> </html> ``` 2. 安装mysql,并连接到Flask应用程序 首先需要安装mysql,并创建一个数据库和一个表用于存储采集到的数据。 ```sql CREATE DATABASE monitor; USE monitor; CREATE TABLE data ( id INT NOT NULL AUTO_INCREMENT, time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, cpu FLOAT, memory FLOAT, PRIMARY KEY (id) ); ``` 接下来在Flask应用程序添加mysql配置,并连接到mysql。 ```python from flaskext.mysql import MySQL app = Flask(__name__) app.config['MYSQL_DATABASE_HOST'] = 'localhost' app.config['MYSQL_DATABASE_PORT'] = 3306 app.config['MYSQL_DATABASE_USER'] = 'root' app.config['MYSQL_DATABASE_PASSWORD'] = '123456' app.config['MYSQL_DATABASE_DB'] = 'monitor' mysql = MySQL() mysql.init_app(app) @app.route('/data') def get_data(): cursor = mysql.get_db().cursor() cursor.execute('SELECT * FROM data ORDER BY time DESC LIMIT 30') data = cursor.fetchall() return jsonify(data) ``` 3. 编写采集系统CPU和内存使用率的Python脚本,并将采集到的数据存储到mysql的表 使用psutil库可以方便地获取系统CPU和内存使用率。编写一个Python脚本,定时采集CPU和内存使用率,并将采集到的数据存储到mysql的表。 ```python import psutil import time import pymysql conn = pymysql.connect(host='localhost', port=3306, user='root', password='123456', db='monitor') while True: cpu_percent = psutil.cpu_percent(interval=1) mem_percent = psutil.virtual_memory().percent cursor = conn.cursor() cursor.execute('INSERT INTO data (cpu, memory) VALUES (%s, %s)', (cpu_percent, mem_percent)) conn.commit() time.sleep(1) conn.close() ``` 4. 使用Ajax实现前端页面与后端的数据交互,定时获取mysql数据并更新折线图 在前面的index.html模板文件已经使用Ajax定时获取数据并更新折线图。 ```javascript setInterval(function() { $.ajax({ url: '/data', success: function(data) { var xAxisData = []; var cpuData = []; var memData = []; for(var i = 0; i < data.length; i++) { xAxisData.push(data[i].time); cpuData.push(data[i].cpu); memData.push(data[i].memory); } myChart.setOption({ xAxis: { data: xAxisData }, series: [ { name: 'CPU使用率', data: cpuData }, { name: '内存使用率', data: memData } ] }); } }); }, 1000); ``` 以上就是使用Flask+mysql+html搭建CPU内存实时监控折线图功能的大致步骤。需要注意的是,由于采集系统CPU和内存使用率的Python脚本需要长时间运行,可以使用supervisor等工具进行进程管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值