zoukankan      html  css  js  c++  java
  • 绘制应用程序内存占用随时间变化的图像显示

    绘制应用程序内存占用随时间变化的图像分为几个操作,这些操作,应该可以更加自动化,我这里,使用几个阶段的方式,使用者可以自由发挥。

    1. 使用top记录一个应用程序占用信息随时间变化的文件

    top -b | stdbuf -oL grep firefox > 1.txt

    说明:上述命令,可以改变top的输入参数,例如使用-d来修改打印的间隔。

    2. 简单使用awk输出VIRT列的输出到另外一个文件中

    awk '{print $5 > "2.txt"}' 1.txt

    3. 使用matplotlib简单进行绘制,这里使用gnuplot应该也完全可以,由于我之前略微学过一点深度学习,接触了一点matplotlib,所以这里就使用matplotlib的简单指令了。

    import matplotlib.pyplot as plt
    import numpy as np
    import fileinput
    import time
    import math
     
    print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))
     
    GTIMES = 1024**3
    MTIMES = 1024**2
    KTIMES = 1024
     
    def calcMemConsume(line, times):
        return float(line[0:len(line)-1])*times
     
    def getMemConsume(line):
        if line[len(line)-1].isdigit():
            return int(line)
        else:
            if (line.endswith('G') or line.endswith('g')):
                return calcMemConsume(line, GTIMES)
            elif (line.endswith('M') or line.endswith('m')):
                return calcMemConsume(line, MTIMES)
            elif (line.endswith('K') or line.endswith('k')):
                return calcMemConsume(line, KTIMES)
            else:
                raise RuntimeError('invalid memory value')
             
     
    ipt = np.array([])
    with fileinput.input(files=('/home/sun/2.txt')) as f:
        for line in f:
            val = getMemConsume(line.strip())
            ipt = np.append(ipt, val)
            
    print(ipt.size)
    plt.figure(figsize=(20, 20))  # 修改图像大小
    #plt.ylim(0, 20000)
    plt.plot(ipt)
    plt.ylabel("RES")
    plt.show()
     
    print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))

    我是使用的anaconda的jupyter进行绘制的,显示效果如下:

    这里显示的是我的firefox的VIRT随着时间变化的曲线。纵坐标可以通过上面代码中的注释进行调整。这个功能,可以用于调试应用,使用top记录下待测试应用内存随时间变化的曲线,然后,可以根据图像判断,是否存在内存泄露。对于mysql一类的调优,这个也是很好的辅助方法,我之所有有这个尝试,就是从看《高性能mysql》那本书得到的启发。当然,使用的方法比较简陋,如果有什么好的提议,多谢提出。

  • 相关阅读:
    springboot实现定时任务,异步操作,统一结果返回,全局异常处理,拦截器及事务处理
    springboot集成mybatis,热部署以及整合Swagger2
    使用idea上传项目到码云(gitee)上
    RabbitMQ 高级应用
    Spring Boot整合RabbitMQ
    RabbitMQ--其他几种模式
    RabbitMQ入门--简单模式
    RabbitMQ安装(centos7)
    RocketMQ安装及入门
    [UWP]涨姿势UWP源码——极简的RSS阅读器
  • 原文地址:https://www.cnblogs.com/albizzia/p/10294185.html
Copyright © 2011-2022 走看看