Skip to content

負荷ツール

Linux の計算リソースに負荷をかけるスクリプトたちです。

CPU

CPU 使用率固定ツール

各コアに対して均等にバックグラウンドでyesコマンドを実行し、CPU 使用率を指定された割合に維持します。

#!/bin/bash

#====================================================
# CPUの使用率を指定された割合で規定時間維持するスクリプトです。
#====================================================

# パラメータ
working_time=300 # 負荷時間[秒]
load_ratio=0.8   # 負荷割合

# 定数
NUM_OF_CORE=$(nproc) # コア数

# 正常終了時および強制終了時にクリーンアップを実行
function cleanup() {
    pkill -P $$
    exit 1
}

#==========
# 以下実処理
#==========

# 正常終了時および強制終了時にクリーンアップを実行
trap cleanup SIGINT SIGTERM EXIT

start_time=$(date "+%s") # 開始時刻
cooldown_ratio=$(echo "1 - $load_ratio" | bc)

for ((i=0; i<$NUM_OF_CORE; i++)); do
    (
        while true; do
            current_time=$(date +%s)
            elapsed_time=$((current_time - start_time))
            if [ $elapsed_time -ge $working_time ]; then
                break
            fi
            taskset -c $i yes > /dev/null &
            pid=$!
            sleep $load_ratio     # load_ratioの割合だけバックグラウンドでyesコマンドを実行させる
            kill $pid 2>/dev/null
            sleep $cooldown_ratio # cooldown_ratioの割合だけCPUを休ませる
        done
    ) &
done

# 全部のバックグラウンドジョブが終わるのを待つ
wait

メモリ

メモリ使用率固定ツール

メモリ上のファイルシステムに一時ファイルを作成し、メモリが指定された割合だけ使用された状態を維持します。

#!/bin/bash

#======================================================
# メモリの使用率を指定された割合で規定時間維持するスクリプトです。
#======================================================

# パラメータ
working_time=300 # 負荷時間[秒]
load_ratio=0.4  # 負荷割合

# 定数
TOTAL_MEMORY_KB=$(grep MemAvailable /proc/meminfo | awk '{print $2}') # メモリ総量[KB]
TOTAL_MEMORY_MB=$((TOTAL_MEMORY_KB / 1024))                           # メモリ総量[MB]
TMP_DIR="/dev/shm/memstress"                                          # メモリ確保用の一時的な作業ディレクトリ

# スクリプト終了時にメモリを開放する関数
function cleanup() {
    rm -rf $TMP_DIR
}

#==========
# 以下実処理
#==========

# 正常終了時および強制終了時にクリーンアップを実行
trap cleanup SIGINT SIGTERM EXIT

mkdir -p $TMP_DIR

used_mb=0 # 使用メモリ量
target_mb=$(echo "$TOTAL_MEMORY_MB * $load_ratio" | bc)
target_mb=${target_mb%.*} # 小数点以下を切り捨てて -lt できるようにする
file_num=0

while [ "$used_mb" -lt "$target_mb" ]; do
    dd if=/dev/zero of="$TMP_DIR/file_$file_num" bs=1M count=100 status=none
    used_mb=$((used_mb + 100))
    file_num=$((file_num + 1))
done

sleep $working_time

ディスク

ディスク使用率固定ツール

/tmpに一時ファイルを作成し、ディスクが指定された割合だけ使用された状態を維持します。

#!/bin/bash

#======================================================
# メモリの使用率を指定された割合で規定時間維持するスクリプトです。
#======================================================

# パラメータ
working_time=300 # 負荷時間[秒]
load_ratio=0.7  # 負荷割合

# 定数
TOTAL_DISK_MB=$(df -m / | awk 'NR==2 {print $2}')
USED_DISK_MB=$(df -m / | awk 'NR==2 {print $3}')
TMP_DIR="/tmp/diskstress" # メモリ確保用の一時的な作業ディレクトリ

# スクリプト終了時にメモリを開放する関数
function cleanup() {
    rm -rf $TMP_DIR
}

#==========
# 以下実処理
#==========

# 正常終了時および強制終了時にクリーンアップを実行
trap cleanup SIGINT SIGTERM EXIT

mkdir -p $TMP_DIR

target_mb=$(echo "$TOTAL_DISK_MB * $load_ratio" | bc)
target_mb=${target_mb%.*} # 小数点以下を切り捨てて -lt できるようにする
current_disk_mb=$USED_DISK_MB
file_num=0

while [ "$current_disk_mb" -lt "$target_mb" ]; do
    dd if=/dev/zero of="$TMP_DIR/file_$file_num" bs=1M count=100 status=none
    current_disk_mb=$((current_disk_mb + 100))
    file_num=$((file_num + 1))
done

sleep $working_time