Linux系統(tǒng)之stress-ng測壓工具的使用
一、理論
1.stress工具簡介與安裝
(1)概念
stress是Linux系統(tǒng)下的系統(tǒng)壓力測試工具,可以測試Linux系統(tǒng)的CPU、內(nèi)存、磁盤I/O等的負(fù)載。
當(dāng)stress測試CPU時(shí),會不斷調(diào)用進(jìn)程,計(jì)算隨機(jī)數(shù)的平方根;當(dāng)測試內(nèi)存時(shí),會不斷調(diào)用內(nèi)存調(diào)用malloc和內(nèi)存釋放free函數(shù);當(dāng)測試磁盤I/O時(shí),會不斷調(diào)用sync()中斷,以測試磁盤I/O。
CentOS 7 的EPEL源包含2個(gè)壓力測試工具,一個(gè)是標(biāo)準(zhǔn)的stress,另一個(gè)是其升級版stress-ng。
stress-ng是stress的升級版,用于Linux壓力測試,帶源碼。stress-ng兼容stress, 支持產(chǎn)生各種復(fù)雜的壓力。
(2)安裝
stress的安裝有兩種方式,YUM方式和源碼安裝方式。
①采用YUM方式
yum install -y epel-release.noarch && yum -y update yum install -y stress stress-ng
②采用源碼安裝方式
下載頁面為:The Fossies Software Archive - linux/privat,如下所示:


