lookbusy – 用于 Linux 系统的负载达标工具
简介
在 Linux 系统的使用场景中,有时我们需要让系统看起来处于高负载状态,或者模拟一定的负载环境进行测试等工作。因此 lookbusy 的工具就能派上大用场。它可以虚拟产生系统 CPU、内存、磁盘等负载,营造出系统繁忙的假象,比如一些性能指标考核,dddd。
安装方法
官方地址:lookbusy — a synthetic load generator
lookbusy
的代码仓库位于https://github.com/flow2000/lookbusy
,获取并安装它有多种方式:
- 通过Git克隆安装
- 命令:
git clone https://github.com/flow2000/lookbusy
- 下载压缩包安装
- 直接下载:
wget https://github.com/flow2000/lookbusy/archive/refs/heads/master.zip
-
通过代理下载(如果需要):
wget https://ghproxy.com/https://github.com/flow2000/lookbusy/archive/refs/heads/master.zip
-
解压:
unzip master.zip
编译安装
cd lookbusy
chmod a+x configure
./configure
make && make install
CPU使用
-
-c
:指定每个CPU的期望利用率,以百分比为单位,默认值为50%。如果选择curve
(曲线)CPU使用模式,则需要给出MIN - MAX
形式的范围。 -
-n
:确定保持忙碌的CPU数量,默认值是自动检测出的全部核心数。 -
-r
:有两种模式可供选择。
fixed
模式:试图保持指定百分比的CPU利用率。curve
模式:产生的利用率水平会在给定间隔内上下浮动。
-
-p
:在曲线模式下,此选项用于设置峰值利用率的偏移量,默认单位是秒,也可以添加m
(分钟)、h
(小时)、d
(天)作为其他单位。 -
-P
:与-p
类似,也是用于设置曲线内峰值利用率的偏移量,可添加m
、h
、d
作为其他单位。
示例
lookbusy -c 50
:占用所有CPU核心各50%。lookbusy -c 50 -n 2
:占用两个CPU核心各50%。lookbusy -c 50 - 80 -r curve
:占用所有CPU核心在50% – 80%左右浮动。
内存使用
-m
:以字节为单位指定内存量,后面可跟KB
、MB
或GB
(等其他单位)。-M
:设置单位为毫秒,默认值为1000。
示例
lookbusy -m 128MB -M 1000
:每1000毫秒循环释放并分配128MB内存。
磁盘使用
-d
:用于指定磁盘流失的文件大小,以字节为单位,后面可跟KB
、MB
、GB
或TB
(等其他单位)。-b
:用于I/O的块大小,以字节为单位,后面可跟KB
、MB
或GB
。-D
:设置迭代之间的休眠时间,以毫秒为单位,默认值为100。-f
:指定要用作缓冲区的文件/目录的路径,默认为/tmp
。
示例
lookbusy -d 1GB -b 1MB -D 10
:每10毫秒循环进行1MB磁盘写入,临时文件不超过1GB。
所有参数
-h –help 帮助
-v –verbose 输出详细信息
-q –quiet 安静运行,只有在错误时输出信息
-c –cpu-utuil=PCT, –cpu-util=RANGE 需要的 CPU 利用率,默认用百分比描述,比如 50%,范围描述需要按 最小值 - 最大值 的格式给定范围
-n –ncpus=NUM 保持忙的 CPU 数量,默认自动检测
-r –cpu-mode=MODE 利用模式:fixed 或 curve,具体见 lookbusy(1)
-p –cpu-curve-peak=TIME 曲线内峰值利用率的偏移量,默认单位是秒,可以添加 m、h、d 作为其他单位
-P –cpu-curve-period=TIME 利用率曲线期持续时间,默认单位是秒,可以添加 m、h、d 作为其他单位
-m –mem-util=SIZE 使用内存的数量,默认单位字节,可以用 KB、MB、GB 表示其他单位,具体见 lookbusy(1)
-M –mem-sleep=TIME 每次迭代之间的 sleep 时间,单位是毫秒,默认值为 1000
-d –disk-util=SIZE 使用磁盘的文件尺寸大小,默认是字节,可以跟 KB、MB、GB、TB 来表示其他单位
-D –disk-sleep=TIME 两次迭代之间的 sleep 时间,单位是毫秒,默认值为 1000
-f –disk-path=PATH 使用的缓存文件/目录的路径,默认为/tmp;可以多次指定(specify multiple times for additional paths)
完整脚本例子
#!/bin/bash
# chmod +x /usr/local/bin/lookbusy_start.sh && echo "/usr/local/bin/lookbusy_start.sh" >> /etc/rc.d/rc.local && cat /etc/rc.d/rc.local && cat /etc/rc.local
# 设置 VCPU 平均利用率 ≥ 8%,内存平均利用率 ≥ 10%
# nohup /usr/local/bin/lookbusy -c 8-15 -r curve -m $(($(free -m | awk '/Mem:/ {print $2}') * 10 / 100))MB > /dev/null 2>&1 &
# 获取当前内存利用率
mem_usage=$(free | awk '/Mem:/ {printf "%.0f", $3*100/$2 }')
# 获取系统总内存(单位:MB)
total_memory=$(free -m | awk '/Mem:/ {print $2}')
# 计算 10% 的总内存(单位:MB)-->暂时不能临界,因此设置大于11%
target_mem=$((total_memory * 11 / 100))
# 获取当前已使用内存(单位:MB)
used_mem=$(free -m | awk '/Mem:/ {print $3}')
# 暂时不能临界,因此设置大于11%
if [ $mem_usage -lt 11 ]; then
if [ $used_mem -lt $target_mem ]; then
# 已使用内存小于目标内存,计算差值
mem_to_use=$((target_mem - used_mem))
nohup /usr/local/bin/lookbusy -c 8-15 -r curve -m ${mem_to_use}MB > /dev/null 2>&1 &
else
# 已使用内存已经达到或超过目标内存,不额外使用内存
nohup /usr/local/bin/lookbusy -c 8-15 -r curve > /dev/null 2>&1 &
fi
else
# 内存利用率大于等于 10% 时的操作
nohup /usr/local/bin/lookbusy -c 8-15 -r curve > /dev/null 2>&1 &
fi
UI这么时髦 突然有点不习惯
话说,前段时间让你买恒科ETF买了吗