如何使用“Stress-ng”工具在 Linux 上施加高 CPU 负载和压力测试
作为系统管理员,您可能希望在 Linux 系统承受高负载时检查和监控其状态。这对于系统管理员和程序员来说是一种很好的方法:
- 微调系统上的活动。
- 监视操作系统内核接口。
- 测试您的Linux 硬件组件,例如 CPU、内存、磁盘设备等,以观察它们在压力下的性能。
- 测量系统上的不同耗电负载。
在本指南中,我们将介绍两个用于 Linux 系统下压力测试的重要工具, stress和stress-ng 。
1. stress — 是一种工作负载生成器工具,旨在使您的系统受到可配置的 CPU、内存、I/O 和磁盘压力测量。
2.stress -ng – 是压力工作负载生成器工具的更新版本,可测试系统的以下功能:
- CPU 计算
- 驱动压力
- I/O 同步
- 管道输入/输出
- 缓存抖动
- 血管紧张素转换酶
- 插座应力
- 进程创建和终止
- 上下文切换属性
虽然这些工具适合检查您的系统,但不应任何系统用户使用它们。
重要提示:强烈建议您以 root 用户权限使用这些工具,因为它们可以快速地对您的 Linux 机器造成压力,并避免在设计不良的硬件上出现某些系统错误。
如何在 Linux 中安装“stress”工具
要在Debian及其衍生产品(如Ubuntu和Mint)上安装压力工具,请运行以下命令。
$ sudo apt-get install stress
要在RHEL / CentOS和Fedora Linux上安装 Stress ,您需要打开 EPEL 存储库,然后键入以下 yum 命令来安装它:
# yum install stress
使用重音的一般语法是:
$ sudo stress option argument
一些您可以用来应对压力的选项。
- 要在 sqrt() 函数上生成N 个旋转的工作程序,请使用–cpu N选项,如下所示。
- 要在 sync() 函数上生成N 个旋转的工作器,请使用–io N选项,如下所示。
- 要在 malloc()/free() 函数上生成N个旋转的工作程序,请使用–vm N选项。
- 要为每个 vm worker 分配内存,请使用–vm-bytes N选项。
- 您无需释放并重新分配内存资源,而是可以使用–vm-keep选项重新弄脏内存。
- 使用–vm-hang N选项将睡眠时间设置为N秒,然后再释放内存。
- 要生成 N个在 write()/unlink() 函数上旋转的工作程序,请使用–hdd N选项。
- 您可以使用–timeout N选项设置N秒后的超时。
- 在任何工作开始之前,使用–backoff N选项设置N微秒的等待因子,如下所示。
- 要在运行压力时显示更详细的信息,请使用-v选项。
- 使用–help查看使用压力的帮助或查看手册页。
如何在 Linux 系统上使用压力?
1.为了每次运行该命令时检查其效果,首先运行uptime命令并记下平均负载。
接下来,运行stress命令,生成8个在sqrt()上旋转的工作器,超时时间为20秒。运行stress后,再次运行uptime命令并比较平均负载。
example@example ~ $ uptime example@example ~ $ sudo stress --cpu 8 --timeout 20 example@example ~ $ uptime
示例输出
example@example ~ $ uptime 17:20:00 up 7:51, 2 users, load average: 1.91, 2.16, 1.93 [<-- Watch Load Average] example@example ~ $ sudo stress --cpu 8 --timeout 20 stress: info: [17246] dispatching hogs: 8 cpu, 0 io, 0 vm, 0 hdd stress: info: [17246] successful run completed in 21s example@example ~ $ uptime 17:20:24 up 7:51, 2 users, load average: 5.14, 2.88, 2.17 [<-- Watch Load Average]
2.要生成 8 个在 sqrt() 上旋转的工作程序,超时时间为30秒,并显示有关该操作的详细信息,请运行以下命令:
example@example ~ $ uptime example@example ~ $ sudo stress --cpu 8 -v --timeout 30s example@example ~ $ uptime
示例输出
example@example ~ $ uptime 17:27:25 up 7:58, 2 users, load average: 1.40, 1.90, 1.98 [<-- Watch Load Average] example@example ~ $ sudo stress --cpu 8 -v --timeout 30s stress: info: [17353] dispatching hogs: 8 cpu, 0 io, 0 vm, 0 hdd stress: dbug: [17353] using backoff sleep of 24000us stress: dbug: [17353] setting timeout to 30s stress: dbug: [17353] --> hogcpu worker 8 [17354] forked stress: dbug: [17353] using backoff sleep of 21000us stress: dbug: [17353] setting timeout to 30s stress: dbug: [17353] --> hogcpu worker 7 [17355] forked stress: dbug: [17353] using backoff sleep of 18000us stress: dbug: [17353] setting timeout to 30s stress: dbug: [17353] --> hogcpu worker 6 [17356] forked stress: dbug: [17353] using backoff sleep of 15000us stress: dbug: [17353] setting timeout to 30s stress: dbug: [17353] --> hogcpu worker 5 [17357] forked stress: dbug: [17353] using backoff sleep of 12000us stress: dbug: [17353] setting timeout to 30s stress: dbug: [17353] --> hogcpu worker 4 [17358] forked stress: dbug: [17353] using backoff sleep of 9000us stress: dbug: [17353] setting timeout to 30s stress: dbug: [17353] --> hogcpu worker 3 [17359] forked stress: dbug: [17353] using backoff sleep of 6000us stress: dbug: [17353] setting timeout to 30s stress: dbug: [17353] --> hogcpu worker 2 [17360] forked stress: dbug: [17353] using backoff sleep of 3000us stress: dbug: [17353] setting timeout to 30s stress: dbug: [17353] --> hogcpu worker 1 [17361] forked stress: dbug: [17353] example@example ~ $ uptime 17:27:59 up 7:59, 2 users, load average: 5.41, 2.82, 2.28 [<-- Watch Load Average]
3.要创建malloc()和free()函数的一个工作线程,超时时间为60秒,请运行以下命令。
example@example ~ $ uptime example@example ~ $ sudo stress --vm 1 --timeout 60s example@example ~ $ uptime
示例输出
example@example ~ $ uptime 17:34:07 up 8:05, 2 users, load average: 1.54, 2.04, 2.11 [<-- Watch Load Average] example@example ~ $ sudo stress --vm 1 --timeout 60s stress: info: [17420] dispatching hogs: 0 cpu, 0 io, 1 vm, 0 hdd stress: info: [17420] successful run completed in 60s example@example ~ $ uptime 17:35:20 up 8:06, 2 users, load average: 2.45, 2.24, 2.17 [<-- Watch Load Average]
4.要使 4 个工作进程在 sqrt() 上旋转,2 个工作进程在 sync() 上旋转,2 个工作进程在 malloc()/free() 上旋转,超时时间为 20 秒,并为每个 vm 工作进程分配 256MB 的内存,请运行以下命令。
example@example ~ $ uptime example@example ~ $ sudo stress --cpu 4 --io 3 --vm 2 --vm-bytes 256M --timeout 20s example@example ~ $ uptime
示例输出
example@example ~ $ uptime 17:40:33 up 8:12, 2 users, load average: 1.68, 1.84, 2.02 [<-- Watch Load Average] example@example ~ $ sudo stress --cpu 4 --io 3 --vm 2 --vm-bytes 256M --timeout 20s stress: info: [17501] dispatching hogs: 4 cpu, 3 io, 2 vm, 0 hdd stress: info: [17501] successful run completed in 20s example@example ~ $ uptime 17:40:58 up 8:12, 2 users, load average: 4.63, 2.54, 2.24 [<-- Watch Load Average]