目录
一、理论
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是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,如下所示:
(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测试 |
(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.
[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
压满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命令查看系统状况
新增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
测试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)
新增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
新增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
[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
[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
③ 如网卡地址无误,仍获取镜像失败,采用应急办法
点击设置
进入网络适配器
选择桥接模式
,并选择复制网物理网络连接状态
,改变网络模式,进行临时应急。
(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为后缀的目标文件。
CentOS 7 包含2个压力测试工具,一个是标准的stress,另一个是其升级版stress-ng。
stress-ng兼容stress, 支持产生各种复杂的压力。
预处理、编译、连接、汇编。