美文网首页
监控实例(Linux/Windows)的内存使用率

监控实例(Linux/Windows)的内存使用率

作者: 程序员馨馨紫 | 来源:发表于2021-05-10 15:34 被阅读0次

    一、项目背景

    需要实时监控云服务器上实例的内存使用率,类似于腾讯云和阿里云的实例监控数据

    二、开发实现思路

    通过Prometheus监控系统,按一定的规则采集OpenStack宿主机上各虚拟机的数据,保存在时序库中,再按照产品需求,按照一定的算法,将数据展示在对应页面上

    三、测试环境准备

    A、Linux服务器一台
    1、在Linux机器上安装nmon,可参考:https://www.jianshu.com/p/f3282733d245

    四、测试方法--Linux系统

    1、执行Python脚本,可将内存的占有率设置为100%,75%,50%,25%等(将python脚本放至Linux下的某个目录,进入该目录下执行命令:python3 cpu_men.py m 3GB(或者python cpu_men.py m 3GB),其中参数m表示内存,3表示占内存 3GB,如果总内存为4GB,则使用率为75%)
    #! /user/bin/env python
    # -*- encoding: utf-8 -*-
    import sys
    import re
    import time
    from multiprocessing import Process,cpu_count
    def print_help():
        print('Usage: ')
        print('  python test_mem.py m 1GB')
        print('  python test_mem.py c 1')
        print('  python test_mem.py mc 1GB 2')
    #实现占用内存
    def mem():
        pattern = re.compile('^(\d*)([M|G]B)$')
        size = sys.argv[2].upper()
        match = pattern.match(size)
        if match:
            num = int(match.group(1))
            unit = match.group(2)
            if unit == 'MB':
                s = ' ' * (num * 1024 * 1024)
            else:
                s = ' ' * (num * 1024 * 1024 * 1024)
            time.sleep(24 * 3600)
        else:
            print("bad args.....")
            print_help()
    #cpu满载
    def deadloop():
        while True:
            pass
    #根据传参来指定占满几个核
    def cpu():
        arg = sys.argv[2] if len(sys.argv) == 3 else sys.argv[3]
        cpu_num = cpu_count()
        cores = int(arg)
        if not isinstance(cores,int):
            print("bad args not int")
            return
    
        if cores > cpu_num:
            print("Invalid CPU Num(cpu_count="+str(cpu_num)+")")
            return
    
        if cores is None or cores <1:
            cores = 1
    
        for i in range(cores):
            Process(target=deadloop).start()
    def mem_cpu():
        Process(target=mem).start()
        Process(target=cpu).start()
    if __name__ == "__main__":
        if len(sys.argv) >= 3:
            switcher = {
                'm': mem,
                'c': cpu,
                'mc': mem_cpu
            }
            switcher.get(sys.argv[1], mem)()
        else:
            print_help()
    
    
    2、查看结果,有两种方式

    截图为腾讯云的数据,仅供参考


    7.png

    1、通过nmon实时查看


    5.png
    2、通过导出的.nmon文件,生成图表查看
    6.png

    五、测试方法--Windows系统

    1、执行Python脚本,可将内存的占有率设置为100%,75%,50%,25%等(将python脚本放至Linux下的某个目录,进入该目录下执行命令:python3 cpu_men.py m 3GB(或者python cpu_men.py m 3GB),其中参数m表示内存,3表示占内存 3GB,如果总内存为4GB,则使用率为75%)
    #! /user/bin/env python
    # -*- encoding: utf-8 -*-
    import sys
    import re
    import time
    from multiprocessing import Process,cpu_count
    def print_help():
        print('Usage: ')
        print('  python test_mem.py m 1GB')
        print('  python test_mem.py c 1')
        print('  python test_mem.py mc 1GB 2')
    #实现占用内存
    def mem():
        pattern = re.compile('^(\d*)([M|G]B)$')
        size = sys.argv[2].upper()
        match = pattern.match(size)
        if match:
            num = int(match.group(1))
            unit = match.group(2)
            if unit == 'MB':
                s = ' ' * (num * 1024 * 1024)
            else:
                s = ' ' * (num * 1024 * 1024 * 1024)
            time.sleep(24 * 3600)
        else:
            print("bad args.....")
            print_help()
    #cpu满载
    def deadloop():
        while True:
            pass
    #根据传参来指定占满几个核
    def cpu():
        arg = sys.argv[2] if len(sys.argv) == 3 else sys.argv[3]
        cpu_num = cpu_count()
        cores = int(arg)
        if not isinstance(cores,int):
            print("bad args not int")
            return
    
        if cores > cpu_num:
            print("Invalid CPU Num(cpu_count="+str(cpu_num)+")")
            return
    
        if cores is None or cores <1:
            cores = 1
    
        for i in range(cores):
            Process(target=deadloop).start()
    def mem_cpu():
        Process(target=mem).start()
        Process(target=cpu).start()
    if __name__ == "__main__":
        if len(sys.argv) >= 3:
            switcher = {
                'm': mem,
                'c': cpu,
                'mc': mem_cpu
            }
            switcher.get(sys.argv[1], mem)()
        else:
            print_help()
    
    
    2、查看结果,有两种方式

    截图为腾讯云的数据,仅供参考


    7.png

    A、在Windows任务管理器/性能上实时查看


    47.png

    相关文章

      网友评论

          本文标题:监控实例(Linux/Windows)的内存使用率

          本文链接:https://www.haomeiwen.com/subject/lmsidltx.html