stress,顾名思义是一款压力测试工具。你可以用它来对系统CPU,内存,以及磁盘IO生成负载。
1. 安装 stress
可以使用 stress 工具来测试 CPU 和内存。使用下面的 Dockerfile 来创建一个基于 debian 的 stress 工具镜像。
FROM debian:buster
RUN sed -i 's#http://deb.debian.org#http://mirrors.163.com#g' /etc/apt/sources.list && \
apt-get update && apt-get -y install stress
docker build -t pansf/stress .
- 使用 stress
直接运行 stress 就会列出关于 stress 的简单说明
[root@docker-1 ~]# docker run -it --rm pansf/stress stress
3. 对 CPU 进行压力测试
使用 stress -c N
会让 stress 生成 N 个工作进程进行开方运算,以此对 CPU 产生负载。
比如你的 CPU 有 2 个核,那么可以运行
[root@docker-1 stress]# docker run -it --rm pansf/stress stress -c 2
stress: info: [1] dispatching hogs: 2 cpu, 0 io, 0 vm, 0 hdd
这是查看 stress 进程信息
你会发现一共有 3 个 stress 进程,其中有 2 个进程是 7403
进程派生出来的工作进程。而且每个工作进程占用的 CPU 利用率都接近100%。
5. 对内存进行压力测试
类似的,使用 stress -m N
会让 stress 生成 N 个工作进程来占用内存。每个进程默认占用 256M 内存,但可以通过 --vm-bytes
来进行设置。 例如:
[root@docker-1 ~]# docker run -it --rm pansf/stress stress -m 3 --vm-bytes 300M
stress: info: [1] dispatching hogs: 0 cpu, 0 io, 3 vm, 0 hdd
会生成 3 个进程,每个进程占用 300M 内存
而且你会发现,虽然只是对内存进行压力测试,但实际上 CPU 也是很繁忙的,占有率也接近100%。
6. 对磁盘进行压力测试
对磁盘压力测试有两个参数:
stress -i N
会产生 N 个进程,每个进程反复调用sync()将内存上的内容写到硬盘上.
而 stress -d N
会产生 N 个进程,每个进程往当前目录中写入固定大小的临时文件,然后执行 unlink 操作删除该临时文件。 临时文件的大小默认为 1G,但可以通过 --hdd-bytes
设置临时文件的大小。比如:
[root@docker-1 ~]# df -h .
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 37G 5.2G 32G 14% /
[root@docker-1 ~]# docker run -it --rm pansf/stress stress -i 2 -d 4 --hdd-bytes 512M
stress: info: [1] dispatching hogs: 0 cpu, 2 io, 0 vm, 4 hdd
你会发现压力测试时,当前目录所在可用空间少了 2G,如下所示:
[root@docker-1 ~]# df -h .
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 37G 7.2G 30G 20% /
7. 同时对多项指标进行压力测试
stress 支持同时对多个指标进行压力测试,只需要把上面的参数组合起来就行
[root@docker-1 ~]# docker run -it --rm pansf/stress stress -c 2 -m 2 -d 1
stress: info: [1] dispatching hogs: 2 cpu, 0 io, 2 vm, 1 hdd
这个时候你再看 stress 进程
你会发现工作进程一共有 5 个,也就是说每个进程只负责一项测试。
8. 设置超时时间
通过 -t TIMEOUT
可以让 stress 只运行一段时间后自动退出。这一般在写脚本的时候会用到。
比如我想要运行上面的测试,但是 10 秒后自动退出,那么
[root@docker-1 ~]# docker run -it --rm pansf/stress stress -c 4 -m 2 -d 1 -t 10s
stress: info: [1] dispatching hogs: 2 cpu, 0 io, 2 vm, 1 hdd
# 10s 后
stress: info: [1] successful run completed in 12s