- 安裝方法
? Ubuntu/Debian:
sudo apt update && sudo apt install stress-ng -y
? CentOS/RHEL(需EPEL源):
sudo yum install epel-release -ysudo yum install stress-ng -y
? 源碼編譯(適合定制化需求):
wget https://fossies.org/linux/privat/stress-ng-最新版本.tar.gztar -xzf stress-ng-*.tar.gzcd stress-ng-*make && sudo make install#驗證安裝:stress-ng --version
- 核心功能與命令
CPU壓力測試,模擬服務器cpu使用率100%
? 基礎命令(滿載所有CPU):
# $(nproc)指的是服務器核數,如有8個核,就寫8,全部占滿
stress-ng --cpu $(nproc) --timeout 60s
? 控制負載百分比(如70%利用率):
stress-ng --cpu 4 --cpu-load 70 --timeout 2m
? 指定算法(如矩陣乘法、FFT):
stress-ng --cpu 4 --cpu-method matrixprod --timeout 600s # 矩陣運算stress-ng --cpu 4 --cpu-method fft --timeout 2m # 快速傅里葉變換
通過top或htop監控CPU占用。
內存壓力測試
? 動態分配內存(默認反復分配/釋放):
stress-ng --vm 4 --vm-bytes 1G --timeout 100sstress-ng --vm 4 --vm-bytes 1G --timeout 100s --vm-hang 100s
timeout和vm-hang參數說明:
?1. --timeout(全局超時)???作用范圍?:控制整個壓力測試進程的運行時長。
?行為?:
指定測試的總持續時間(例如 100s 表示 100 秒)。
時間到達后,?所有壓力測試子進程(包括 CPU、內存、I/O 等)均會強制終止,測試結束。?示例?:
--timeout 100s 表示整個測試會在 100 秒后自動停止。?2. --vm-hang(內存測試局部掛起)???作用范圍?:僅針對內存壓力測試子進程?(由 --vm 創建的進程)。
?行為?:內存子進程在每次分配內存(malloc)后,會掛起(睡眠)指定時長?(例如 100s),期間不釋放內存。
掛起結束后,釋放內存并重新開始分配-掛起循環,直到全局 --timeout 觸發終止。?目的?:模擬內存被長期占用的場景(如內存泄漏或緩存駐留),而非頻繁分配/釋放。
? 持續占用內存(避免釋放):
stress-ng --vm 2 --vm-bytes 2G --vm-keep --timeout 5m
? 內存加壓后休眠(低CPU占用):
stress-ng --vm 4 --vm-bytes 512M --vm-hang 30 --timeout 2m
使用free -h或vmstat監控內存使用。
磁盤I/O測試
? 同步I/O壓力(頻繁調用sync):
stress-ng --io 4 --timeout 60s
? 文件讀寫壓力(創建/刪除大文件):
stress-ng --hdd 3 --hdd-bytes 20G --timeout 180s # 寫入20GB文件
# 也可以使用dd命令,創建名為test*.txt的文件,如test1.txt,創建50個,每個文件20G,共1000G
dd if=/dev/zero of=test%s.txt count=50 bs=20G
監控工具:iostat或iotop。
? 混合負載測試
stress-ng --cpu 4 --io 2 --vm 1 --vm-bytes 1G --timeout 300s
同時加壓CPU、I/O和內存,模擬復雜場景。
- 高級參數與場景
? 超時控制:
–timeout支持單位(s/m/h),如–timeout 1h30m。
? 性能指標輸出:
–metrics-brief輸出測試摘要(如bogo操作次數):
stress-ng --cpu 4 --timeout 60s --metrics-brief
? 自定義測試時長:
通過–vm-ops或–cpu-ops按操作次數結束測試:
stress-ng --hdd 5 --hdd-ops 100000 # 完成10萬次操作后停止
? 低負載模擬(開發調試):
stress-ng --cpu 2 --cpu-load 30 --timeout 10m # 30%低負載
-
使用注意事項
-
避免生產環境直接使用:
壓力測試可能導致系統崩潰或數據丟失,建議在虛擬機或測試環境中操作。 -
資源分配建議:
? 內存測試時,分配量不超過總內存的80%(避免OOM Kill)。? 磁盤測試預留足夠空間(如–hdd-bytes值需小于磁盤剩余容量)。
-
監控關鍵指標:
? CPU/內存:top、htop、free。? 磁盤I/O:iostat -dx 1。
? 溫度:sensors(防止過熱)。
-
性能影響分析:
? CPU加壓對應用延遲影響顯著(如8核滿載時小模型延遲增加5倍)。? 內存加壓對延遲影響較小,但高占用時仍會降低整體性能。
-
典型應用場景
? 服務器穩定性驗證:
混合負載測試72小時,觀察內核錯誤或硬件故障。
? 資源競爭模擬:
在部署新服務前,模擬高負載下現有服務的性能表現。
? 開發板壓力測試:
ARM平臺交叉編譯后驗證硬件可靠性(如自動駕駛芯片)。
? 散熱能力測試:
結合cpuburn工具最大化CPU發熱,檢測散熱系統。
?? 重要提示:測試結束后,用killall stress-ng或pkill stress-ng確保進程完全退出,避免殘留負載。
更多參數詳見手冊:man stress-ng 或 https://github.com/ColinIanKing/stress-ng。