在对应用服务进行维护时,也经常遇到由于句柄使用 过量导致业务中断的情况。每个平台对进程的句柄使用都是有限的,例如在 Linux 平台,我们可以使用 ulimit – n 命令(open files (-n) 1024)或者对 /etc/security/limits.conf 的内容进行查看,得到进程句柄限制。句柄使用过高可能由于负载过高,句柄泄露等情况,通过脚本对业务进程句柄使用量进行时时监控,可以在异常时及时发送告警(例如通过短信),便于维护人员及时处理。下面的函数可获得指定进程 ID 的进程句柄使用情况。它有一个参数为进程 ID,它首先使用 ls 输出进程句柄信息,然后通过 wc -l 统计输出句柄个数。
复制代码 代码如下:
function GetDes
{
DES=`ls /proc/$1/fd | wc -l`
echo $DES
}
下面功能是通过上面的函数 GetDes获得此进程的句柄使用量,然后通过条件语句判断句柄使用是否超过限制,如果超过 900(可以根据实际情况进行调整)个,则输出告警,否则输出正常信息。
复制代码 代码如下:
des=` GetDes $PID`
if [ $des -gt 900 ]
then
{
echo “The number of des is larger than 900”
}
else
{
echo “The number of des is normal”
}
fi
示例演示:
1)源程序(假设上面查询出 CFTestApp 的进程 ID 为 11426)
复制代码 代码如下:
des=`GetDes 11426`
echo "The number of des is $des"
if [ $des -gt 900 ]
then
{
echo "The number of des is larger than 900"
}
else
{
echo "The number of des is normal"
}
fi
2)结果输出
复制代码 代码如下:
The number of des is 528
The number of des is normal
[dyu@xilinuxbldsrv shell]$
3)结果分析
从上面的输出可见:CFTestApp 程序当前的句柄使用为 528 个,是正常的,没有超过 900 个的告警限制。
4)命令介绍
wc: 统计指定文件中的字节数、字数、行数 , 并将统计结果显示输出。 参数:-l 统计行数。 -c 统计字节数。 -w 统计字数。
查看某个 TCP 或 UDP 端口是否在监听
端口检测是系统资源检测经常遇到的,特别是在网络通讯情况下,端口状态的检测往往是很重要的。有时可能进程,CPU,内存等处于正常状态,但是端口处于异常状态,业务也是没有正常运行。下面函数可判断指定端口是否在监听。它有一个参数为待检测端口,它首先使用 netstat 输出端口占用信息,然后通过 grep, awk,wc 过滤输出监听 TCP 端口的个数,第二条语句为输出 UDP 端口的监听个数,如果 TCP 与 UDP 端口监听都为 0,返回 0,否则返回 1.
清单 6. 端口检测
复制代码 代码如下:
function Listening
{
TCPListeningnum=`netstat -an | grep ":$1 " | \n
awk '$1 == "tcp" && $NF == "LISTEN" {print $0}' | wc -l`
UDPListeningnum=`netstat -an|grep ":$1 " \n
|awk '$1 == "udp" && $NF == "0.0.0.0:*" {print $0}' | wc -l`
(( Listeningnum = TCPListeningnum + UDPListeningnum ))
if [ $Listeningnum == 0 ]
then
{
echo "0"
}
else
{
echo "1"
}
fi
}
示例演示:
1)源程序(例如查询 8080 端口的状态是否在监听)
复制代码 代码如下: