多年来,我与许多系统管理员打交道,每年至少会有人问我两回同样的问题:“我需要在这台机器上快速制造一些假的CPU负载,我该用哪个CPU压力测试软件?”
如果我们只是需要非常基础的需求(即我们只想看到一个或多个核心达到100%的CPU使用率),或许我们可以考虑自己动手。
一句简洁的话我们只需要将这一行C代码放进一个文件里,使用gcc -o stressme stressme.c
(或在Windows上用cl stressme.c
)进行编译,然后运行它,使用./stressme
(或运行stressme.exe
)。
这段代码定义了一个主函数,它包含一个无限循环,这个循环会一直运行下去,直到程序被外部因素中断。
切换到全屏模式,退出全屏
当程序运行时,我们会看到某个核心的CPU使用率达到了100%。如果有多核心,我们就可以分别在每个核心上运行该程序。
多线程技术或者我们也可以使用线程,这里有一个使用了4个POSIX线程(POSIX threads)的例子。
```c
#include <pthread.h>
#include <unistd.h>
#define NUM_THREADS 4
// 定义一个无限循环的线程函数
void *loop(void *arg) {
while (1) {}
}
// 主函数
int main() {
pthread_t threads[NUM_THREADS];
// 创建指定数量的线程
for (int i = 0; i < NUM_THREADS; i++)
pthread_create(&threads[i], 0, loop, 0);
// 暂停程序执行直到接收到一个信号
pause();
}
全屏模式 退出全屏
(构建时请加上 -pthread
标志,如下所示:gcc -o multistress multistress.c -pthread
)
我们正陷入一个无限循环。当你查看C语言一行代码的汇编代码时,你会发现CPU一直在忙着做同一件事:尽可能快地执行跳转指令(jmp
)。
global _start
_start:
jmp _start # 全局变量_start: 跳转到_start (形成无限循环)
全屏模式 切换回正常模式
如果我们使用的是旧的操作系统,采用协同多任务处理,那么这样的无限循环很可能使系统变卡。而在现代抢占式多任务处理系统中,无限循环会耗尽所有处理器时间,但仍可终止。
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