作为系统管理员在Linux系统承受繁重工作负载时,检查和监控Linux系统状态非常重要,常常会采取微调系统上活动、监视操作系统内核接口、测试Linux硬件观察压力下性能表现、测量系统上不同耗电负载等。本文分享两种Linux中压力测试工具stress和stress-ng。
Stress和stress-ng是评估和测试Linux系统在各种条件下性能的重要工具。Stress是一款简单且功能强大的工具可以对Linux系统采取可配置CPU、内存、I/O或磁盘压力。利用模拟繁重工作负载,让管理者可以查看系统在强压力下的响应表现。stress-ng和stress都对Linux系统有重大意义,可以让管理者更好的去优化系统配置、识别潜在问题提高整体系统可靠性。
stress-ng属于stress的扩展版本,提供了更多压力测试如针对进程间通信、套接字和各种文件操作等额外测试。建议使用root身份使用这些工具。
Linux中安装stress:
sudo apt install stress [在Debian、Ubuntu 和 Mint上]
sudo yum install stress [在RHEL/CentOS/Fedora和Rocky/AlmaLinux上]
sudo emerge -a sys-apps/stress [在Gentoo Linux上]
sudo apk add stress [在Alpine Linux上]
sudo pacman -S stress [在Arch Linux上]
sudo zypper install stress [在OpenSUSE上]
sudo pkg install stress [在 FreeBSD 上]
使用方法:
sudo stress option argument
要生成按不同功能旋转的工作线程,可以使用以下选项:
使用 cpu N 生成按 sqrt() 功能旋转的 CPU 工作线程。
使用 io N 生成按 sync() 功能旋转的 I/O 工作线程。
使用 vm N 生成按 malloc()/free() 功能旋转的内存工作线程。
使用 vm-bytes N 为每个内存工作线程分配指定大小的内存。
使用 vm-keep 选项重新污染内存,而不是释放并重新分配内存资源。
使用 vm-hang N 设置工作线程在释放内存前的睡眠时间(秒)。
使用 hdd N 生成按 write()/unlink() 功能旋转的磁盘工作线程。
使用 timeout N 设置超时时间(秒)。
使用backoff N 设置工作开始前的等待时间(微秒)。
使用v 选项在运行压力测试时显示更详细的信息。
如需了解更多帮助,可使用help 或查看手册页。
方便每次运行压力测试时都可以检查效果可以运行uptime命令并记录下平均负载。运行stress命令生成8个工作进程,超时sqrt()时间为20秒。运行stress后,再次运行uptime命令并比较平均负载。
uptime
sudo stress --cpu 8 --timeout 20
uptime
生成8个工作进程并超时30秒,显示出相关操作详细信息:
uptime
sudo stress --cpu 8 -v --timeout 30s
uptime
生成一个工作程序具有malloc和free功能,超时时间为60s:
uptime
sudo stress --vm 1 --timeout 60s
uptime
为了在系统中生成 4 个基于 sqrt() 的 CPU 工作进程、2 个基于 sync() 的 I/O 工作进程、2 个基于 malloc()/free() 的内存工作进程,超时时间为 20 秒,并为每个内存工作进程分配 256MB 内存,可以运行以下命令:
uptime
sudo stress --cpu 4 --io 3 --vm 2 --vm-bytes 256M --timeout 20s
uptime
Linux中stress-ng的安装方法:
sudo apt install stress-ng [在Debian、Ubuntu 和 Mint 上]
sudo yum install stress-ng [在RHEL/CentOS/Fedora和Rocky/AlmaLinux 上]
sudo emerge -a sys-apps/stress-ng [在Gentoo Linux上]
sudo apk add stress-ng [在Alpine Linux上]
sudo pacman -S stress-ng [在Arch Linux 上]
sudo zypper install stress-ng [在OpenSUSE 上]
sudo pkg install stress-ng [在 FreeBSD 上]
使用语法:
sudo stress-ng option argument
运行 8 个 CPU 压力测试器,超时时间为 60 秒,并在操作结束时进行总结。
uptime
sudo stress-ng --cpu 8 --timeout 60 --metrics-brief
uptime