手机版
你好,游客 登录 注册 搜索
背景:
阅读新闻

利用shell脚本监控LXC应用容器内的应用

[日期:2012-07-06] 来源:Linux社区  作者:lisperl [字体: ]

利用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
}

可以将以上函数整合成一个脚本,然后定时执行脚本,就可以监控容器内的应用资源使用状况了。

再进一步可以根据应用资源消耗状况,动态增减分配给容器的资源量。

linux
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款