2.語法及參數(shù)
(1)語法
stress [OPTION]
stress-ng [OPTION [ARG]]
(2)stress參數(shù)
表1 stress參數(shù)
| 參數(shù) | 功能 |
| -?,–help | 顯示幫助信息 |
| –version | 顯示版本信息 |
| -v,–verbose | 運(yùn)行時(shí)顯示詳細(xì)的信息 |
| -q,–quiet | 運(yùn)行時(shí)不顯示運(yùn)行信息 |
| -n,–dry-run | 顯示以完成的指令情況 |
| -t,–timeout | 指定程序運(yùn)行結(jié)束的時(shí)間,單位為秒 |
| –backoff | 指定程序開始運(yùn)行的時(shí)間,單位為微妙 |
| -c,–cpu | 后面跟一個(gè)整數(shù),表示測試CPU的進(jìn)程數(shù) -c 2 :表示生成2個(gè)worker循環(huán)調(diào)用sqrt()產(chǎn)生cpu壓力 |
| -i,–io | 后面跟一個(gè)整數(shù),表示測試磁盤I/O的進(jìn)程數(shù) -i 1 :表示生成1個(gè)worker循環(huán)調(diào)用sync()產(chǎn)生io壓力 |
| -m,–vm | 后面跟一個(gè)整數(shù),表示測試內(nèi)存的進(jìn)程數(shù) -m 1 :表示生成1個(gè)worker循環(huán)調(diào)用malloc()/free()產(chǎn)生內(nèi)存壓力 |
| –vm-bytes | 指定在內(nèi)存測試時(shí)malloc的字節(jié)數(shù),默認(rèn)256M |
| –vm-stride | 指定每B個(gè)字節(jié)移動(dòng)一個(gè)字節(jié) |
| –vm-hang | 指定free棧的秒數(shù) |
| –vm-keep | 向內(nèi)存空間內(nèi)不斷寫入,而不是釋放和重新分配 |
| -d,–hdd | 產(chǎn)生執(zhí)行write和unlink函數(shù)的進(jìn)程數(shù) |
| –hdd-bytes | 指定寫的字節(jié)數(shù) |
(3)stress-ng參數(shù)
stress-ng參數(shù)有幾百項(xiàng),可以模擬復(fù)雜的壓力測試,但是兼容stress的參數(shù)。 主要使用參數(shù):
表1 stress-ng參數(shù)
| 參數(shù) | 功能 |
| -c N | 運(yùn)行N worker CPU壓力測試進(jìn)程 |
| --cpu-method all | worker從迭代使用30多種不同的壓力算法,包括pi, crc16, fft等等 |
| -tastset N | 將壓力加到指定核心上 |
| -d N | 運(yùn)行N worker HDD write/unlink測試 |
| -i N | 運(yùn)行N worker IO測試 |
3.具體安裝
(1)在線安裝
yum install -y epel-release && yum install -y stress
(2)離線安裝
① 上傳stress包
登錄要安裝的服務(wù)器,將stress-ng-0.15.08.tar.gz上傳到服務(wù)器,解壓安裝
此處以實(shí)際工作環(huán)境為例,首先登錄服務(wù)器控制節(jié)點(diǎn)(由于網(wǎng)絡(luò)環(huán)境限制無法直接與被測服務(wù)器傳送文件,也無法實(shí)現(xiàn)在線安裝,故以此作為跳板登錄到被測服務(wù)器實(shí)現(xiàn)文件互傳),首先控制節(jié)點(diǎn)服務(wù)器上創(chuàng)建并切換到新建目錄,將stress-ng-0.15.08.tar.gz包傳入新建目錄中,然后通過scp命令將stress-ng-0.15.08.tar.gz包傳入需要測試的服務(wù)器中
[root@localhost opt]# scp stress-ng-0.15.08.tar.gz root@192.168.204.200:/opt/ The authenticity of host '192.168.204.200 (192.168.204.200)' can't be established. ECDSA key fingerprint is SHA256:98OlrQFN15A/f8247mqaSl4bNm+Gd36VEWfNis2unG4. ECDSA key fingerprint is MD5:96:5a:85:bd:1a:91:0b:3e:94:fe:32:d1:d9:27:1c:ac. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.204.200' (ECDSA) to the list of known hosts. root@192.168.204.200's password: stress-ng-0.15.08.tar.gz 100% 3750KB 22.7MB/s 00:00
輸入服務(wù)器登錄密碼,文件上傳成功
[root@localhost opt]# ssh root@192.168.204.200 root@192.168.204.200's password: Last login: Wed Jun 14 21:58:37 2023 from 192.168.204.1 [root@localhost ~]# ls /opt stress-ng-0.15.08.tar.gz
輸入gcc -v 驗(yàn)證是否已安裝gcc,若未安裝請先安裝gcc
yum -y install gcc
[root@localhost ~]# gcc -v 使用內(nèi)建 specs。 COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/4.8.5/lto-wrapper 目標(biāo):x86_64-redhat-linux 配置為:../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-languages=c,c++,objc,obj-c++,java,fortran,ada,go,lto --enable-plugin --enable-initfini-array --disable-libgcj --with-isl=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/isl-install --with-cloog=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/cloog-install --enable-gnu-indirect-function --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux 線程模型:posix gcc 版本 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC)
② 編譯安裝stress
make && make install
③ 安裝完成后,可以使用stress-ng -V查看版本。
[root@localhost stress-ng-0.15.08]# stress-ng -V stress-ng, version 0.15.08 (gcc 4.8.5, x86_64 Linux 3.10.0-693.el7.x86_64)
④ 使用stress-ng -h查看使用方法。
[root@localhost stress-ng-0.15.08]# stress-ng -h stress-ng, version 0.15.08 (gcc 4.8.5, x86_64 Linux 3.10.0-693.el7.x86_64) ???? Usage: stress-ng [OPTION [ARG]] ……
最后退出連接
[root@localhost /]# exit 登出 Connection to 192.168.204.200 closed.
二、實(shí)驗(yàn)
1.運(yùn)行8 cpu, 4 fork, 5 hdd, 4 io, 50 vm, 10小時(shí)
[root@localhost stress-ng-0.15.08]# stress-ng --cpu 8 --cpu-method all --io 4 --vm 50 -d 5 --fork 4 --timeout 36000s stress-ng: info: [11482] setting to a 36000 second (10 hours, 0.00 secs) run per stressor stress-ng: info: [11482] dispatching hogs: 8 cpu, 4 io, 50 vm, 5 hdd, 4 fork stress-ng: info: [11491] io: this is a legacy I/O sync stressor, consider using iomix instead
crtl+c 退出,uptime查看CPU占用率
^Cstress-ng: info: [11482] passed: 71: cpu (8) io (4) vm (50) hdd (5) fork (4) stress-ng: info: [11482] failed: 0 stress-ng: info: [11482] skipped: 0 stress-ng: info: [11482] successful run completed in 170.46s (2 mins, 50.46 secs) [root@localhost stress-ng-0.15.08]# uptime 23:36:51 up 1:39, 2 users, load average: 52.83, 29.27, 11.66
2.CPU測試
壓滿6個(gè)cpu,執(zhí)行100秒(--timeout可以直接用--t)
stress-ng --cpu 6 --timeout 100
[root@localhost opt]# stress-ng --cpu 6 --timeout 100 stress-ng: info: [15948] setting to a 100 second (1 min, 40.00 secs) run per stressor stress-ng: info: [15948] dispatching hogs: 6 cpu stress-ng: info: [15948] passed: 6: cpu (6) stress-ng: info: [15948] failed: 0 stress-ng: info: [15948] skipped: 0 stress-ng: info: [15948] successful run completed in 100.01s (1 min, 40.01 secs)
使用另一個(gè)終端工具登錄被測服務(wù)器,使用top命令查看系統(tǒng)狀況

