当前位置: 首页 > article >正文

8.3负载生成工具

8.3 负载生成工具实时性测试不仅要满足系统空载或低负载时的时延要求还必须满足高负载情况下的时延要求。通过负载生成工具模拟高负载场景进行压力测试是评估实时系统在高负载情况下的稳定性和可靠性的有效手段。压力测试是一种破坏性的测试即系统在非正常的、超负荷的条件下的运行情况 。用来评估在超越最大负载的情况下系统将如何运行是系统在正常的情况下对某种负载强度的承受能力的考验。dohell是 Xenomai 测试套件中的一项工具旨在生成高负载条件从而测试系统的响应与稳定性。dohell自身可以生成不同的负载同时支持调用外部工具hackbench和 LTP 测试套件以生成更为复杂的负载。stress工具也可以用于生成高负载但其功能更为简单更为常用。它用于生成 CPU、内存、磁盘等资源的高负载。不同的负载加压工具所生成的系统负载类型、强度及运行时间都有所不同。在进行带负载的实时性对比测试时应该使用相同的负载工具及参数以公正地评估系统的稳定性、性能及反应能力。8.3.1dohell脚本解析与功能说明dohell脚本的主要作用是在指定时间内生成多种类型的高负载以便对系统进行压力测试检验系统在高负载条件下的稳定性、性能及反应能力。这些负载包括但不限于模拟网络流量、磁盘写入操作、进程生成与调度以及中断处理等从而全面考验系统的极限能力。1. 选项说明dohell脚本提供了一系列命令行选项允许用户根据具体需求调整负载生成方式和强度。以下是dohell脚本中所支持的主要选项及其说明/usr/xenomai/bin/dohell [ -b path ] [ -s server ] [ -p port ] [ -m mntpoint ] [ -l path | seconds ] Generate load, using an assorted set of commands and optionnaly: - hackbench if the path to the hackbench binary is specified with -b; - nc to send TCP data to server port port if -s is specified (if -p is not specified, the port 9, aka discard is used); - dd to write data under mntpoint if -m is specified. during the runtime of the LTP test if the path to the LTP installation directory is specifed with -l or during seconds seconds.选项说明-b指定hackbench可执行文件的路径。hackbench是一个用于模拟多线程环境下进程调度与同步机制压力测试的工具。-s指定目标服务器的 IP 地址用于模拟向该服务器发送大量 TCP 数据流。-p指定发送 TCP 数据的端口号默认值为 9Discard 端口。-m指定一个挂载点路径用于模拟向该路径写入大量数据的操作。-l指定 LTPLinux Test Project的安装目录路径以便在系统运行 LTP 测试套件期间生成高负载。-h显示脚本的使用说明信息。如果用户未指定 LTP 安装目录-l则必须提供一个时间参数作为脚本的运行时长。例如dohell 60表示脚本将在运行 60 秒后结束负载生成并终止相关进程。2. 负载类型dohell脚本生成的高负载主要包含以下几种类型默认负载使用cat /proc/interrupts命令循环监控系统的中断处理情况。使用ps w命令循环监控系统当前运行的进程状态包括进程的详细信息。使用dd if/dev/zero of/dev/null命令模拟磁盘写入操作但目标文件为/dev/null实际上不会占用磁盘空间。使用ls -lR /命令循环递归列出文件系统的全部内容并丢弃输出结果模拟文件系统 I/O 压力。进程生成与调度使用hackbench工具生成高负载的进程调度任务。hackbench工具是 rt-tests 套件中的一部分既是 Linux 内核调度器的基准测试工具也是一种压力测试工具。可以指定启动指定数量的进程进行竞争模拟多进程环境下的调度压力。具体操作为循环运行命令$hackbench 1其传入的参数1没有实际意义。最终用默认参数运行以进程模式运行包含 10 组每组使用 40 个文件描述符 400 个任务每个发送者将传递 100 条 100 字节的消息。网络流量模拟使用nc或netcat发送大量 TCP 数据到指定的服务器和端口。通过循环读取/tmp/netcat.data文件中的数据并每 15 秒发送一次来模拟持续的网络流量。磁盘写入操作使用dd命令向指定的挂载点路径写入大量数据模拟磁盘 I/O 压力。具体操作为循环从/dev/zero设备读取数据并写入到mntpoint/bigfile文件中每次写入 100MB 数据之后执行同步操作。LTP 测试套件如果用户指定了 LTP 安装目录路径-l则调用 LTP 测试套件runalltests.sh执行 LTP 中定义的初始一系列的测试用例。包括文件系统压力测试、硬盘 I/O 测试、内存管理压力测试、IPC 压力测试、SCHED 测试、命令功能的验证测试、系统调用功能的验证测试。3. 其他设计细节系统配置调整脚本会在运行期间将/proc/sys/kernel/hung_task_timeout_secs设置为 0以禁用内核挂起任务超时检测功能从而避免在高负载情况下因检测到假阳性而产生日志干扰。进程管理脚本在生成高负载的过程中会将所有负载生成进程的 PID 保存到变量pids中。在负载生成结束后脚本会通过kill命令终止所有已记录的负载生成进程然后等待 5 秒钟最后通过killall -KILL命令强制终止所有相关进程确保测试结束后系统状态的恢复。综上所述dohell脚本作为 Xenomai 测试套件的一部分其主要功能是在指定时间内生成多种类型的高负载以便对系统进行全面的压力测试。8.3.2 调度器基准测试/压力测试工具hackbenchhackbench工具是 rt-tests 套件中的一部分既是 Linux 内核调度器的基准测试工具也是一种压力测试工具。它的主要任务是创建指定数量的可调度实体对可以是线程或传统进程这些实体对通过套接字或管道进行通信并测量每对实体相互发送和接收数据所需的时间。因此此外它在一定程度上也对进程间通信例如本地套接字、管道施加了压力。然而由于该程序不测试与设备的通信因此无法准确模拟任何特定实时RT应用程序所产生的负载。hackbench V 2.20 Usage: hackbench options -f --fdsNUM number of fds -F --fifo use SCHED_FIFO for main thread -g --groupsNUM number of groups to be used -h --help print this message -l --loopsLOOPS how many message should be send -p --pipe send data via a pipe -s --datasizeSIZE message size -T --threads use POSIX threads -P --process use fork (default)-f, --fds文件描述符数:定义每个子进程应使用的文件描述符数量。请注意实际使用的数量将是您设置值的两倍因为发送者和接收者的子进程各自都会打开指定数量的文件描述符。默认值为20。-F, --fifo:使用 SCHED_FIFO 策略来调度主线程默认不使用 SCHED_FIFO。-g, --groups组数:定义应启动的发送者和接收者组的数量默认为10。-h, --help: 显示使用说明信息。-l, --loops循环次数:设置每个发送者/接收者对发送的消息数量。默认值为100。-p, --pipe:通过管道发送数据而不是通过套接字默认使用套接字。-s, --datasize字节数:设置每条消息中发送的数据量。默认值为100。-T, --threads: 每个发送者/接收者将作为父进程的一个子线程运行使用pthread_create()创建。-P, --process: 每个发送者/接收者将作为父进程的一个子进程运行使用fork()创建。示例 1: 不带任何选项运行 hackbench 将使用默认行为即使用 fork() 并通过套接字在发送者和接收者之间传输数据。userhost: ~ $ hackbench 以进程模式运行包含 10 组每组使用 40 个文件描述符 400 个任务 每个发送者将传递 100 条 100 字节的消息 时间0.890示例 2若要在发送者和接收者之间使用管道并使用线程而非 fork()请运行userhost: ~ $ hackbench --pipe --threads (或 hackbench -p -T) 以线程模式运行包含 10 组每组使用 40 个文件描述符 400 个任务 每个发送者将传递 100 条 100 字节的消息 时间0.497示例 3设置数据大小为 512 字节每个发送者/接收者对发送 200 条消息使用 15 组每个子进程使用 25 个文件描述符以进程模式运行。userhost: ~ $ hackbench -s 512 -l 200 -g 15 -f 25 -P 以进程模式运行包含 15 组每组使用 50 个文件描述符 750 个任务 每个发送者将传递 200 条 512 字节的消息 时间4.4978.3.3 LTPLinuxTest Project测试套件LTPLinuxTest Project是SGI、IBM、OSDL和Bull合作的项目目的是为开源社区提供一个测试套件用来验证Linux系统可靠性、健壮性和稳定性。LTP测试套件是测试Linux内核和内核相关特性的工具的集合。该工具的目的是通过把测试自动化引入到Linux内核测试提高Linux的内核质量。LTP提供了验证linux系统稳定性的标准设计标准的压力场景通过对linux系统进行压力测试对系统的功能、性能进行分析并以此确定linux系统的可靠性、健壮性和稳定性。LTP 的测试用例通常分为5类系统调用System Calls、I/O系统I/O System、文件系统File System、进程竞争Process Contention和网络测试Network Testing。它们可以用来测试不同类型的 Linux 内核行为和功能比如内存管理、文件系统等。LTP 的测试方法有两个阶段: 初始测试和压力测试。第一阶段: 初始测试主要用于测试系统的可靠性包括LTP测试套件在硬件和操作系统上24小时的成功运转。第二阶段: 压力测试主要验证产品在系统高使用率时的健壮性。1. 初始测试初始测试的测试脚本是runalltests.sh或runltp(runltp默认执行的内容与runalltests相同)。在执行runltp脚本的时可以指定参数添加你需要的测试的项目在/testscripts内。初始测试是对linux系统主要项目不是全部进行测试。包括文件系统压力测试。硬盘 I/O 测试。内存管理压力测试。IPC 压力测试。SCHED 测试。命令功能的验证测试。系统调用功能的验证测试。执行命令./runalltests.sh 或者 ./runltp -p -l /tmp/resultlog.20111207 -d /tmp -o /tmp/ltpscreen.20111207 -t 24h -p人为指定日志格式,保证日志为可读格式 -l记录测试日志的文件 -d指定临时存储目录,默认为/tmp -o直接打印测试输出到/tmp/ltpscreen.20111207 -t:指定测试的持续时间 -t 60s 60 seconds -t 45m 45 minutes -t 24h 24 hours -t 2d 2 days在 dohell 脚本中可以通过指定 LTP 安装目录路径-l来执行 LTP 测试套件。其实际执行的测试脚本为runalltests.sh。2. 压力测试压力测试可以验证产品在系统高使用率时的健壮性。作为runalltests.sh的补充特别设计了一个名为ltpstress.sh的测试场景在测试系统上生成高压力负荷。ltpstress.sh 压力测试主要执行:NFS 压力测试。内存管理压力测试。文件系统压力测试。数学 (浮点) 测试。多线程压力测试。硬盘 I/O 测试。IPC (pipeio, semaphore) 测试。系统调用功能的验证测试。网络压力测试。执行命令./ltpstress.sh -d /tmp/sardata -l /tmp/ltpstress.log -I /tmp/iofile -i 5 -m 128 -t 24 -S -d datefile 指定sar或top记录文件默认是/tmp/ltpstress.data -i #in sec 指定sar或top快照时间间隔默认是10s -I iofile 记录iostat结果到isofile默认是/tmp/ltpstress.iostat -l logfile 记录测试结果到logfile默认是/tmp/ltpstress -m #(in Mb) 指定最小的内存使用 -n 不对网络进行压力测试 -S 用 sar捕捉数据 -T 利用LTP修改过的top工具捕捉数据 -t duration 指定时间的设置注意在使用ltpstress.sh脚本的之前需要对系统进行配置rsh必须配置完毕并在运行。内核支持NFS并且安装NFS软件。sar或top工具需要被安装。参考https://blog.csdn.net/weixin_41028621/article/details/107434624https://zhuanlan.zhihu.com/p/14521507992https://www.cnblogs.com/xiaomawo/p/179847978.3.4stress工具解析与功能说明stress工具是 Linux 系统中一个用于生成 CPU、内存、磁盘等资源的高负载的工具。stress-ng是stress的升级版它兼容stress的选项并提供更多的选项和能力。在嵌入式系统中stress更为常用本文主要介绍stress工具的基本使用方法。其语法格式如下stress options 常用选项 -c, --cpu N 产生 N 个进程每个进程都反复不停的计算随机数的平方根 -i, --io N 产生 N 个进程每个进程反复调用 sync() 将内存上的内容写到硬盘上 -m, --vm N 产生 N 个进程每个进程不断分配和释放内存 --vm-bytes B 指定分配内存的大小 --vm-stride B 不断的给部分内存赋值让 COW(Copy On Write)发生 --vm-hang N 指示每个消耗内存的进程在分配到内存后转入睡眠状态 N 秒然后释放内存一直重复执行这个过程 --vm-keep 一直占用内存区别于不断的释放和重新分配(默认是不断释放并重新分配内存) -d, --hadd N 产生 N 个不断执行 write 和 unlink 函数的进程(创建文件写入内容删除文件) --hadd-bytes B 指定文件大小 -t, --timeout N 在 N 秒后结束程序 --backoff N 等待N微妙后开始运行 -q, --quiet 程序在运行的过程中不输出信息 -n, --dry-run 输出程序会做什么而并不实际执行相关的操作 --version 显示版本号 -v, --verbose 显示详细的信息stress工具支持同时设置多个选项例如可以通过--cpu 4 --vm 4同时模拟CPU和内存负载。示例 1 压测CPU# 使用4个CPU进程测试60秒 stress-ng --cpu 4 --timeout 60s示例 2 压测内存# 开启2个进程分配内存每次分配1GB内存保持60秒后释放60秒后退出。 stress --vm 2 --vm-bytes 1G --vm-hang 60 --timeout 60s示例 3 压测磁盘# 产生2个进程每个进程不停的调用sync()将内存上的内容写到硬盘上测试60秒 stress --io 2 --timeout 60s示例 4 压测磁盘及CPU# 使用4个CPU进程2个I/O进程测试60秒 stress-ng --cpu 4 -i 2 --timeout 60s示例 5 压测磁盘及IO# 一个进程不断的在磁盘上创建 10M 大小的文件并写入内容 stress-ng -d 10 --hdd-bytes 100M参考https://blog.csdn.net/code_lyb/article/details/135840458

