系統管理員的一個常見問題:「如何在這台機器上快速產生虛擬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中文網其他相關文章!