构建一个资源控制面板:模拟 CPU 和内存负载

news2024/12/27 11:33:16

构建一个资源控制面板:模拟 CPU 和内存负载

在这里插入图片描述

每个人都会有一段异常艰难的时光。生活的压力,工作的失意,学业的压力,爱的惶惶不可终日,挺过来的,人生就会豁然开朗,挺不过来的、时间也会教你,怎么与它们握手言和,所以不必害怕的,

在性能测试和调优过程中,模拟系统负载是一个重要任务。本文将介绍如何使用 Flask 和 stress-ng 工具创建一个简单的 Web 控制面板,用于模拟 CPU 和内存负载,并通过简单的 HTML 页面进行操作。我们还将介绍如何安装 Cockpit 以提供系统监控功能,并将其与负载控制面板结合使用。

1. 环境准备

安装 Python

首先,你需要安装 Python。Python 3.x 是推荐的版本。如果你还没有安装 Python,可以通过以下步骤进行安装:

在 Debian/Ubuntu 系统上安装 Python 3
sudo apt update
sudo apt install python3 python3-pip
在 CentOS/RHEL 系统上安装 Python 3
sudo yum install python3

安装 Flask

Flask 是一个轻量级的 Python Web 框架。使用 pip 安装 Flask:

pip3 install Flask

安装 stress-ng

stress-ng 是一个强大的负载测试工具,可以用于生成各种系统负载,包括 CPU、内存、磁盘和 IO。它适用于测试系统的稳定性和性能。以下是 stress-ng 的一些常用参数:

  • --cpu:指定要启动的 CPU 负载线程数量。
  • --cpu-load:设置每个 CPU 负载线程的负载百分比。
  • --vm:指定要启动的内存负载线程数量。
  • --vm-bytes:设置每个内存负载线程分配的内存量。
  • --timeout:设置负载测试的持续时间。

在我们的脚本中,stress-ng 被用来模拟 CPU 和内存的负载,以便测试和调优系统性能。

sudo yum install stress-ng

安装 Cockpit

如果你需要一个可以通过Web页面控制资源利用率的工具,可以考虑以下几种解决方案:

Cockpit 是一个用于管理Linux服务器的Web接口,具有直观的Web UI。你可以通过它监控和管理系统资源。配合 stress-ng 插件,你可以在Web界面上监控CPU、内存等资源的负载变化。

sudo yum install  cockpit

安装后,启动Cockpit:

sudo systemctl start cockpit

然后在浏览器中访问 https://<your-server-ip>:9090 进入Cockpit界面。

在这里插入图片描述

2. 创建 Python 脚本

接下来,我们创建一个 Flask 应用程序,用于接受来自 Web 表单的输入,并使用 stress-ng 工具来模拟 CPU 和内存负载。

Python 脚本:app.py

# -*- coding: utf-8 -*-

from flask import Flask, request, render_template_string
import subprocess

app = Flask(__name__)

# HTML 模板,使用 Bootstrap 美化界面并将文字改为中文
html_template = '''
<!doctype html>
<html lang="zh-CN">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <style>
      /* 内联 Bootstrap CSS */
      .container { max-width: 960px; margin: 0 auto; padding: 15px; }
      .mt-5 { margin-top: 3rem; }
      .mb-4 { margin-bottom: 1.5rem; }
      .form-group { margin-bottom: 1rem; }
      .form-control { display: block; width: 100%; padding: .375rem .75rem; font-size: 1rem; line-height: 1.5; border: 1px solid #ced4da; border-radius: .25rem; }
      .btn { display: inline-block; font-weight: 400; text-align: center; white-space: nowrap; vertical-align: middle; cursor: pointer; border: 1px solid transparent; border-radius: .25rem; }
      .btn-primary { color: #fff; background-color: #007bff; border-color: #007bff; }
      .btn-primary:hover { color: #fff; background-color: #0069d9; border-color: #0062cc; }
      .btn-danger { color: #fff; background-color: #dc3545; border-color: #dc3545; }
      .btn-danger:hover { color: #fff; background-color: #c82333; border-color: #bd2130; }
    </style>
    <title>资源风暴控制面板</title>
  </head>
  <body>
    <div class="container mt-5">
      <h1 class="mb-4">资源风暴控制面板</h1>
      <form method="POST" action="/start">
        <div class="form-group">
          <label for="cpu_load">CPU 负载 (%)</label>
          <input type="number" class="form-control" id="cpu_load" name="cpu_load" required min="0" max="100" placeholder="请输入 CPU 负载百分比">
        </div>
        <div class="form-group">
          <label for="memory_load">内存负载 (MB)</label>
          <input type="number" class="form-control" id="memory_load" name="memory_load" required placeholder="请输入内存负载 (MB)">
        </div>
        <button type="submit" class="btn btn-primary">开始</button>
      </form>
      <form method="POST" action="/stop" class="mt-3">
        <button type="submit" class="btn btn-danger">停止</button>
      </form>
    </div>
  </body>
</html>
'''

