Linux 系统进行压力测试
  

暴躁的钢索 20491人觉得有帮助

{{ttag.title}}
自己动手做个循环
第一种技术是在命令行上运行一些循环,观察它们对系统的影响。这种方式可以大大增加 CPU 的负荷。使用 uptime 或类似的命令可以很容易地看到结果。

在下面的命令中,我们启动了四个无尽循环。你可以通过添加数字或使用 bash 表达式,如 {1...6} 来代替 1 2 3 4 以增加循环次数:

for i in 1 2 3 4; do while : ; do : ; done & done
在命令行上输入后,将在后台启动四个无尽循环:

$ for i in 1 2 3 4; do while : ; do : ; done & done
[1] 205012
[2] 205013
[3] 205014
[4] 205015
在这种情况下,发起了作业 1-4,作业号和进程号会相应显示出来。

要观察对平均负载的影响,请使用如下所示的命令。在本例中,uptime 命令每 30 秒运行一次:

$ while true; do uptime; sleep 30; done
如果你打算定期运行这样的测试,你可以将循环命令放入脚本 watch-it 中。

#!/bin/bash
while true
do
  uptime
  sleep 30
done
在输出中,你可以看到平均负载是如何增加的,然后在循环结束后又开始下降。

11:25:34 up 5 days, 17:27,  2 users,  load average: 0.15, 0.14, 0.08
11:26:04 up 5 days, 17:27,  2 users,  load average: 0.09, 0.12, 0.08
11:26:34 up 5 days, 17:28,  2 users,  load average: 1.42, 0.43, 0.18
11:27:04 up 5 days, 17:28,  2 users,  load average: 2.50, 0.79, 0.31
11:27:34 up 5 days, 17:29,  2 users,  load average: 3.09, 1.10, 0.43
11:28:04 up 5 days, 17:29,  2 users,  load average: 3.45, 1.38, 0.54
11:28:34 up 5 days, 17:30,  2 users,  load average: 3.67, 1.63, 0.66
11:29:04 up 5 days, 17:30,  2 users,  load average: 3.80, 1.86, 0.76
11:29:34 up 5 days, 17:31,  2 users,  load average: 3.88, 2.06, 0.87
11:30:04 up 5 days, 17:31,  2 users,  load average: 3.93, 2.25, 0.97
11:30:34 up 5 days, 17:32,  2 users,  load average: 3.64, 2.35, 1.04 <== 循环停止
11:31:04 up 5 days, 17:32,  2 users,  load average: 2.20, 2.13, 1.01      11:31:34 up 5 days, 17:33,  2 users,  load average: 1.40, 1.94, 0.98
因为所显示的负载分别代表了 1、5 和 15 分钟的平均值,所以这些值需要一段时间才能恢复到系统接近正常的状态。

要停止循环,请发出像下面这样的 kill 命令 —— 假设作业号是 1-4,就像本篇文章前面显示的那样。如果你不确定,可以使用 jobs 命令来确认作业号。

$ kill %1 %2 %3 %4
增加压力的专用工具
另一种方法是使用专门为你制造系统压力的工具。其中一种叫做 stress(压力),可以以多种方式对系统进行压力测试。stress 工具是一个工作负载生成器,提供 CPU、内存和磁盘 I/O 压力测试。

在使用 --cpu 选项时,stress 命令使用平方根函数强制 CPU 努力工作。指定的 CPU 数量越多,负载上升的速度就越快。

下面第二个脚本(watch-it-2)可以用来衡量对系统内存使用的影响。请注意,它使用 free 命令来查看加压的效果。

$ cat watch-it-2
#!/bin/bash
while true
do
  free
  sleep 30
done
发起任务并观察压力:

$ stress --cpu 2
$ ./watch-it
13:09:14 up 5 days, 19:10,  2 users,  load average: 0.00, 0.00, 0.00
13:09:44 up 5 days, 19:11,  2 users,  load average: 0.68, 0.16, 0.05
13:10:14 up 5 days, 19:11,  2 users,  load average: 1.20, 0.34, 0.12
13:10:44 up 5 days, 19:12,  2 users,  load average: 1.52, 0.50, 0.18
13:11:14 up 5 days, 19:12,  2 users,  load average: 1.71, 0.64, 0.24
13:11:44 up 5 days, 19:13,  2 users,  load average: 1.83, 0.77, 0.30
在命令行中指定的 CPU 越多,负载就增加的越快。

