对linux进程实时进行监控的方法

时间:2022-08-13 17:33:07

刚刚实习,今天就给了个任务是:一个服务器上面的一个进程FGC太大,要求时刻监控该进程的FGC,当FGC大于3000的时候,将这个进程杀死,然后重启这个进程。

具体流程如下:

首先编写shll脚本,脚本如下

#!/bin/bash
pid=`ps aux|grep java | grep 进程的名字  |awk '{print $2}'`
FGC=`jstat -gcutil ${pid} |grep -v 'jstat'|grep -v 'S0'|awk '{print $8}'`
if [ $FGC -gt 3000 ]  
then  
    kill ${pid}
重启该进程
fi
var=`date +%Y-%m-%d-%H-%M`
echo "FGC=$FGC---$var------ok"

脚本解析:$pid获得了一直进程名字的进程号。在linux下执行ps aux可以获得进程的详细信息,如下图所示,可以知道每一行中的第二个字段为进程号,awk '{print $2}的含义就是输出改行的第二个字段的值,grep java | grep 进程的名字的含义是获得输出行含有Java和进程名字的改行数据。

        对linux进程实时进行监控的方法

$FGC指的是获得该进程FGC的值,代码的含义与获得进程号的含义一样。

对linux进程实时进行监控的方法

如图所示:第8个字段为FGC的值。

接着判断$FGC是否大于3000,大于3000的时候就杀死该进程,然后重新启动该进程。

最后定义变量记录该脚本执行的时间,从而方便更新日志文件。

最后用crontab将该脚本添加到定时启动即可:

        crontab -e 按i进入插入模式,插入:*/3 * * * * cd 脚本的位置 & sh 脚本的名字 >> 日志文件

后面需要强调的是,>> 的意思是每次在日志文件后面追加内容,>的意思是每次脚本执行会清空日志文件的内容,从新写入该日志文件。

对linux进程实时进行监控的方法