相关文章:

8.3负载生成工具

8.3 负载生成工具 实时性测试不仅要满足系统空载或低负载时的时延要求,还必须满足高负载情况下的时延要求。 通过负载生成工具模拟高负载场景进行压力测试,是评估实时系统在高负载情况下的稳定性和可靠性的有效手段。 压力测试是一种破坏性的测试&…...

vue-django flask+uniapp 小程序 特色农产品商城购物交易系统

目录技术选型与架构设计核心功能模块关键技术实现测试与部署扩展性设计项目技术支持可定制开发之功能创新亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作技术选型与架构设计 前端框架:UniApp(跨端开发&#xff…...

五相svpwm调制。 (五相永磁同步电机矢量控制,相邻四矢量,二矢量,文档说明+)

五相svpwm调制。 (五相永磁同步电机矢量控制,相邻四矢量,二矢量,文档说明)五相电机的矢量舞蹈比三相系统有趣得多。当我们把传统的三相桥臂拓展到五相时,电压矢量的分布从六边形变成了十边形,就…...

晶振激励功率和负性阻抗实测及计算方法

尽管在晶振振荡电路设计之前,我们都会从IC方案中获取晶振相关信息,如晶振封装、频率、频差、负载电容、工作电压等,但在晶振实际电路应用中,我们却会遇到一些具体问题,比如按照BOM采购晶振,在电路板上电后&…...

Kotlin的reified泛型:在运行时保留类型信息

Kotlin的reified泛型:在运行时保留类型信息 在Java的泛型系统中,类型擦除是一个广为人知的限制——泛型类型信息在编译后会被擦除,导致运行时无法直接获取类型参数的具体信息。Kotlin通过reified关键字打破了这一限制,允许开发者…...

英语基础输入提升指南

英语基础输入提升指南 目标人群:出国旅游基础对话、日常看懂基础英文(路牌、菜单、简单新闻) 核心原则:i1 理论(材料难度略高于当前水平,但可理解) 生成时间:2026-03-17&#x1f4cc…...

飞函如何把即时通讯、会议和云盘真正做成一体化协同底座

很多企业已经配置了不少“协同工具”:一个聊天软件、一个会议系统、一个网盘,再加上 OA、ERP、CRM 等业务系统。表面看功能齐全,实际落地时却经常出现同一个问题: 沟通、决策、文件和执行是分开的。 研发在群里讨论需求,会议里敲定…...

Spring的@Configuration注解:深入解析与实战指南

Spring的Configuration注解:深入解析与实战指南 在Spring框架中,Configuration注解是一个非常重要的注解,用于标记一个类为配置类。配置类用于定义和管理Spring容器中的Bean。本文将深入探讨Configuration注解的使用,帮助你更好地…...

保姆级STM32CubeMX入门攻略(CSDN博客版)

一、下载前准备:避坑清单先收好1. 拒绝第三方资源:别信“百度网盘破解版”“精简版”,不仅有病毒风险,还会缺固件包,安装后报错找不到芯片; 2. 必备环境:STM32CubeMX基于Java开发,需…...

CC工具箱使用指南:【查找面要素的狭窄部位】

一、简介 之前做过一个查找狭窄面的工具,只是针对整体面的一个判断。 但是如果一个面只是一个角存在狭窄的区域,就很难判断: 这种情况下,要这个狭窄区域找出来是很有必要的,于是就做了这个工具。 注意,这…...

3分钟搞定!OpenClaw 龙虾 + Kimi 联网搜索,小白也能上手

哈喽,大家好!我是阿星👋龙虾本身是没有搜索能力的。你可以利用tavily search skills搜索,也可以用openclaw的brave search websearch tool 进行搜索(后者是要钱的,前者可能有点时效问题)。国内新…...

【程序员转型】开发者转型成为 AI 工程师指南,大模型入门到精通,收藏这篇就足够了!

本文为开发者转型 AI 工程师提供了必备技能与职业路径的全面指南。 AI 工程师的需求前所未有地高涨,成为科技领域增长最快的职业之一。该岗位融合了传统软件开发与机器学习能力,对开发者而言既是机遇,也是现有编程技能的自然进化。你可以在此…...

Git误删急救:30秒拯救你的代码

Git误操作急救手册大纲常见误操作场景误删文件或代码未提交的本地修改被删除已提交的文件被误删误提交或提交错误内容提交了敏感信息(如密码、密钥)提交了错误文件或大文件分支操作失误误删分支(本地或远程)强制推送导致历史覆盖撤…...

大模型联网难题破解!数眼智能(DataEyes)全解析,5分钟解锁实时数据能力

ChatGPT、文心一言、Gemini等大模型落地AI项目时,普遍面临“实时信息获取难、网页数据提取杂、合规使用有风险”的困境,而过时信息、杂乱数据往往让AI应用实用性大打折扣。数眼智能(DataEyes)的核心价值,就是为大模型补…...

搞定2026年生鲜促销图,我的经验是别直接套模板

搞定2026年生鲜促销图,我的经验是别直接套模板我是生鲜电商店铺的运营,上周老板让我负责新品豇豆的推广,要求在周三下午之前做一张吸引人的线上促销海报。这是一个急活,但我自己用手机拍的几张豇豆照片,背景杂乱&#…...

语义之战:微软与帕兰提尔(Palantir)为何争夺你的企业本体(Ontology)

跳出数据湖与大模型:为何“意义层”成为智能体 AI 与业务主权的新前线一场无声的圈地运动正在上演。争夺的不是你的云预算,不是算力,而是决定自主 AI 智能体如何理解你数据含义的语义层。谁掌控了这层翻译层,谁就有权把企业决策直…...

TMC2208控制步进电机

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录系列文章目录前言一、两相四线步进电机基本介绍&#xff1f…...

vue表格vxe-table实现表头合并,分组表头自定义合并

在开发后台管理系统时,经常会遇到需要展示复杂表格的场景,其中表头合并(多级表头、不规则合并)是一项常见需求。vxe-table 是一款功能强大的 Vue 表格组件,它不仅支持树形分组表头,还提供了自定义列头合并的…...

【AI】----java的 大模型提示词 prompt ,代码输出提示规范

java的 大模型提示词 prompt ,代码规范■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■提示词■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■…...

金仓数据库在MySQL迁移中的技术观察:兼容性、性能与一体化部署实践

金仓数据库在MySQL迁移中的技术观察:兼容性、性能与一体化部署实践 在数字化转型持续深化的当下,企业对数据基础设施的稳定性、可维护性与成本效益提出了更高要求。面对传统商业数据库授权费用持续走高、技术路线受制于人、运维复杂度日益增加等现实挑战…...

使用http请求中 如何使用token添加到http请求头部

核心区别:请求头 vs 内容头这是一个非常关键的区别!让我用HTTP报文的实际样子来解释:完整的HTTP请求报文POST /mes-standard-biz/mesEquipmentStatusRecord/dataUploadForPlc HTTP/1.1 Host: mom.haier-energy.com satoken: eyJhbGciOiJIUzI1…...

南大东大共同见证丨江苏高校科研院所PPT润色·重塑·拔高

在江苏这片科教沃土上,高校与科研院所始终是创新发展的核心力量。从国家自然科学基金到科学技术奖,从重点研发计划到各类人才项目,每一次答辩都是科研成果的集中展示,更是决定项目成败的关键时刻。在这些关键时刻,一份…...

中国1km逐日全天候地表土壤水分数据集|高精度SSM

🔍 数据简介 本数据集为 《中国1千米分辨率逐日全天候地表土壤水分数据集》(V2.0),由宋沛林、张永强、赵天杰等学者研发,并发布于国家青藏高原科学数据中心。 时间覆盖 2003年1月1日 – 2023年12月31日,空…...

HarmonyOS 6实战30:命令行工具链深度解析

还在为HarmonyOS开发环境配置而烦恼?你的构建流程如何实现自动化?为什么命令行工具在CI/CD中如此重要?DevEco Studio背后的工具链到底隐藏着哪些强大功能?哈喽大家好,我是你们的老朋友爱学习的小齐哥哥。前段时间&…...

HarmonyOS 6实战29:禁止TextInput长按事件

问题现象在HarmonyOS应用开发中,许多开发者都遇到过这样一个令人头疼的问题:TextInput组件在长按时会自动选中文本,这在某些特定场景下会破坏用户体验。典型场景:聊天应用中,用户长按输入框想粘贴内容,却意…...

Java高频面试题(十四):Nginx高性能反向代理服务器解析

Nginx Nginx是什么 Nginx是一个高性能的基于HTTP的反向代理的服务器,也是基于SMTP和POP3的邮件服务器。其主要功能就类似于Tomcat,对外提供资源共享。 反向代理 是指以代理服务器来接收客户端请求,然后将请求转发给内部网络上的服务器(如多个spring boot后端服务或微服务)…...

年度计划PPT模板下载:高颜值模板,让方案更具说服力

每年岁末年初,如何清晰、有条理地呈现年度计划,并有效地传达给领导和团队,是许多职场人士面临的挑战。一份高质量的PPT不仅能帮助你梳理思路,更能提升汇报的专业度和说服力。但从零开始设计PPT耗时耗力,特别是对于缺乏…...

PHP操作redis

目录 一、安装PHP的redis扩展 1、linux下安装php的redis扩展 2、windows下安装php的redis扩展 二、PHP操作redis 1、面向过程操作redis 2、面向对象操作redis 一、安装PHP的redis扩展 1)PHP的redis扩展有2个,分别是phpredis和predis扩展&#xff…...

2026年健身房器材团购攻略:5个技巧帮你省下30%预算

随着2026年健身产业的持续深化与整合,无论是商业俱乐部、企业单位还是社区会所,在筹建或升级健身空间时,器材采购都是一项核心且复杂的决策。当前,行业在器材团购领域面临着一系列显著的技术与服务挑战,直接影响了项目…...

OpenClaw(小龙虾) 多模型深度测评:效果、费用与场景全解析

一、测评概览OpenClaw 作为支持多模型接入的 AI 客户端,目前已集成 Anthropic Claude、OpenAI GPT、Google Gemini、DeepSeek、Mistral 及本地 Ollama 等主流模型。本次测评从综合质量、中文能力、代码能力、推理能力、响应速度、费用成本六大维度进行横向对比&…...