【分享代码】一个笨办法获取容器的剩余内存

1.在启动容器的时候,配置一个环境变量,把容器的总内存设置上去:

export mem=64G

2.用下面的脚本获取容器剩余内存:

#!/usr/bin/env bash

parse_bytes(){
  v_mem=$1
  v_len=${#v_mem}
  let v_start_loc=${v_len}-1
  v_last_char=${v_mem:$v_start_loc}
  let v_value=${v_mem:0:${v_start_loc}}+0

  case $v_last_char in
    g|G) let v_out=$v_value*1024*1024*1024
         echo $v_out
    ;;
    m|M) let v_out=$v_value*1024*1024
         echo $v_out
    ;;
    k|K) let v_out=$v_value*1024
         echo $v_out
    ;;
    b|B) echo $v_value
    ;;

  esac
}

get_free_mem(){
  v_total_mem_str=$1
  v_use_mem_kb=$(grep Pss /proc/[1-9]*/smaps | awk '{total+=$2}; END {print total}')
  let v_use_mem=${v_use_mem_kb}*1024
  # 计算出剩余内存
  v_total_mem=$(parse_bytes ${mem})
  let v_free_mem=${v_total_mem}-${v_use_mem_kb}
  echo ${v_free_mem}
}

main(){
  get_free_mem $mem
}

main

3.为什么不用 /sys/fs/cgroup/memory 这个目录下的信息?
因为我发现我厂环境中,不同的K8S版本,获取容器内存的方法不同。无奈只能用上面的办法。

posted on 2021-11-10 10:39  ahfuzhang  阅读(101)  评论(0编辑  收藏  举报