【分享代码】一个笨办法获取容器的剩余内存
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版本,获取容器内存的方法不同。无奈只能用上面的办法。