IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> Stratovirt-Hydropper源码分析之monitor模块 -> 正文阅读

[开发测试]Stratovirt-Hydropper源码分析之monitor模块

前言

hydropper是一个基于pytest的轻量级测试框架,在其基础上封装了虚拟化的相关测试原子,用于stratovirt的黑盒测试。当前hydropper已经提供了一些测试用例,可以帮助开发人员发现和定位stratovirt的问题。
monitor模块完成的任务是创建子进程用于对虚拟机的监控。截止写稿日期,openEuler社区的Hydropper源码内已经提供了三个监控文件,本文将会针对三个文件进行源码分析。
此外,Stratovirt的内存监控能力还远远不及完整一说,还有许多功能等待开发者的完善。欢迎加入到openEuler开源社区,成为我们的一员。

monitor_info.py分析

该文件中包含了一个类:

class MonitorInfo(threading.Thread)

可见,类MonitorInfo继承于threading库中的Thread类

· init

在这里插入图片描述

  • monitor_type:监控器类型,也可被解释为监控器名称(在监控器种类尚不齐全的当下)
  • monitor_cycle:监控器间隔时间,若实际监控用时较短也可被称为监控周期
  • monitor_level:监控等级
  • _state:监控线程状态。常用属性值有init、stop、running。
  • state_lock:状态锁。为了让线程并发合理进行。常用属性值有locked、unlocked
  • _enable:使能。激活和停用虚拟机。为布尔型变量
  • e_queue:事件队列,用于处理监控检测到的事件

· enable&disable

在这里插入图片描述
分别将_enable属性置为True/False

· set_state

在这里插入图片描述
尝试改变状态时,用with进行检测,如果state_lock是locked,则报错;如果是unlocked,则将状态进行更新

· run

在这里插入图片描述

  1. 将状态设置为running
  2. 如果状态不是stop,就按间隔时间睡眠。(sleep前应该有要做的工作,只是没有写出)

· check

在这里插入图片描述
检查虚拟机运行是否正常

· enqueue

在这里插入图片描述

  1. 通过参数生成一个事项字典,其中包括了监视器类型monitor_type、事项等级level、错误信息errmsg
  2. 尝试将事项以非阻塞的形式放入事项队列
  3. 如果队列已满,报错相应内容

mem_usage_info.py分析

该文件包含了一个专门用于检测内存使用的类:

class MemoryUsageExceededInfo(monitor_info.MonitorInfo)

可见,该类继承于MonitorInfo类

· init

在这里插入图片描述

  • 默认最大内存为4M
  1. 设置监视器类型为内存使用,周期设置为10s,继承父类
  2. 设置pid、最大内存、客户机内存限制

· update_pid

在这里插入图片描述
更新监控线程的pid

· check

    def check(self):
        """
        Check memory usage exceeded or not(overwrite to the monitorinfo)

        Returns:
            (bool, level, err_msg)
        """
        exceeded = False
        level = "info"
        err_msg = ""
        pmap_cmd = "pmap -xq {}".format(self._pid)
        mem_total = 0
        try:
            pmap_out = run(pmap_cmd, shell=True, check=True,
                           stdout=PIPE).stdout.decode('utf-8').split("\n")
        except CalledProcessError:
            return exceeded
        for line in pmap_out:
            tokens = line.split()
            if not tokens:
                break
            try:
                total_size = int(tokens[1])
                rss = int(tokens[2])
            except ValueError:
                continue
            if total_size > self.guest_memory_limit:
                # this is the guest memory region
                continue
            mem_total += rss

        logging.debug("mem_total:%s", mem_total)

        if mem_total >= self.max_memory:
            exceeded = True
            level = "error"
            err_msg = "memory usage is %s, it's greater than %s" % (mem_total, self.max_memory)

        return exceeded, level, err_msg
  1. 初始化信息和命令
  2. 输入命令行,获取对应pid的进程内存使用情况
  3. 对获取到的内容进行处理,得到进程内存使用总量
  4. 如果计算得到的数大于等于规定的最大使用量,则返回报错信息

monitor_thread.py分析

该文件包含了一个专门用于线程检测的类:

class MonitorThread(threading.Thread)
	items = dict()

可见,该类继承于Thread类,并且创建了一个监控器项字典

· init

在这里插入图片描述

  1. 继承父类
  2. 初始化状态锁保证进程同步
  3. 初始化状态为init

· set_state

在这里插入图片描述
如果状态锁为unlocked状态,将状态修改

· stop

在这里插入图片描述
通过set_state函数将状态设置为stop

· add_item

在这里插入图片描述

  1. 向监控器项字典中添加监控,key为监控器类型,value为监控器名称
  2. 运行该监控器,返回真

· del_item

在这里插入图片描述

  1. 将监控器线程关闭,阻塞其线程
  2. 如果该监控器存在于监控器项字典,则将其删除
  3. 如果删除动作后监控器依旧处于激活状态,则写debug级日志,返回假
  4. 否则写debug级日志,返回真

· run

在这里插入图片描述

  1. 将状态设置为running
  2. 当状态不为stop时一直循环:从事件队列获取到内容,用event_handler函数来处理;如果为空,则do nothing

· event_handler

在这里插入图片描述

  1. 如果事件类型存在于监控器项字典中,则
  2. 如果字典中对应类型有event_handler属性,则获得其属性值处理当前事件
  3. 否则如果事件等级为fatal或者error,写error级日志
  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-09-02 11:40:46  更:2021-09-02 11:42:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/11 15:06:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码