function GetCpu
{
CpuValue=`ps -p $1 -o pcpu |grep -v CPU | awk '{print $1}' | awk - F. '{print $1}'`
echo $CpuValue
}
下面的功能是通过上面的函数 GetCpu 获得此进程的 CPU 利用率,然后通过条件语句判断 CPU 利用率是否超过限制,如果超过 80%(可以根据实际情况进行调整),则输出告警,否则输出正常信息。
清单 3. 判断 CPU 利用率是否超过限制
复制代码 代码如下:
function CheckCpu
{
PID=$1
cpu=`GetCpu $PID`
if [ $cpu -gt 80 ]
then
{
echo “The usage of cpu is larger than 80%”
}
else
{
echo “The usage of cpu is normal”
}
fi
}
示例演示:
1)源程序(假设上面已经查询出 CFTestApp 的进程 ID 为 11426)
复制代码 代码如下:
CheckCpu 11426
2)结果输出
复制代码 代码如下:
The usage of cpu is 75
The usage of cpu is normal
[dyu@xilinuxbldsrv shell]$
3)结果分析
从上面的输出可见:CFTestApp 程序当前的 CPU 使用为 75%,是正常的,没有超过 80% 的告警限制。
检测进程内存使用量
在对应用服务进行维护时,也经常遇到由于内存使用过大导致进程崩溃,造成业务中断的情况(例如 32 位程序可寻址的最大内存空间为 4G,如果超出将申请内存失败,同时物理内存也是有限的)。内存使用过高可能由于内存泄露,消息堆积等情况,通过脚本对业务进程内存使用量进行时时监控,可以在内存使用量异常时及时发送告警(例如通过短信),便于维护人员及时处理。下面的函数可获得指定进程 ID 的进程内存使用情况。它有一个参数为进程 ID,它首先使用 ps 查找进程信息,同时通过 grep -v 过滤掉 VSZ 行 , 然后通过除 1000 取以兆为单位的内存使用量。
清单 4. 对业务进程内存使用量进行监控
复制代码 代码如下:
function GetMem
{
MEMUsage=`ps -o vsz -p $1|grep -v VSZ`
(( MEMUsage /= 1000))
echo $MEMUsage
}
下面的功能是通过上面的函数 GetMem获得此进程的内存使用,然后通过条件语句判断内存使用是否超过限制,如果超过 1.6G(可以根据实际情况进行调整),则输出告警,否则输出正常信息。
清单 5. 判断内存使用是否超过限制
复制代码 代码如下:
mem=`GetMem $PID`
if [ $mem -gt 1600 ]
then
{
echo “The usage of memory is larger than 1.6G”
}
else
{
echo “The usage of memory is normal”
}
fi
示例演示:
1)源程序(假设上面已经查询出 CFTestApp 的进程 ID 为 11426)
复制代码 代码如下:
mem=`GetMem 11426`
echo "The usage of memory is $mem M"
if [ $mem -gt 1600 ]
then
{
echo "The usage of memory is larger than 1.6G"
}
else
{
echo "The usage of memory is normal"
}
fi
2)结果输出
复制代码 代码如下:
The usage of memory is 248 M
The usage of memory is normal
[dyu@xilinuxbldsrv shell]$
3)结果分析
从上面的输出可见:CFTestApp 程序当前的内存使用为 248M,是正常的,没有超过 1.6G 的告警限制。
检测进程句柄使用量