3.內(nèi)存測試
新增4個(gè)內(nèi)存分配進(jìn)程,每次分配大小730M,分配后不釋放,長期保持測試 / 測試60秒
長期保持測試,需Ctrl+Z手動(dòng)停止
stress-ng --vm 4 --vm-bytes 730M --vm-keep
[root@localhost opt]# stress-ng --vm 4 --vm-bytes 730M --vm-keep stress-ng: info: [16294] defaulting to a 86400 second (1 day, 0.00 secs) run per stressor stress-ng: info: [16294] dispatching hogs: 4 vm ^Z [1]+ 已停止 stress-ng --vm 4 --vm-bytes 730M --vm-keep

測試60秒
stress-ng --vm 4 --vm-bytes 730M --timeout 60
[root@localhost opt]# stress-ng --vm 4 --vm-bytes 730M --timeout 60 stress-ng: info: [16437] setting to a 60 second run per stressor stress-ng: info: [16437] dispatching hogs: 4 vm stress-ng: info: [16437] passed: 4: vm (4) stress-ng: info: [16437] failed: 0 stress-ng: info: [16437] skipped: 0 stress-ng: info: [16437] successful run completed in 60.52s (1 min, 0.52 secs)

4.IO測試
新增6個(gè)I/O進(jìn)程,測試100秒。
stress-ng --io 6 -t 100
[root@localhost opt]# stress-ng --io 6 -t 100 stress-ng: info: [16713] setting to a 100 second (1 min, 40.00 secs) run per stressor stress-ng: info: [16713] dispatching hogs: 6 io stress-ng: info: [16715] io: this is a legacy I/O sync stressor, consider using iomix instead stress-ng: info: [16713] passed: 6: io (6) stress-ng: info: [16713] failed: 0 stress-ng: info: [16713] skipped: 0 stress-ng: info: [16713] successful run completed in 100.01s (1 min, 40.01 secs)
執(zhí)行期間先用命令top查看系統(tǒng)狀況,再結(jié)合使用iostat/vmstat命令,若服務(wù)器聯(lián)網(wǎng)則執(zhí)行命令yum install systat安裝,若無法聯(lián)網(wǎng)請手動(dòng)安裝
[root@localhost ~]# yum install systat

5.磁盤及I/O測試
新增6個(gè)I/O進(jìn)程,1個(gè)寫進(jìn)程,每次寫1000M文件塊,測試100秒
stress-ng --io 6 -d 1 --hdd-bytes 1000M -t 100
[root@localhost opt]# stress-ng --io 6 -d 1 --hdd-bytes 1000M -t 100 stress-ng: info: [16895] setting to a 100 second (1 min, 40.00 secs) run per stressor stress-ng: info: [16895] dispatching hogs: 6 io, 1 hdd stress-ng: info: [16896] io: this is a legacy I/O sync stressor, consider using iomix instead stress-ng: info: [16895] passed: 7: io (6) hdd (1) stress-ng: info: [16895] failed: 0 stress-ng: info: [16895] skipped: 0 stress-ng: info: [16895] successful run completed in 100.15s (1 min, 40.15 secs)
執(zhí)行期間使用top命令和free -h查看系統(tǒng)及內(nèi)存狀況
[root@localhost ~]# free -h
total used free shared buff/cache available
Mem: 1.8G 837M 68M 1.8M 916M 781M
Swap: 4.0G 209M 3.8G
三、問題
1. -bash: ./configure: 沒有那個(gè)文件或目錄
[root@localhost stress-ng-0.15.08]# ./configure --prefix=/usr/local/stress -bash: ./configure: 沒有那個(gè)文件或目錄
(1)原因分析:有的軟件包并不是用makefile的,或者makefile已經(jīng)寫好,不用config了,因此不提供configure。
(2) 解決方法:
- 可以看文件夾里是否有 makefile文件。
- 若有,可以直接使用make編譯,make install安裝;
- 如果沒有,看是否有setup、install等sh文件或其它可執(zhí)行文件;
- 還有一種情況,這個(gè)軟件解壓即可運(yùn)行。

