stress 使用

最近都在做服务器的调试,服务器组装后经常会做压力测试,测试一些基本功能是否正常。有用到stress,它是Linux 系统中一个轻量、简单的压力测试工具,可以对 CPU、内存、IO、磁盘等资源进行负载测试。本文介绍 stress 的基本用法。

安装

stress 是一款经典的系统压力测试工具,能够模拟多种系统资源的负载情况。

1
2
3
4
5
6
# Debian/Ubuntu 系列
sudo apt install stress -y

# CentOS / RHEL 系列
sudo yum install stress -y

参数说明

输入 stress --helphelp 命令可以查看参数说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
$ stress --help
`stress' imposes certain types of compute stress on your system

Usage: stress [OPTION [ARG]] ...
-?, --help show this help statement
--version show version statement
-v, --verbose be verbose
-q, --quiet be quiet
-n, --dry-run show what would have been done
-t, --timeout N timeout after N seconds
--backoff N wait factor of N microseconds before work starts
-c, --cpu N spawn N workers spinning on sqrt()
-i, --io N spawn N workers spinning on sync()
-m, --vm N spawn N workers spinning on malloc()/free()
--vm-bytes B malloc B bytes per vm worker (default is 256MB)
--vm-stride B touch a byte every B bytes (default is 4096)
--vm-hang N sleep N secs before free (default none, 0 is inf)
--vm-keep redirty memory instead of freeing and reallocating
-d, --hdd N spawn N workers spinning on write()/unlink()
--hdd-bytes B write B bytes per hdd worker (default is 1GB)

Example: stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --timeout 10s

Note: Numbers may be suffixed with s,m,h,d,y (time) or B,K,M,G (size).

常用参数参考:

参数 含义 示例
--cpu N 启动 N 个 CPU 压力测试进程 --cpu 4
--io N 启动 N 个 I/O 压力测试进程 --io 2
--vm N 启动 N 个内存分配进程 --vm 2
--vm-bytes X 每个内存进程分配 X 字节内存 --vm-bytes 512M
--timeout T 运行时间 T 秒后自动结束 --timeout 60s
--hdd N 启动 N 个写磁盘文件的进程 --hdd 2
--hdd-bytes X 每个进程写入 X 字节数据 --hdd-bytes 1G

使用测试

  • 压力测试
    启动 4 个 CPU 负载进程,持续运行 1 分钟。

    1
    2
    stress --cpu 4 --timeout 60

    可以配合top命令查看CPU利用率,此时也可以观察功率计,查看运行功耗。

  • 磁盘测试

磁盘内存测试主要通过反复分配和释放大块内存来验证系统内存管理能力。

1
2
3
4
# 分配 2GB 内存测试 120 秒
stress --vm 2 --vm-bytes 1G --timeout 120
# 持续分配并释放内存
stress --vm 1 --vm-bytes 512M --vm-hang 0

可以通过watch -n 1 free -h 命令查看内存使用情况。执行后会看到used会有明显上升。

写入测试 2GB 数据

1
2
3
# 每个进程写入 1GB 数据,共 2GB
stress --hdd 2 --hdd-bytes 1G --timeout 60

通过iostat -x 1 命令查看磁盘 IO 使用情况。

  • IO 测试
    I/O 压力测试通过频繁的文件读写操作验证磁盘与文件系统性能。

    1
    2
    3
    # 启动 2 个 I/O 压力测试进程,持续运行 60 秒
    stress --io 2 --timeout 60

    通过vmstat 1 命令查看系统整体状态。
    比如:

    1
    2
    3
    4
    5
    procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
    r b swpd free buff cache si so bi bo in cs us sy id wa st
    0 0 8960 797148 500772 6453372 0 0 13 16 12 18 2 1 97 0 0
    0 0 8960 792256 500772 6458072 0 0 0 0 2705 5017 1 0 99 0 0

    字段 含义
    r 运行队列中进程数
    b 阻塞进程数
    swpd 已使用 swap 空间(KB)
    free 空闲物理内存(KB)
    bi / bo 块设备读/写(KB/s)
    us 用户态 CPU 使用率
    sy 内核态 CPU 使用率
    id CPU 空闲率
    st 被虚拟机偷走的 CPU 时间
  • stress可以直接组合测试
    结合上面的参数,比如:

    1
    stress --cpu 2 --io 2 --vm 2 --vm-bytes 512M --timeout 120

如果测试有更多需求,可以安装stress-ng

使用参考
配合监控工具参考

注意

无非必要,压力测试不宜太长,也多注意以下几点:
1、监控温度:长时间 CPU 压测可能导致过热,以免损坏硬件。
2、合理设置 timeout,避免测试进程无法自动停止。 Linux下用“ctrl+c”可结束进程。
3、避免在正式环境使用该命令。