@app.route('/')
def index():
    return render_template_string(html_template)

@app.route('/start', methods=['POST'])
def start():
    cpu_load = int(request.form['cpu_load'])
    memory_load = int(request.form['memory_load'])
    
    # 启动 CPU 负载
    subprocess.Popen(['stress-ng', '--cpu', '1', '--cpu-load', str(cpu_load), '--timeout', '600s'])
    
    # 启动内存负载
    subprocess.Popen(['stress-ng', '--vm', '1', '--vm-bytes', f'{memory_load}M', '--timeout', '600s'])

    return '已开始 CPU 和内存负载'

@app.route('/stop', methods=['POST'])
def stop():
    # 停止所有 stress-ng 进程
    subprocess.Popen(['pkill', 'stress-ng'])
    return '已停止 CPU 和内存负载'

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

3. 运行 Flask 应用

保存上述 Python 脚本为 app.py,然后在终端中运行它:

python3 app.py
nohup  ./app> ./logfile.log 2>&1 &

默认情况下,Flask 应用将运行在 http://0.0.0.0:5000。你可以在浏览器中访问这个地址来查看控制面板。

在这里插入图片描述

4. 使用 Cockpit 进行系统监控

Cockpit 提供了一个用户友好的界面,用于监控和管理系统。在 Cockpit 中,你可以查看系统的实时资源利用率、日志、服务状态等信息。

  • 访问 Cockpit:在浏览器中访问 http://<your-server-ip>:9090,登录后,你将看到 Cockpit 的主界面。
  • 监控资源利用率:在 Cockpit 中,你可以查看 CPU、内存、磁盘和网络的实时数据。这与我们的 Flask 控制面板相辅相成,使你能够同时控制和监控系统负载。

5. 结合使用 Flask 控制面板和 Cockpit

通过结合 Flask 控制面板和 Cockpit,你可以:

  1. 模拟负载:使用 Flask 控制面板来模拟系统负载。调整 CPU 和内存负载后,查看 Cockpit 中的资源利用率变化。
  2. 监控系统状态:在 Cockpit 中实时监控系统的性能数据,确保系统在负载下的表现符合预期。

总结

本文介绍了如何使用 Flask 和 stress-ng 工具创建一个简单的 Web 控制面板,并且使用Cockpit进行监控,用于模拟 CPU 和内存负载。我们还详细说明了 Python 的安装步骤、stress-ng 工具的作用,以及如何安装和使用 Cockpit 进行系统监控。结合这两种工具,你可以更加全面地测试和监控系统的性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2083443.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

记一次事务里发普通消息的线上问题排查过程

1 结论 结论先行&#xff1a;事务MQ的使用场景&#xff0c;使用方式一定得正确&#xff0c;稍有不慎&#xff0c;可能就会带来数据不一致问题。 2 问题背景及现象 3 排查过程 3.1 初次分析 发现问题&#xff0c;及时修复&#xff0c;加完锁上线&#xff0c;以为问题修复了&a…

const、inline、nullptr的使用

目录 1.const引用 1.1权限的放大 1.2权限的缩小 2.inline 3.nullptr 1.const引用 可以引用一个const对象&#xff0c;但是必须用const引用。const引用也可以引用普通对象&#xff0c;因为对象的访 问权限在引用过程中可以缩小&#xff0c;但是不能放大。 不需要注意的是…

C#从入门到精通(20)—C#目录类Directory用法总结

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff01;人工智能学习网站 前言&#xff1a; 大家好&#xff0c;我是上位机马工&#xff0c;硕士毕业4年年入40万&#xff0c;目前在一家自动化公司担任…

【硬核】开源的高性能轻量级ORM框架

简介 easy-orm是一款简洁、轻量高效的数据库对象关系映射框架&#xff0c;它的代码编写规范基于SQL语义&#xff0c;学习成本低&#xff0c;可以快速掌握。 下图是与业界mybatis-plus框架相比。 功能mybatis-pluseasy-orm单表CRUD√√多表CRUD√子查询x√多数据源√预编译√…

一文带你深度了解FreeRTOS信号量——二值信号量

本篇文章深度讲述FreeRTOS信号量——二值信号量的知识&#xff0c;希望我的分享对你有所帮助&#xff01; 关于FreeRTOS信号量的相关介入&#xff0c;大家可以参考一下这篇文章&#xff1a; 一文带你初探FreeRTOS信号量_freertos 二进制信号量-CSDN博客 目录 一、二值信号量简…

25届最近5年自动化考研院校分析

哈尔滨工程大学 目录 一、学校学院专业简介 二、考试科目指定教材 三、近5年考研分数情况 四、近5年招生录取情况 五、最新一年分数段图表 六、初试大纲复试大纲 七、学费&奖学金&就业方向 一、学校学院专业简介 二、考试科目指定教材 1、考试科目介绍 2、指定…

