利用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
}
可以將以上函數整合成一個腳本,然後定時執行腳本,就可以監控容器內的應用資源使用狀況了。
再進一步可以根據應用資源消耗狀況,動態增減分配給容器的資源量。