$ stress --cpu 4
$ ./watch-it
13:47:49 up 5 days, 19:49,  2 users,  load average: 0.00, 0.00, 0.00
13:48:19 up 5 days, 19:49,  2 users,  load average: 1.58, 0.38, 0.13
13:48:49 up 5 days, 19:50,  2 users,  load average: 2.61, 0.75, 0.26
13:49:19 up 5 days, 19:50,  2 users,  load average: 3.16, 1.06, 0.38
13:49:49 up 5 days, 19:51,  2 users,  load average: 3.49, 1.34, 0.50
13:50:19 up 5 days, 19:51,  2 users,  load average: 3.69, 1.60, 0.61
stress 命令也可以通过 --io(输入/输出)和 --vm(内存)选项增加 I/O 和内存的负载来给系统施加压力。

在接下来的这个例子中,运行这个增加内存压力的命令,然后启动 watch-it-2 脚本。

$ stress --vm 2
$ watch-it-2
              total        used        free      shared  buff/cache   available
Mem:        6087064      662160     2519164        8868     2905740     5117548
Swap:       2097148           0     2097148
              total        used        free      shared  buff/cache   available
Mem:        6087064      803464     2377832        8864     2905768     4976248
Swap:       2097148           0     2097148
              total        used        free      shared  buff/cache   available
Mem:        6087064      968512     2212772        8864     2905780     4811200
Swap:       2097148           0     2097148
stress 的另一个选项是使用 --io 选项为系统添加输入/输出活动。在这种情况下,你可以使用这样的命令:

$ stress --io 4
然后你可以使用 iotop 观察受压的 I/O。注意,运行 iotop 需要 root 权限。

之前:

$ sudo iotop -o
Total DISK READ:         0.00 B/s | Total DISK WRITE:        19.36 K/s
Current DISK READ:       0.00 B/s | Current DISK WRITE:      27.10 K/s
    TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND
269308 be/4 root        0.00 B/s    0.00 B/s  0.00 %  1.24 % [kworker~fficient]
    283 be/3 root        0.00 B/s   19.36 K/s  0.00 %  0.26 % [jbd2/sda1-8]
之后:

Total DISK READ:         0.00 B/s | Total DISK WRITE:         0.00 B/s
Current DISK READ:       0.00 B/s | Current DISK WRITE:       0.00 B/s
    TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND
270983 be/4 shs         0.00 B/s    0.00 B/s  0.00 % 51.45 % stress --io 4
270984 be/4 shs         0.00 B/s    0.00 B/s  0.00 % 51.36 % stress --io 4
270985 be/4 shs         0.00 B/s    0.00 B/s  0.00 % 50.95 % stress --io 4
270982 be/4 shs         0.00 B/s    0.00 B/s  0.00 % 50.80 % stress --io 4
269308 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.09 % [kworker~fficient]

打赏鼓励作者,期待更多好文!

打赏
1人已打赏

平凡的小网工 发表于 2022-12-1 13:02
  
我在社区摸爬滚打这么多年,所谓阅人无数,就算没有见过猪走路,也总明白猪肉是啥味道的。一看到楼主的气势,我就觉得楼主同在社区里灌水的那帮小混子有着本质的差别,你一定就是传说中的最强技术牛。
水之蓝色 发表于 2023-1-23 11:21
  
很详细,感谢分享技术干货,学习了!!!
发表新帖
热门标签
全部标签>
安全效果
【 社区to talk】
高手请过招
西北区每日一问
每日一问
新版本体验
社区新周刊
纪元平台
标准化排查
功能体验
干货满满
技术咨询
技术盲盒
产品连连看
GIF动图学习
安装部署配置
存储
每周精选
答题自测
技术笔记
VPN 对接
秒懂零信任
技术晨报
自助服务平台操作指引
POC测试案例
全能先锋系列
信服课堂视频
畅聊IT
专家问答
技术圆桌
在线直播
MVP
网络基础知识
升级
安全攻防
上网策略
测试报告
日志审计
问题分析处理
流量管理
每日一记
运维工具
云计算知识
用户认证
原创分享
解决方案
sangfor周刊
项目案例
SANGFOR资讯
专家分享
技术顾问
信服故事
SDP百科
功能咨询
终端接入
授权
设备维护
资源访问
地址转换
虚拟机
迁移
加速技术
排障笔记本
产品预警公告
玩转零信任
信服圈儿
S豆商城资讯
技术争霸赛
「智能机器人」
追光者计划
深信服技术支持平台
社区帮助指南
答题榜单公布
2023技术争霸赛专题
通用技术
卧龙计划
华北区拉练
天逸直播
以战代练
山东区技术晨报
文档捉虫活动
齐鲁TV
华北区交付直播
2024年技术争霸赛
北京区每日一练
场景专题
故障笔记
排障那些事
升级&主动服务
高频问题集锦
云化安全能力

本版达人

新手89785...

本周建议达人

YangZhe...

本周分享达人