利用脚本提高 CPU 内存 使用率

使用脚本提高 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"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值