使用脚本提高 CPU 使用率
# 使用 top 查看当前 CPU 使用率(top -d 1 每秒刷新一次)
# us 用户使用 CPU% ,sy 系统使用 CPU% ,id 空闲 CPU%
[root@k8s-master-01 cpu_mem_start]# top
top - 11:13:50 up 16 min, 1 user, load average: 0.10, 0.09, 0.08
Tasks: 171 total, 1 running, 95 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 2.9 sy, 0.0 ni, 97.1 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 8099636 total, 7213152 free, 431220 used, 455264 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 7412664 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
8414 root 20 0 162116 4224 3584 R 6.2 0.1 0:00.02 top
1 root 20 0 190916 7084 3668 S 0.0 0.1 0:02.02 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.04 kthreadd
3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp
# 执行提高 CPU% 的脚本,根据 CPU% 向脚本传递参数
[root@k8s-master-01 cpu_mem_start]# sh cpu_usage_start.sh 3
# 查看当前 CPU% ,id 为 23.4 ,表示当前空闲 CPU 为 23.4%
[root@k8s-master-01 cpu_mem_start]# top
top - 11:18:35 up 21 min, 1 user, load average: 1.42, 0.42, 0.19
Tasks: 171 total, 5 running, 95 sleeping, 0 stopped, 0 zombie
%Cpu(s): 17.9 us, 58.6 sy, 0.0 ni, 23.4 id, 0.0 wa, 0.0 hi, 0.1 si, 0.0 st
KiB Mem : 8099636 total, 7224052 free, 419460 used, 456124 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 7424380 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
10311 root 20 0 108112 1536 1536 R 100.0 0.0 0:04.81 dd
10312 root 20 0 108112 1536 1536 R 100.0 0.0 0:04.82 dd
10313 root 20 0 108112 1536 1536 R 100.0 0.0 0:04.82 dd
1011 root 20 0 1688708 106676 62976 S 1.7 1.3 0:33.22 kubelet
499 root 20 0 55804 21500 21120 S 1.0 0.3 0:12.73 systemd-journal
1088 root 20 0 1185604 93984 48768 S 0.7 1.2 0:09.15 dockerd
1008 root 20 0 234816 16512 13568 S 0.3 0.2 0:04.20 rsyslogd
# 恢复真实 CPU%
[root@k8s-master-01 cpu_mem_start]# for i in `ps -ef | grep -w dd | grep -v grep | awk '{print $2}'` ; do kill -9 $i ; done
# 查看当前 CPU 使用率
[root@k8s-master-01 cpu_mem_start]# top
top - 11:20:57 up 23 min, 1 user, load average: 3.19, 1.48, 0.62
Tasks: 169 total, 1 running, 95 sleeping, 0 stopped, 0 zombie
%Cpu(s): 1.5 us, 2.9 sy, 0.0 ni, 95.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 8099636 total, 7226012 free, 417172 used, 456452 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 7426660 avail Mem
使用脚本提高 MEM 使用率
# 查看当前内存使用情况 total 总内存 ,used 当前使用内存 ,free 空闲内存 ,buff/cache 缓冲/缓存内存 ,available 估算的可供新应用程序使用的内存大小(计入真实内存)
[root@k8s-master-01 cpu_mem_start]# free -h
total used free shared buff/cache available
Mem: 7.7G 425M 6.9G 25M 453M 7.1G
Swap: 0B 0B 0B
# 执行脚本,根据当前剩余内存向脚本传递参数。切记:传参内存勿超过可用内存
[root@k8s-worker-02 cpu_mem_start]# sh mem_use_start.sh 6G
6343884800 bytes (6.3 GB) copied, 42.169124 s, 150 MB/s
6144+0 records in
6144+0 records out
6442450944 bytes (6.4 GB) copied, 42.7916 s, 151 MB/s
内存块大小 6G 已创建于 /tmp/memory/block
# 查看当前可用内存
[root@k8s-worker-02 cpu_mem_start]# free -h
total used free shared buff/cache available
Mem: 7.7G 359M 1.0G 6.0G 6.4G 1.1G
Swap: 0B 0B 0B
# 释放内存,卸载 /tmp/memory 即可
[root@k8s-worker-02 cpu_mem_start]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 3.9G 9.1M 3.9G 1% /run
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/sda2 78G 7.4G 71G 10% /
/dev/sda1 1014M 179M 836M 18% /boot
tmpfs 791M 0 791M 0% /run/user/0
tmpfs 6.0G 6.0G 0 100% /tmp/memory
[root@k8s-worker-02 cpu_mem_start]# umount /tmp/memory
[root@k8s-worker-02 cpu_mem_start]# free -h
total used free shared buff/cache available
Mem: 7.7G 354M 7.0G 9.1M 385M 7.1G
Swap: 0B 0B 0B
获取脚本
[root@k8s-worker-01 cpu_men_usage_start]# cat cpu_usage_start.sh
#!/bin/bash
# 指定脚本使用的解释器为 bash。
number=$1
# 将脚本的第一个参数赋值给变量 number。假设你运行脚本时传递了一个数字,这个数字会被存储在变量 number 中。
for i in `seq 1 ${number}`;
# 启动一个循环,从 1 到变量 number 的值。seq 是一个生成序列的命令,循环会依次执行每个数字。
do
dd if=/dev/zero of=/dev/null &
# 在后台执行 dd 命令。dd 命令会从 /dev/zero 读取数据,并将其写入到 /dev/null。由于 /dev/zero 产生的是空数据,/dev/null 用于丢弃这些数据,所以这个命令不会产生实际的磁盘写入。由于命令在后台运行(&),它会占用 CPU 资源。
done
# 循环结束
[root@k8s-worker-01 cpu_men_usage_start]# cat mem_use_start.sh
#!/bin/bash
# 函数定义:占用指定大小的内存
use_memory() {
local mem_size="$1" # 要占用的内存大小
local mem_dir="/tmp/memory" # 内存占用目录
local block_file="$mem_dir/block" # 占用内存的文件
# 解析内存大小,支持单位 M 和 G
local mem_size_bytes
if [[ "$mem_size" =~ ^([0-9]+)([MG])$ ]]; then
local size_value=${BASH_REMATCH[1]} # 数值部分
local size_unit=${BASH_REMATCH[2]} # 单位部分
if [[ "$size_unit" == "M" ]]; then
# 如果单位是 M(兆字节),将其转换为字节数
mem_size_bytes=$((size_value * 1024 * 1024))
elif [[ "$size_unit" == "G" ]]; then
# 如果单位是 G(千兆字节),将其转换为字节数
mem_size_bytes=$((size_value * 1024 * 1024 * 1024))
fi
else
echo "无效的内存大小格式。请使用 <size>[M|G] 格式。"
return 1
fi
# 检查目录是否存在,如果不存在则创建
if [ ! -d "$mem_dir" ]; then
mkdir -p "$mem_dir"
fi
# 检查是否已经挂载了 tmpfs
if mount | grep -q "on $mem_dir type tmpfs"; then
# 已经挂载了 tmpfs,检查是否是我们需要的大小
if mount | grep -q "size=${mem_size_bytes}"; then
echo "内存大小 $mem_size 已经挂载。"
return
else
# 挂载的 tmpfs 大小不符合要求,重新挂载
echo "重新挂载 tmpfs,调整到所需大小。"
umount "$mem_dir"
if ! mount -t tmpfs -o size="$mem_size" tmpfs "$mem_dir"; then
echo "挂载 tmpfs 时指定大小 $mem_size 失败。"
return 1
fi
fi
else
# 没有挂载 tmpfs,进行挂载
if ! mount -t tmpfs -o size="$mem_size" tmpfs "$mem_dir"; then
echo "挂载 tmpfs 时指定大小 $mem_size 失败。"
return 1
fi
fi
# 使用 dd 命令创建一个占用内存的文件
if ! dd if=/dev/zero of="$block_file" bs=1M count="$((mem_size_bytes / 1024 / 1024))" status=progress; then
echo "创建内存块失败。"
return 1
fi
echo "内存块大小 $mem_size 已创建于 $block_file"
}
# 主脚本逻辑
# 检查是否提供了内存大小参数
if [ "$#" -ne 1 ]; then
echo "用法: $0 <memory_size>"
echo "例如: $0 4096M"
exit 1
fi
# 调用函数并传入参数
USE="$1"
use_memory "$USE"