系统管理员的一个常见问题:“如何在这台机器上快速生成虚拟 CPU 负载?” 如果一个或多个核心的简单 100% CPU 负载就足够了,那么构建自定义解决方案就会非常容易。
单核解决方案(One-Liner)
这一行 C 代码经过编译和运行后,将使一个核心的利用率达到 100%:
<code class="language-c">int main() {while (1) {}}</code>
使用 gcc -o stressme stressme.c
(或 Windows 上的 cl stressme.c
)编译并使用 ./stressme
(或 stressme.exe
)运行。 要对多个核心施加压力,只需运行该程序的多个实例即可。
多核解决方案(多线程)
要进行更受控的多核压力测试,请考虑使用 4 个 POSIX 线程的多线程版本:
<code class="language-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], NULL, loop, NULL); } for (int i = 0; i < NUM_THREADS; i++) { pthread_join(threads[i], NULL); } return 0; }</code>
使用gcc -o multistress multistress.c -pthread
编译。
如何运作
核心功能是一个简单的无限循环(while (1) {}
)。 在汇编级别,这会转化为连续的 jmp
指令,从而最大限度地提高 CPU 使用率。 现代抢占式多任务操作系统允许此循环消耗处理器时间,而不会导致系统完全无响应;该进程仍然可以终止。 相比之下,较旧的协作多任务系统可能会由于这样的循环而冻结。
<code class="language-assembly">global _start _start: jmp _start</code>
以上是如何计算 CPU 百分比的详细内容。更多信息请关注PHP中文网其他相关文章!