构建一个资源控制面板:模拟 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,你可以:
- 模拟负载:使用 Flask 控制面板来模拟系统负载。调整 CPU 和内存负载后,查看 Cockpit 中的资源利用率变化。
- 监控系统状态:在 Cockpit 中实时监控系统的性能数据,确保系统在负载下的表现符合预期。
总结
本文介绍了如何使用 Flask 和 stress-ng
工具创建一个简单的 Web 控制面板,并且使用Cockpit
进行监控,用于模拟 CPU 和内存负载。我们还详细说明了 Python 的安装步骤、stress-ng
工具的作用,以及如何安装和使用 Cockpit 进行系统监控。结合这两种工具,你可以更加全面地测试和监控系统的性能。