顺序结构就是“千里走单骑”

顺序结构&#xff0c;就是把工作分成若干个步骤&#xff0c;然后让计算机按步骤依次执行。 对于代码而言&#xff0c;顺序结构就是从上到下依次执行每一条语句。 #include<stdio.h>int main(){//The steps of putting an elephant into the fridge.printf("First,…

【Python知识宝库】掌握列表与元组,轻松处理数据集合

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引言 在Python编程中&#xff0c;列表&#xff08;List&#xff09;和元组&#xff08;Tuple&#xff09;是两种非常基础且强大…

Unity实战案例 2D小游戏HappyGlass(游戏管理类脚本)

本案例素材和教程都来自Siki学院&#xff0c;十分感谢教程中的老师 本文仅作学习笔记分享交流&#xff0c;不作任何商业用途 基础效果 游戏管理脚本 using System.Collections; using System.Collections.Generic; using Unity.VisualScripting; using UnityEngine; using Uni…

FineBI修改地图配置

前言 在使用FineBI绘制地图时&#xff0c;有时候我们可能发现FineBI中的默认地图模型不是最新的&#xff0c;导致某些地区的区域地图与现实不一致&#xff0c;比如说FineBI的默认地图中深圳地图没有大鹏新区&#xff0c;并且将现在大鹏新区的地方标记为了龙华区&#xff0c;为…

Leetcode19删除链表的倒数第K个节点(java实现)

今天分享的题目如下&#xff1a; 说一下我们的解题思路&#xff1a;我们要想删除第k个节点&#xff0c;那么指针必须落在k-1节点上&#xff0c;比如我们想要操作题目中的节点4&#xff0c;那么指针必须落在节点3&#xff0c;然后让节点3.next 3.next.next即可。 所以明白了这个…

【精选】计算机毕业设计之:基于springboot汽车租赁系统

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

推荐3款免费的数据恢复软件,从此再也不怕数据丢失

Handy Recovery Handy Recovery是一款功能强大且易于使用的数据恢复软件&#xff0c;能够帮助用户恢复因误删、病毒攻击、系统崩溃等原因丢失的数据。该软件支持多种文件系统&#xff0c;包括FAT12/16/32、NTFS、NTFS5以及HFS等。它不仅可以从硬盘、闪存驱动器、U盘等设备中恢复…

Linux学习(13)计算机网络基础概论

本节学习内容 1.网络的基本概念&#xff08;网络、互联网、IP地址、MAC地址、常用网络协议&#xff09; 2.网络分层模型&#xff08;OS的7层模型与tcp/ip协议族体系4层结构、数据链路层、网络层、传输层、应用层&#xff09; 3.网络应用程序通信流程 一、网络的基本概念 1…

python可视化-直方图

1、加载数据 import pandas as pd from sklearn.datasets import load_iris import warnings# 禁用所有警告信息 warnings.filterwarnings(ignore)# 加载数据 iris load_iris() iris iris.keys() df pd.DataFrame(iris.data, columnsiris.feature_names) df[target] iris.t…

联华证券_股票特大单买入意味什么,主力入市

“股票特大单买入”通常意味着有大量资金集中在某一时刻涌入该股票&#xff0c;这往往被视为主力资金入市的迹象。以下是这一现象的详细解读&#xff1a; 1. 主力资金入市 特大单买入: 指的是单笔大额资金买入某只股票&#xff0c;通常是由机构投资者或其他大资金操盘者进行的…

动手学深度学习(pytorch)学习记录19-参数管理[学习记录]

文章目录 参数访问目标参数一次性访问所有参数从嵌套块收集参数 参数初始化内置初始化自定义初始化 参数绑定延后初始化 本节内容&#xff1a; 访问参数&#xff0c;用于调试、诊断和可视化&#xff1b; 参数初始化&#xff1b; 在不同模型组件间共享参数&#xff1b; 延后初始…

C++必修:unordered_set与unordered_map的实现

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;C学习 贝蒂的主页&#xff1a;Betty’s blog 1. unordered_set与unordered_map的结构 我们知道STL中的unordered_set与unorder…

PowerDesigner生成数据库表结构

PowerDesigner生成数据库表结构 目录 1. 安装32位JDK 2. 更改当前DBMS 3. 下载MySQL驱动 4. 生成数据库表结构 安装32位JDK PowerDesigner只支持32位JDK 更改当前DBMS 下载MySQL驱动 下载地址&#xff1a; MySQL :: Begin Your Download 生成数据库表结构 选择Dire…

同城外卖系统开发方案解析

外卖系统开发是一个复杂而细致的过程&#xff0c;涉及多个方面的考虑和技术实现。以下是对外卖系统开发的详细解析&#xff1a; 一、需求分析 在开发外卖系统之前&#xff0c;首先需要进行详尽的需求分析。这包括用户需求、商家需求和后台管理需求三个方面&#xff1a; 用户需…