Linux系统:stress-ng测压工具

目录

一、理论

1.stress工具简介与安装

 2.语法及参数

3.具体安装

二、实验

1.运行8 cpu, 4 fork, 5 hdd, 4 io, 50 vm, 10小时

2.CPU测试

 3.内存测试

 4.IO测试

          5.磁盘及I/O测试

三、问题

1.  -bash: ./configure: 没有那个文件或目录

2.  下载yum源报错:未知的名称或服务解决方法

3.  linux 为什么要安装gcc和gcc-c++(又叫做g++)

四、总结

1.stress分类

2.GCC功能与作用


一、理论

1.stress工具简介与安装

(1)概念

stress是Linux系统下的系统压力测试工具,可以测试Linux系统的CPU、内存、磁盘I/O等的负载。
当stress测试CPU时,会不断调用进程,计算随机数的平方根;当测试内存时,会不断调用内存调用malloc和内存释放free函数;当测试磁盘I/O时,会不断调用sync()中断,以测试磁盘I/O。

CentOS 7 的EPEL源包含2个压力测试工具,一个是标准的stress,另一个是其升级版stress-ng。

stress-ng是stress的升级版,用于Linux压力测试,带源码。stress-ng兼容stress, 支持产生各种复杂的压力。

(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,如下所示:

Linux系统:stress-ng测压工具_第1张图片

 2.语法及参数

(1)语法

stress [OPTION]
stress-ng [OPTION [ARG]]

(2)stress参数

表1 stress参数

参数 功能
-?,–help 显示帮助信息
–version 显示版本信息
-v,–verbose 运行时显示详细的信息
-q,–quiet 运行时不显示运行信息
-n,–dry-run 显示以完成的指令情况
-t,–timeout 指定程序运行结束的时间,单位为秒
–backoff 指定程序开始运行的时间,单位为微妙
-c,–cpu

后面跟一个整数,表示测试CPU的进程数

-c 2 :表示生成2个worker循环调用sqrt()产生cpu压力

-i,–io

后面跟一个整数,表示测试磁盘I/O的进程数

 -i 1 :表示生成1个worker循环调用sync()产生io压力

-m,–vm

后面跟一个整数,表示测试内存的进程数

-m 1 :表示生成1个worker循环调用malloc()/free()产生内存压力

–vm-bytes 指定在内存测试时malloc的字节数,默认256M
–vm-stride 指定每B个字节移动一个字节
–vm-hang 指定free栈的秒数
–vm-keep 向内存空间内不断写入,而不是释放和重新分配
-d,–hdd 产生执行write和unlink函数的进程数
–hdd-bytes 指定写的字节数

(3)stress-ng参数

stress-ng参数有几百项,可以模拟复杂的压力测试,但是兼容stress的参数。 主要使用参数:

表1 stress-ng参数

参数 功能
-c N 运行N worker CPU压力测试进程
--cpu-method all worker从迭代使用30多种不同的压力算法,包括pi, crc16, fft等等
-tastset N 将压力加到指定核心上
-d N 运行N worker HDD write/unlink测试
-i N 运行N worker IO测试

3.具体安装

(1)在线安装

yum install -y epel-release && yum install -y stress 

(2)离线安装

① 上传stress包

登录要安装的服务器,将stress-ng-0.15.08.tar.gz上传到服务器,解压安装

此处以实际工作环境为例,首先登录服务器控制节点(由于网络环境限制无法直接与被测服务器传送文件,也无法实现在线安装,故以此作为跳板登录到被测服务器实现文件互传),首先控制节点服务器上创建并切换到新建目录,将stress-ng-0.15.08.tar.gz包传入新建目录中,然后通过scp命令将stress-ng-0.15.08.tar.gz包传入需要测试的服务器中

[root@localhost opt]# scp stress-ng-0.15.08.tar.gz [email protected]:/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.
[email protected]'s password: 
stress-ng-0.15.08.tar.gz                                  100% 3750KB  22.7MB/s   00:00

输入服务器登录密码,文件上传成功

[root@localhost opt]# ssh [email protected]
[email protected]'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 验证是否已安装gcc,若未安装请先安装gcc

yum -y install  gcc
[root@localhost ~]# gcc -v
使用内建 specs。
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/4.8.5/lto-wrapper
目标: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.

二、实验

1.运行8 cpu, 4 fork, 5 hdd, 4 io, 50 vm, 10小时

[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个cpu,执行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)

使用另一个终端工具登录被测服务器,使用top命令查看系统状况

Linux系统:stress-ng测压工具_第2张图片

 3.内存测试

新增4个内存分配进程,每次分配大小730M,分配后不释放,长期保持测试 / 测试60秒
长期保持测试,需Ctrl+Z手动停止
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

Linux系统:stress-ng测压工具_第3张图片
测试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)

Linux系统:stress-ng测压工具_第4张图片

 4.IO测试

新增6个I/O进程,测试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)

执行期间先用命令top查看系统状况,再结合使用iostat/vmstat命令,若服务器联网则执行命令yum install systat安装,若无法联网请手动安装