make && make install
2. 下載yum源報(bào)錯(cuò):未知的名稱或服務(wù)解決方法
[root@localhost yum.repos.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo --2023-06-14 22:24:35-- http://mirrors.aliyun.com/repo/Centos-7.repo 正在解析主機(jī) mirrors.aliyun.com (mirrors.aliyun.com)... 失?。何粗拿Q或服務(wù)。 wget: 無法解析主機(jī)地址 “mirrors.aliyun.com”
(1) 原因分析
① 缺失DNS地址;
[root@localhost yum.repos.d]# vim /etc/resolv.conf
nameserver 223.5.5.5 和 nameserver 223.6.6.6選擇其中一個(gè)添加即可
nameserver 8.8.8.8 nameserver 8.8.4.4 nameserver 223.5.5.5 nameserver 223.6.6.6
② 若未解決,查看網(wǎng)絡(luò)配置網(wǎng)卡配置錯(cuò)誤。
[root@localhost yum.repos.d]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
網(wǎng)關(guān)錯(cuò)誤,37應(yīng)修改為204

③ 如網(wǎng)卡地址無誤,仍獲取鏡像失敗,采用應(yīng)急辦法
點(diǎn)擊設(shè)置

進(jìn)入網(wǎng)絡(luò)適配器

選擇橋接模式,并選擇復(fù)制網(wǎng)物理網(wǎng)絡(luò)連接狀態(tài),改變網(wǎng)絡(luò)模式,進(jìn)行臨時(shí)應(yīng)急。

3. linux 為什么要安裝gcc和gcc-c++(又叫做g++)
(1)概念
- gcc-c++(又叫做g++)是為gcc提供c++語言特性支持的
- linux上的gcc是Gnu的C語言編譯器,至于C++編譯器,它的名字叫做g++。
- linux中的gcc是由GNU推出的一款功能強(qiáng)大的、性能優(yōu)越的多平臺編譯器。gcc編譯器能將C、C++語言源程序和目標(biāo)程序編譯、連接成可執(zhí)行文件。
- GCC:GNU Compiler Collection(GUN 編譯器集合),它可以編譯C、C++、JAV、Fortran、Pascal、Object-C等語言。
- gcc是GCC中的GUN C Compiler(C 編譯器)
- g++是GCC中的GUN C++ Compiler(C++編譯器)
以CentOS為例,安裝后是沒有C語言和C++編譯環(huán)境的,需要手動(dòng)安裝,最簡單的是用yum的方式安裝,過程如下:
① 安裝gcc
yum install gcc
詢問是否,按y鍵回車即可,或者
yum -y install gcc
不用確定全部就安裝好了。
② 安裝g++
yum install gcc-c++
或者
yum -y install gcc-c++
安裝完畢。
只在CenOS 7下測試正常,(g++就是c++的使用)。
(2)規(guī)則
在Linux系統(tǒng)中,可執(zhí)行文件沒有統(tǒng)一的后綴,系統(tǒng)從文件的屬性來區(qū)分可執(zhí)行文件和不可執(zhí)行文件。而gcc則通過后綴來區(qū)別輸入文件的類別,下面是gcc所遵循的部分約定規(guī)則:
表3 gcc所遵循的部分約定規(guī)則
| 后綴文件 | 功能 |
| .c | C語言源代碼文件 |
| .a | 由目標(biāo)文件構(gòu)成的庫文件 |
| .C,.cc或.cxx | C++源代碼文件 |
| .h | 程序所包含的頭文件 |
| .i | 已經(jīng)預(yù)處理過的C源代碼文件 |
| .m | Objective-C源代碼文件 |
| .o | 編譯后的目標(biāo)文件 |
| .s | 匯編語言源代碼文件 |
| .S | 經(jīng)過預(yù)編譯的匯編語言源代碼文件 |
GCC(GNU Compiler Collection,GNU編譯器套件),是由 GNU 開發(fā)的編程語言編譯器。它是以GPL許可證所發(fā)行的自由軟件,也是 GNU計(jì)劃的關(guān)鍵部分。
GCC原本作為GNU操作系統(tǒng)的官方編譯器,現(xiàn)已被大多數(shù)類Unix操作系統(tǒng)(如Linux、BSD、Mac OS X等)采納為標(biāo)準(zhǔn)的編譯器,GCC同樣適用于微軟的Windows。GCC是自由軟件過程發(fā)展中的著名例子,由自由軟件基金會以GPL協(xié)議發(fā)布。
(3)GCC功能與作用:
① 預(yù)處理
命令gcc首先調(diào)用cpp進(jìn)行預(yù)處理,在預(yù)處理過程中,對源代碼文件中的文件包含(include)、預(yù)編譯語句(如宏定義define等)進(jìn)行分析。
② 編譯
用GCC編譯C/C++代碼時(shí),它會試著用最少的時(shí)間完成編譯并且編譯后的代碼易于調(diào)試。易于調(diào)試意味著編譯后的代碼與源代碼有同樣的執(zhí)行順序,編譯后的代碼沒有經(jīng)過優(yōu)化。
③ 連接
當(dāng)所有的目標(biāo)文件都生成之后,gcc就調(diào)用ld來完成最后的關(guān)鍵性工作,這個(gè)階段就是連接。在連接階段,所有的目標(biāo)文件被安排在可執(zhí)行程序中的恰當(dāng)?shù)奈恢?,同時(shí),該程序所調(diào)用到的庫函數(shù)也從各自所在的檔案庫中連到合適的地方。
④ 匯編
匯編過程是針對匯編語言的步驟,調(diào)用as進(jìn)行工作,一般來講,.S為后綴的匯編語言源代碼文件和匯編、.s為后綴的匯編語言文件經(jīng)過預(yù)編譯和匯編之后都生成以.o為后綴的目標(biāo)文件。
總結(jié)
1.stress分類
CentOS 7 包含2個(gè)壓力測試工具,一個(gè)是標(biāo)準(zhǔn)的stress,另一個(gè)是其升級版stress-ng。
stress-ng兼容stress, 支持產(chǎn)生各種復(fù)雜的壓力。
2.GCC功能與作用
預(yù)處理、編譯、連接、匯編。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Apache服務(wù)器主配置文件httpd.conf詳解
這篇文章主要介紹了Apache服務(wù)器主配置文件httpd.conf詳解,需要的朋友可以參考下2014-09-09
Linux實(shí)現(xiàn)將磁盤分區(qū)掛載到文件目錄
這篇文章主要介紹了Linux實(shí)現(xiàn)將磁盤分區(qū)掛載到文件目錄方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12
windows10 更新Ubuntu20.04 LTS的方法步驟
這篇文章主要介紹了windows10 更新Ubuntu20.04 LTS的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
移植新內(nèi)核到Linux系統(tǒng)上的操作步驟
今天小編就為大家分享一篇關(guān)于移植新內(nèi)核到Linux系統(tǒng)上的操作步驟,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-12-12
Linxu下性能指標(biāo)采集工具之nmon工具的使用
Linux下查看CPU信息一般采用top命令來實(shí)時(shí)觀察,但是這種對于只是通過觀察數(shù)據(jù)的變化來評估cpu的實(shí)時(shí)情況顯然不太科學(xué)。如果想要通過圖標(biāo)的形式來表現(xiàn)則需要借助一些外部工具,今天就來講解一下nmon工具的使用2023-04-04

