Linux机器压测脚本

工作中我们可能会遇到需要模拟高并发的情况,就是我们说的压测,以下通过一些shell脚本用于模拟 OOM(内存耗尽)、CPU 高负载、网络高吞吐 和 磁盘高 IO 压力。

工具依赖安装

确保系统中已安装必要工具:

1
2
3
4
5
6
# Debian/Ubuntu
sudo apt-get install stress iperf3

# CentOS/RHEL
sudo yum install epel-release
sudo yum install stress iperf3

模拟内存耗尽(OOM)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/bash
# 文件名:stress_oom.sh
# 作用:持续分配内存直到触发 OOM

# 设置内存分配块大小(单位:MB,默认 100MB)
MEM_BLOCK_SIZE=100

echo "[+] 开始内存压力测试,按 Ctrl+C 终止..."
while true; do
# 分配内存并追加到数组中
echo "分配内存块: ${MEM_BLOCK_SIZE}MB"
stress --vm 1 --vm-bytes ${MEM_BLOCK_SIZE}M --vm-keep &
sleep 1
done

使用方式:

1
2
chmod +x stress_oom.sh
./stress_oom.sh

终止条件:系统触发 OOM Killer 或手动终止。

模拟 CPU 高负载

1
2
3
4
5
6
7
8
9
#!/bin/bash
# 文件名:stress_cpu.sh
# 作用:让所有 CPU 核心满载

# 设置压测时间(单位:秒,默认 600 秒)
DURATION=600

echo "[+] 开始 CPU 压力测试,持续 ${DURATION} 秒..."
stress --cpu $(nproc) --timeout ${DURATION}

使用方式:

1
2
chmod +x stress_cpu.sh
./stress_cpu.sh

说明:使用 stress 工具压满所有 CPU 核心。

模拟网络高吞吐

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/bash
# 文件名:stress_network.sh
# 作用:生成网络流量(需安装 iperf3)

# 参数配置
DURATION=300 # 测试时间(秒)
SERVER_IP="192.168.1.100" # 替换为目标服务器 IP

echo "[+] 启动 iperf3 服务端(在目标机器执行):"
echo " iperf3 -s"

echo "[+] 开始网络压力测试,目标 IP: ${SERVER_IP}..."
iperf3 -c ${SERVER_IP} -t ${DURATION} -P 10 # 10 个并行连接

使用方式:

在目标机器启动服务端:

1
iperf3 -s

在压测机器运行:

1
2
chmod +x stress_network.sh
./stress_network.sh

模拟磁盘高 IO

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/bash
# 文件名:stress_disk.sh
# 作用:生成磁盘读写压力

# 参数配置
DURATION=300 # 测试时间(秒)
IO_THREADS=4 # 并发 IO 线程数
FILE_SIZE="10G" # 单个测试文件大小

echo "[+] 开始磁盘压力测试,持续 ${DURATION} 秒..."
stress --io ${IO_THREADS} --timeout ${DURATION} &
# 同时使用 dd 写入大文件
dd if=/dev/urandom of=/tmp/stress_disk.tmp bs=1M count=10240 oflag=direct &
sleep ${DURATION}
killall stress dd # 结束后清理
rm -f /tmp/stress_disk.tmp

使用方式:

1
2
chmod +x stress_disk.sh
./stress_disk.sh

注意事项

风险提示

  • OOM 测试可能导致系统崩溃或进程被杀死。
  • 磁盘测试可能损坏硬件,避免在无冗余的硬盘上执行。
  • 网络测试需确保目标 IP 可达且有足够带宽。

监控资源:

1
2
3
4
5
# 实时监控工具

htop # CPU/内存
iotop # 磁盘 IO
iftop # 网络流量

终止测试:

  • 按 Ctrl+C 终止脚本,或使用 killall stress dd iperf3。
Thank you for your accept. mua!
-------------本文结束感谢您的阅读-------------