stress 命令是 Linux 系统中一个简单但非常实用的压力测试工具。它的主要用途是模拟系统在高负载情况下的表现,通过消耗 CPU、内存、磁盘 I/O 等资源,帮助系统管理员和开发人员评估系统的稳定性、发现性能瓶颈,以及验证监控工具是否正常工作。

博主博客

如何安装 stress

在大多数 Linux 发行版中,stress 都可以通过官方的包管理器直接安装,非常方便。

  • 对于 Ubuntu/Debian 系统

    sudo apt update
    sudo apt install stress
    
  • 对于 CentOS/RHEL 系统
    CentOS 的默认软件源中可能没有 stress,需要先安装 epel-release 扩展源,然后再进行安装。

    sudo yum install epel-release
    sudo yum install stress
    

安装完成后,可以通过 stress --version 命令来验证是否安装成功。

核心参数详解

stress 命令通过不同的选项来模拟不同类型的资源压力。下面这个表格整理了最常用的几个参数:

参数 作用 典型用法示例
-c N, --cpu N 模拟CPU压力:产生 N 个进程,每个进程都不断计算随机数的平方根,从而耗尽CPU资源。 stress -c 4
-i N, --io N 模拟磁盘I/O压力:产生 N 个进程,每个进程不断调用 sync() 系统调用,将内存缓冲区内容写入磁盘,产生I/O负载。 stress -i 2
-m N, --vm N 模拟内存压力:产生 N 个进程,每个进程不断分配和释放内存。 stress -m 2
--vm-bytes B -m 配合使用:指定每个 vm 进程分配的内存大小。单位可以是 KMG stress -m 2 --vm-bytes 512M
--vm-keep -m 配合使用:让 vm 进程一直占用内存,而不是默认的重复分配-释放模式。 stress -m 2 --vm-bytes 512M --vm-keep
-d N, --hdd N 模拟磁盘及文件系统压力:产生 N 个进程,每个进程创建、写入并删除临时文件。 stress -d 2
--hdd-bytes B -d 配合使用:指定每个 hdd 进程写入的文件大小。 stress -d 2 --hdd-bytes 1G
-t N, --timeout N 指定测试时长:让压力测试在 N 秒后自动结束。如果不加此参数,stress 会一直运行直到手动终止(Ctrl+C)。 stress -c 4 -t 60
-v, --verbose 显示详细信息:输出测试过程中的详细信息。 stress -c 4 -v
-q, --quiet 静默模式:除了错误信息外,不输出任何内容。 stress -c 4 -q

常见使用场景与示例

了解了参数后,我们来看几个实际的压测场景,你可以配合 tophtopfreeiostat 等监控命令来观察系统的实时变化。

  1. CPU 满载测试
    如果你的服务器有4个CPU核心,想看看它们全部满负荷运行时系统的表现:

    stress -c 4 -t 60
    

    这个命令会产生4个CPU压力进程,持续60秒。用 top 命令可以看到CPU的 us (用户态) 使用率接近100%。

  2. 内存消耗测试
    模拟系统内存被大量占用的情况,比如消耗2GB内存(假设系统有足够内存):

    stress -m 2 --vm-bytes 1G --vm-keep -t 120
    

    这个命令会启动2个进程,每个进程固定占用1GB内存,持续120秒。--vm-keep 参数确保了内存被持续占用,而不是反复分配释放。你可以用 free -h 命令查看内存使用情况。

  3. 磁盘I/O压力测试
    模拟大量的磁盘读写操作,测试磁盘的响应能力:

    stress -i 4 -d 2 --hdd-bytes 1G -t 100
    

    这个命令综合了I/O压力和磁盘压力:-i 4 启动4个进程通过 sync() 产生I/O负载;-d 2 --hdd-bytes 1G 启动2个进程,每个进程会持续写入并删除1GB的临时文件。此时用 iostat -x 1 命令可以观察到磁盘的利用率(%util)和等待时间可能非常高。

  4. 综合压力测试
    更真实地模拟服务器在高并发下的复杂场景,可以组合多种压力:

    stress -c 4 -i 2 -m 2 --vm-bytes 512M -d 1 --hdd-bytes 2G --timeout 300s
    

    这条命令会在300秒内,同时对CPU(4个进程)、I/O(2个进程)、内存(2个进程,各512M)和磁盘(1个进程,写2G文件)施加压力,全面考验系统的稳定性。

注意事项

  • 谨慎使用:在生产环境或重要的服务器上执行 stress 命令要格外小心。高负载可能会导致系统响应缓慢甚至无响应,影响线上服务。
  • 权限问题:某些操作(如修改系统参数)可能需要 root 权限。
  • 适时终止:如果忘记设置 -t 参数,压测会一直进行。此时可以通过 killall stress 命令或在 top 中找到进程并杀死它们来手动停止。

总而言之,stress 是一个轻量级但功能强大的工具,通过模拟各种高负载场景,能帮你更好地了解系统在极限条件下的表现,是性能调优和稳定性测试的得力助手。