# 获取容器内进程占用cpu的百分比
get_container_process_cpu_usage()
{
local pid=$1
# 在一个调度周期里被允许的运行时间,比如这个值为 50000 时,就是 50us。默认值是-1,即没有限制
local cpu_quota_us_path=/sys/fs/cgroup/cpu/cpu.cfs_quota_us
# 一个调度周期。默认值是100000,也就 100us
local cpu_period_us_path=/sys/fs/cgroup/cpu/cpu.cfs_period_us
if [ -f $cpu_quota_us_path ] && [ -f $cpu_period_us_path ];then
local cpu_quota_us=$(cat ${cpu_quota_us_path})
local cpu_period_us=$(cat ${cpu_period_us_path})
local cpu_info=$(top -b -n 1 | awk -v_check_pid=${pid} '{if($1==_check_pid) print $9}')
if [ -z "${cpu_info}" ];then
cpu_info="0.00"
fi
# 当cpu_quota_us为-1时,代表容器对cpu资源没有限制
if [ ${cpu_quota_us} == '-1' ];then
echo ""
else
cpu_info=$(echo "scale=4;$cpu_info/($cpu_quota_us/$cpu_period_us)"|bc|awk '{printf "%.2f",$0}')
echo ${cpu_info}|awk '{printf "%.2f",$0}'
fi
else
echo ""
fi
}
# 获取容器内进程占用内存的百分比
get_container_process_mem_usage()
{
local pid=$1
# 宿主机内存上限,单位kb,需要转为byte
host_mem_total=$(cat /proc/meminfo|grep MemTotal|awk '{print $2*1024}')
# 保存容器中内存上限的文件路径
local mem_limit_in_bytes_path=/sys/fs/cgroup/memory/memory.limit_in_bytes
if [ -f $mem_limit_in_bytes_path ];then
# 单位byte
local container_total_mem=$(cat /sys/fs/cgroup/memory/memory.limit_in_bytes)
# 当容器总内存超过宿主机总内存时,使用查看宿主机中进程占用内存方式来查看容器中占用内存
if [ ${container_total_mem} -ge ${host_mem_total} ];then
echo ""
else
local mem_info=$(ps -aux | awk -v_check_pid=${pid} '{if($2==_check_pid) print $6}')
if [ -z "${mem_info}" ];then
mem_info="0.00"
fi
mem_info=$(echo "scale=4;($mem_info*1024/$container_total_mem)*100"|bc|awk '{printf "%.2f",$0}')
echo ${mem_info}|awk '{printf "%.2f",$0}'
fi
else
echo ""
fi
}
# 获取物理机内进程用cpu的百分比
get_pmachine_process_cpu_usage()
{
local pid=$1
#$3是cpu
local cpu_info=$(top -b -n 1 | awk -v_check_pid=${pid} '{if($1==_check_pid) print $9}')
if [ -z "${cpu_info}" ];then
cpu_info="0.00"
fi
total_core=$(cat /proc/cpuinfo | grep -w "processor" | wc -l)
cpu_info=$(echo "scale=4;$cpu_info/$total_core"|bc|awk '{printf "%.2f",$0}')
echo ${cpu_info}|awk '{printf "%.2f",$0}'
}
# 获取物理机内进程用内存的百分比
get_pmachine_process_mem_usage()
{
local pid=$1
#$4是内存
local mem_info=$(ps aux | awk -v_check_pid=${pid} '{if($2==_check_pid) print $4}')
if [ -z "${mem_info}" ];then
mem_info="0.00"
fi
echo ${mem_info}
}