• 首页

  • 分类&标签

  • 归档

  • 手册

  • 项目池

  • 友链

  • 关于
伯 乐 讲 堂
伯 乐 讲 堂

查看「系列思维导图」

侠客 · Mr.潘

获取中...

11
29
企业级系统环境

第 2 节 使用 stress 进行压力测试

发表于 2020-11-29 • 企业级系统环境 Docker • 被 837 人看爆

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 .
  1. 使用 stress

直接运行 stress 就会列出关于 stress 的简单说明

[root@docker-1 ~]# docker run -it --rm pansf/stress stress

image.png

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 进程信息

image.png

你会发现一共有 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 内存

image.png

而且你会发现,虽然只是对内存进行压力测试,但实际上 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 进程

image.png

你会发现工作进程一共有 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
标题:第 2 节 使用 stress 进行压力测试
作者:侠客 · Mr.潘

读后有收获可以支付宝请作者喝咖啡,读后有疑问请加在下微信(pansfy)讨论:

助力项目池
第 1 节 Docker 实践
侠客 · Mr.潘

侠客 · Mr.潘

未来的你,会感谢今天仍正在奋斗的你

Github QQ Email RSS
看爆 Top10
  • 助力项目池 3,538次看爆
  • 第 4 节 yum 版的 LAMP 环境部署 2,535次看爆
  • 你的生产力工具集成就高效人士 1,880次看爆
  • 第 5 节 yum 版的 LNMP 环境部署 1,676次看爆
  • 第 3 节 企业级系统环境之上云篇 1,387次看爆
  • 服务端的架构的演进之路 1,285次看爆
  • 第 1 节 Docker 实践 1,191次看爆
  • 镜像仓库一文打尽 982次看爆
  • Docker本地私有镜像仓库Harbor搭建及配置 980次看爆
  • 第 6 节 源码版的LAMP环境部署 945次看爆

Copyright © 2023 侠客 · Mr.潘 · 苏ICP备19067937号

Proudly published with Halo · Theme by fyang · 站点地图