码路心路知行合一 2012-07-06
利用lxc-execute启动应用容器后,可以利用lxc自带的lxc-info获取容器的状态,lxc-monitor监控容器状态的变化,但是不能获取容器内应用的信息。这点可以通过结合Linux ps命令和lxc自带的lxc-ps和lxc-cgroup命令来实现。
1.首先我们可以通过lxc-ps获取特定容器内需要监控的应用的pid号
#usage:get_pid container_name app_name
function get_pid
{
local pid=`lxc-ps -n $1 |grep $2 | awk '{print $2}'|grep -v PID`
echo $pid
}
2.然后我们就可以使用ps命令对该pid代表的应用进行监控了。
2.1获取应用所在的cpu核心
#usage:get_cpu_core pid
function get_cpu_core
{
local cpu_core=`ps -p $1 -o psr | grep -v PSR`
echo $cpu_core
}
2.2获取应用占用的cpu比例
#usage:get_cpu_percent pid
function get_cpu_percent
{
local cpu_percent=`ps -p $1 -o pcpu | grep -v CPU`
echo $cpu_percent
}
2.3获取应用使用的RSS(物理内存)
#usage:get_app_phy_mem pid
function get_app_phy_mem
{
local mem=`ps -p $1 -o rss | grep -v RSS`
mem=$((mem*1024))
echo $mem
}
3.接着利用LXC自带的lxc-cgroup命名来统计整个容器的资源占用情况
3.1获取容器使用的物理内存(RSS+cache)
#usage:get_container_phy_mem container_name
function get_container_phy_mem
{
local mem=`lxc-cgroup -n $1 memory.usage_in_bytes`
echo $mem
}
3.2获取容器使用物理内存和swap空间的和
#usage:get_container_total_mem container_name
function get_container_total_mem
{
local mem=`lxc-cgroup -n $1 memory.memsw.usage_in_bytes`
echo $mem
}
4.利用lxc-info抓取容器的状态
#usage:get_status container_name
function get_container_status
{
local str=`lxc-info -n $1 |grep state |awk '{print $2}'`
echo $str
}
可以将以上函数整合成一个脚本,然后定时执行脚本,就可以监控容器内的应用资源使用状况了。
再进一步可以根据应用资源消耗状况,动态增减分配给容器的资源量。