Linux各应用进程资源监控

最近有个多应用部署在一台服务器上,然后要监控各自应用占用的cpu、内存、磁盘io情况的需求。这样的需求来自于,当一台服务器发生故障时,能快速定位是哪个应用导致的类似于cpu或内存过高的情况。

核心思想是找到应用的进程pid,然后用pidstat命令来查资源占用情况。我的应用虽然是各个语言的,但是还好都是supervisor拉起服务器,所以查进程pid只需要用如下命令实现:

supervisorctl status | grep $appid| awk -F' ' '{print $4}' | sed -e 's/,$//' | paste -sd' '

然后查看cpu占用了为:

pidstat -p $1 -u|grep -v Command|grep -v ^$|grep -v Linux|awk '{print $8}

内存:

pidstat -p $1 -r|grep -v Command|grep -v ^$|grep -v Linux|awk '{print $9}'

读写io:

pidstat -p $1 -d|grep -v Command|grep -v ^$|grep -v Linux|awk '{print $5}'
pidstat -p $1 -d|grep -v Command|grep -v ^$|grep -v Linux|awk '{print $6}'

故写下如下脚本:

#!/bin/bash

appid=$1
item=$2

cpu()
{
result=`pidstat -p $1 -u|grep -v Command|grep -v ^$|grep -v Linux|awk '{print $8}'`
echo $result
}

mem()
{
result=`pidstat -p $1 -r|grep -v Command|grep -v ^$|grep -v Linux|awk '{print $9}'`
echo $result
}

readio()
{
result=`pidstat -p $1 -d|grep -v Command|grep -v ^$|grep -v Linux|awk '{print $5}'`
echo $result
}

writeio()
{
result=`pidstat -p $1 -d|grep -v Command|grep -v ^$|grep -v Linux|awk '{print $6}'`
echo $result
}


app_pid=`supervisorctl status | grep $appid| awk -F' ' '{print $4}' | sed -e 's/,$//' | paste -sd' '`

case $item in
  cpu)
      cpu $app_pid
      ;;
  mem)
      mem $app_pid
      ;;
  read)
      readio $app_pid
      ;;
  write)
      writeio $app_pid
      ;;
esac

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This blog is kept spam free by WP-SpamFree.