[root@localhost ~]# yum install systat

Linux系统:stress-ng测压工具_第5张图片

5.磁盘及I/O测试

新增6个I/O进程,1个写进程,每次写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)

 执行期间使用top命令和free -h查看系统及内存状况

[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

Linux系统:stress-ng测压工具_第6张图片

三、问题

1.  -bash: ./configure: 没有那个文件或目录

[root@localhost stress-ng-0.15.08]# ./configure --prefix=/usr/local/stress
-bash: ./configure: 没有那个文件或目录

(1)原因分析:有的软件包并不是用makefile的,或者makefile已经写好,不用config了,因此不提供configure。

 (2) 解决方法:

可以看文件夹里是否有 makefile文件。

若有,可以直接使用make编译,make   install安装;

如果没有,看是否有setup、install等sh文件或其它可执行文件;

还有一种情况,这个软件解压即可运行。

make && make install  

2.  下载yum源报错:未知的名称或服务解决方法

[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
正在解析主机 mirrors.aliyun.com (mirrors.aliyun.com)... 失败:未知的名称或服务。
wget: 无法解析主机地址 “mirrors.aliyun.com”

  (1) 原因分析

      ① 缺失DNS地址;

[root@localhost yum.repos.d]# vim /etc/resolv.conf

     nameserver 223.5.5.5 和 nameserver 223.6.6.6选择其中一个添加即可

nameserver 8.8.8.8 
nameserver 8.8.4.4
nameserver 223.5.5.5
nameserver 223.6.6.6

   ② 若未解决,查看网络配置网卡配置错误。

[root@localhost yum.repos.d]# vim /etc/sysconfig/network-scripts/ifcfg-ens33

网关错误,37应修改为204 

Linux系统:stress-ng测压工具_第7张图片

③ 如网卡地址无误,仍获取镜像失败,采用应急办法

点击设置

Linux系统:stress-ng测压工具_第8张图片

进入网络适配器

 

 选择桥接模式,并选择复制网物理网络连接状态,改变网络模式,进行临时应急。

 Linux系统:stress-ng测压工具_第9张图片

3.  linux 为什么要安装gcc和gcc-c++(又叫做g++)

(1)概念

gcc-c++(又叫做g++)是为gcc提供c++语言特性支持的
linux上的gcc是Gnu的C语言编译器,至于C++编译器,它的名字叫做g++。

linux中的gcc是由GNU推出的一款功能强大的、性能优越的多平台编译器。gcc编译器能将C、C++语言源程序和目标程序编译、连接成可执行文件。

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++编译环境的,需要手动安装,最简单的是用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)规则

在Linux系统中,可执行文件没有统一的后缀,系统从文件的属性来区分可执行文件和不可执行文件。而gcc则通过后缀来区别输入文件的类别,下面是gcc所遵循的部分约定规则:

表3 gcc所遵循的部分约定规则

后缀文件 功能
.c C语言源代码文件
.a 由目标文件构成的库文件
.C,.cc或.cxx C++源代码文件
.h 程序所包含的头文件
.i 已经预处理过的C源代码文件
.m Objective-C源代码文件
.o 编译后的目标文件
.s 汇编语言源代码文件
.S 经过预编译的汇编语言源代码文件

GCC(GNU Compiler Collection,GNU编译器套件),是由 GNU 开发的编程语言编译器。它是以GPL许可证所发行的自由软件,也是 GNU计划的关键部分。

GCC原本作为GNU操作系统的官方编译器,现已被大多数类Unix操作系统(如Linux、BSD、Mac OS X等)采纳为标准的编译器,GCC同样适用于微软的Windows。GCC是自由软件过程发展中的著名例子,由自由软件基金会以GPL协议发布。

(3)GCC功能与作用:

① 预处理

命令gcc首先调用cpp进行预处理,在预处理过程中,对源代码文件中的文件包含(include)、预编译语句(如宏定义define等)进行分析。

② 编译

用GCC编译C/C++代码时,它会试着用最少的时间完成编译并且编译后的代码易于调试。易于调试意味着编译后的代码与源代码有同样的执行顺序,编译后的代码没有经过优化。

③ 连接

当所有的目标文件都生成之后,gcc就调用ld来完成最后的关键性工作,这个阶段就是连接。在连接阶段,所有的目标文件被安排在可执行程序中的恰当的位置,同时,该程序所调用到的库函数也从各自所在的档案库中连到合适的地方。

 ④ 汇编

汇编过程是针对汇编语言的步骤,调用as进行工作,一般来讲,.S为后缀的汇编语言源代码文件和汇编、.s为后缀的汇编语言文件经过预编译和汇编之后都生成以.o为后缀的目标文件。

四、总结

1.stress分类

CentOS 7 包含2个压力测试工具,一个是标准的stress,另一个是其升级版stress-ng。

stress-ng兼容stress, 支持产生各种复杂的压力。

2.GCC功能与作用

预处理、编译、连接、汇编。

你可能感兴趣的:(linux,运维,服务器)