type
status
date
slug
summary
tags
category
icon
password
一、安装Stress工具
首先,你需要安装Stress工具。对于大多数Linux发行版,你可以通过包管理器来安装。以Ubuntu为例,你可以使用以下命令来安装Stress:
如果你的系统没有预装的Stress包,你也可以从源码编译安装。首先,你需要下载Stress的源码包,然后解压并编译安装。虽然这个过程稍微复杂一些,但它可以让你获得最新的Stress版本,并且可以根据你的系统环境进行定制。
二、使用Stress命令
安装好Stress工具后,你就可以开始使用它了。Stress命令的基本语法是:
其中,
options
是各种可选参数,用于指定Stress命令的行为;jobs
是你要模拟的负载类型,比如CPU、内存、磁盘IO等。Stress命令支持多种类型的负载模拟,下面是一些常用的负载类型和对应的参数:- CPU负载模拟:
stress --cpu 4
:模拟4个CPU的满负荷运行。
- 内存负载模拟:
stress --vm 1 --vm-bytes 128M
:分配128MB的内存,并进行读写操作。
- 磁盘IO负载模拟:
stress --io 4
:模拟4个磁盘的读写操作。
- Swap可用性测试:
stress --vm-swap 1
:模拟交换分区的使用。
这只是Stress命令的一些基本用法,它还有许多其他的参数和选项,可以满足更复杂的压力测试需求。你可以通过
man stress
命令查看Stress命令的完整文档,了解更多的使用方法和选项。二、基本语法
三、安装 stress
Ubuntu 系统默认没有安装 stress,需要通过下面的命令安装:
$ sudo apt install stress
$ stress --version
四、消耗 CPU 资源
stress 消耗 CPU 资源的方式是通过调用 sqrt 函数计算由 rand 函数产生的随机数的平方根实现的。下面的命令会产生 4 个这样的进程不断的进行计算:
$ stress -c 4
使用 top 命令查看 CPU 的状态如下(CPU 在用户态满负荷运转):
五、消耗内存资源
下面的命令产生两个子进程,每个进程分配 300M 内存:
$ stress --vm 2 --vm-bytes 300M --vm-keep
父进程处于睡眠状态,两个子进程负责资源消耗。
- -vm-keep
一直占用内存,区别于不断的释放和重新分配(默认是不断释放并重新分配内存)。
- -vm-hang N
指示每个消耗内存的进程在分配到内存后转入睡眠状态 N 秒,然后释放内存,一直重复执行这个过程。
- -vm-keep 和 --vm-hang 都可以用来模拟只有少量内存的机器,但是指定它们时 CPU 的使用情况是不一样的。
$ stress --vm 2 --vm-bytes 500M --vm-keep
一直在进行默认的 stride 操作,user 非常高(cpu 在用户态忙碌)。
$ stress --vm 2 --vm-bytes 500M --vm-hang 5
上面这两种状态不断切换,但整体上看 CPU 的负载并不高。
- -vm-stride B
不断的给部分内存赋值,让 COW(Copy On Write)发生。只要指定了内存相关的选项,这个操作就会执行,只是大小为默认的 4096。赋值内存的比例由参数决定:
for (i = 0; i < bytes; i += stride)
ptr[i] = 'Z'; /* Ensure that COW happens. */
bytes 为消耗的总内存大小,stride 为间隔。
该参数会影响 CPU 状态 us 和 sy:
$ stress --vm 2 --vm-bytes 500M
--vm-stride 64
$ stress --vm 2 --vm-bytes 500M
--vm-stride 1M
为什么会产生这样的结果?原因是单独的赋值和对比操作可以让 CPU 在用户态的负载占到 99% 以上。--vm-stride 值增大就意味着减少赋值和对比操作,这样就增加了内存的释放和分配次数(cpu在内核空间的负载)。
不指定 --vm-stride 选项就使用默认值是 4096,CPU 负载情况居于前两者之间:
$ stress --vm 2 --vm-bytes 500M
六、消耗 IO 资源
下面的命令产生 4 个进程,每个进程都反复调用 sync 函数将内存上的内容写到硬盘上:
$ stress -i 4
使用 top 命令查看 CPU 的状态如下:
sy 升高,wa(iowait) 非常高。
七、压测磁盘及 IO
下面的命令创建一个进程不断的在磁盘上创建 10M 大小的文件并写入内容:
$ stress -d 1 --hdd-bytes 10M
使用 top 命令查看 CPU 的状态如下(此时的 CPU 主要消耗在内核态):
下面是 iostat 2 的输出(同样是高 iowait,瓶颈是写磁盘):
八、其它选项介绍
- -verbose
显示 stress 程序运行过程中的详细信息:
- -timeout N
在 N 秒后结束程序。
- -quiet
stress 程序运行的过程中不输出信息。
- n, --dry-run
输出程序会做什么而并不实际执行相关的操作:
- -backoff N
让新 fork 出来的进程 sleep N 微秒再开始运行。
除了单独指定某一类的选项,还可以同时执行多个类型的任务,比如产生 3 个 CPU 进程、3 个 IO 进程、2 个10M 的 vm 进程,并且每个 vm 进程中不循环分配释放内存:
$ stress --cpu 3 --io 3 --vm 2 --vm-bytes 10M --vm-keep
九、总结
对于学习 Linux 性能检测相关的命令来说,stress 命令是个得力的助手。通过模拟各种高负载情况,可以帮助我们更好的理解系统瓶颈并掌握性能检测工具的用法。
九、linux下服务器性能监控
1、top监控整体使用情况
各参数涵义如下:
load average:当前系统负载的平均值,后面的3个值分别为1分钟、5分钟、15分钟前进程的平均数。一般认为这个数超过CPU数目时,CPU将比较吃力地负载当前系统所包含的进程。
表示CPU的几个参数:
us:用户空间占用CPU百分比
sy:内核空间占用CPU百分比
ni:用户进程空间内改变过优先级的进程占用CPU百分比
id:空闲CPU百分比
wa:等待输入输出的cpu时间百分比
输入top后,按大写P,以CPU占用大小排序,按M,以内存占用大小排序
从应用程序的角度来看,可用内存=系统free memory+buffers+cached,其中buffers/cached是为了提高文件读取的性能,当应用程序要用到内存的时候,buffer/cached会很快地被回收
2、服务器I/O读写负载评估
先用top查看,wa的值标识I/O等待所占用的CPU时间的百分比,高于30%时I/O压力高。
再用iostat –x 1 10查看,如果没有该文件,要yum install systat 安装。查看%util,%idle,如果%util接近100%,说明产生的I/O请求太多,I/0系统已经满负荷,该磁盘可能存在瓶颈,%idle小于70%,I/0压力就比较大了,一般读取速度有较多的等待。
同时结合vmstat -1命令,查看b参数,表示等待资源的进程数,如等待I/O,内存等,如常时间>1,则要关注。可评估i/o读写负载。
3、其他系统日常管理
- 查看系统的cpu数:cat /proc/cpu info
- 监控系统状态,查看具体是哪里的压力:vmstat
proc列显示进程相关信息
r表示运行和等待CPU时间片的进程数,如长期>服务器CPU个数,说明CPU不够用了
swap表示内存交换情况
- 查看内存使用情况:free,如free -h
- 查看系统进程:ps aux
- 打印网络连接状况:netstat –an
- 打印当前系统启动哪些端口:netstat –lnp
- 查看磁盘的使用情况和文件系统被挂载的位置:df –lh
三、实践应用
了解了Stress命令的基本用法后,我们就可以开始实践应用了。比如,你可以使用Stress命令来测试你的服务器在高负载下的性能表现,或者用来模拟用户行为,测试你的应用的稳定性和性能。下面是一个简单的例子:
假设你有一个Web应用,你想测试它在高并发下的性能表现。你可以使用Stress命令来模拟多个用户同时访问你的应用。你可以通过
--cpu
和--vm
选项来模拟CPU和内存负载,通过--io
选项来模拟磁盘IO负载,甚至可以结合其他的压力测试工具,如Apache Benchmark (ab) 或 JMeter,来模拟HTTP请求。四、总结
Linux Stress命令是一个功能强大的压力测试工具,通过模拟各种系统负载,它可以帮助我们测试系统的性能和稳定性。了解如何使用Stress命令,并结合实际的场景进行应用,将对我们的工作带来极大的帮助。希望本文能够帮助你更好地理解和使用Linux Stress命令。
- 作者:胡凯
- 链接:https://hukai.fun/article/135bc662-9f1f-803c-abf6-d51ef2712ac9
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。