为了实现自定义进程性能监控的功能,我们创建一个操作定义文件,该文件定义了要进行监控的进程名称,CPU 和内存的阈值,以及 CPU 和内存利用率超过阈值时采取的操作。这里我们将该文件命名为 /root/ProcAction,该文件适用于 Linux 和 AIX 操作系统。本实例中列出了要进行性能监控的三个进程 init、kthread 以及 migration,其中内容和格式如下所示:
清单 10. /root/ProcAction 文件内容
#command,%cpu,%memory,action init,20,10,/root/action2 kthread,5,10,/root/action2 migration,15,20,/root/action2 java,10,10,/root/action2 |
以第一行内容为例,表示我们要监控 init 进程,当该进程的 CPU 利用率达到 20%或者内存利用率达到 10% 的时候,运行脚本 /root/action2 进行响应。
其中 /root/action2 脚本的内容如下所示,用户也可以根据需求进行扩充和改变。
清单 11. /root/action2 文件内容
#!/bin/bash echo "The Process $1 Consumed too much CPU or Memory Resource:%CPU = $2% %MEM = $3%" | mail -s "Warning for Process $1" root |
在这个脚本里面,我们只做了简单的操作,发送监控进程的名称以及该进程的 CPU 和内存利用率给 root 用户。其中 $1,$2,$3 分别是 监控进程的名称,CPU 利用率和内存利用率的值。
我们的进程性能自动化监控脚本就是要监控 /root/ProcAction 文件中定义的进程,通过 top 获取到要监控的进程当前的 CPU 和内存利用率,然后将其与 /root/ProcAction 中定义的阈值进行比较,如果超出阈值,则发送警告邮件给 root 用户。
为了实现自动化的性能监控,我们利用系统的 cron 服务。使用命令“crontab -e”编辑 crontab,添加一个条目。
在 Linux 操作系统上添加一条 crontab 条目,表示每隔两分钟运行一次 CheckProcPerformance 脚本,内容如下所示:
清单 12. Linux crontab 新添加的内容
*/2 * * * * /root/CheckProcPerformance >> /root/checkprocperformance.log 2>&1 |
保存退出之后,可以用“crontab -l”查看,确保任务添加成功。
这里我们定义表示每隔两分钟运行一次 CheckProcPerformance 脚本,并将其输出存储在 /root/ checkprocperformance.log 文件中。用户可以根据自己的需求修改脚本运行的间隔时间。以上步骤完成后,就可以实现对进程性能的自动化监控了。
就我们这个例子来说,如果没有错误信息,checkprocperformance.log 日志中不会有信息保存,预警信息将会作为邮件发送给 root 用户。在测试的时候,java 进程占用的 CPU 值超过阈值,因此 root 用户收到一封标题为 Warning for Process java 的邮件:
清单 13. 预警邮件内容
From root@hv4plus_lpar2.ppd.pok.ibm.com Wed Jun 3 08:52:52 2009 X-Original-To: root Delivered-To: root@hv4plus_lpar2.ppd.pok.ibm.com Date: Wed, 03 Jun 2009 08:52:52 -0400 To: root@hv4plus_lpar2.ppd.pok.ibm.com Subject: Warning for Process java User-Agent: nail 11.25 7/29/05 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit From: root@hv4plus_lpar2.ppd.pok.ibm.com (root) The Process java Consumed too much CPU or Memory Resource:%CPU = 15% %MEM = 1.3% |
小结
本文介绍了 Unix/Linux 上的进程监控命令和进程定时启动命令,并通过两个自动化监控脚本详细介绍了如何实现进程状态和性能的自动化监控管理。监控系统进程会给系统管理员提供丰富的关于系统进程运行的信息,自动化监控的实现更能为系统管理员在系统发生异常时采取迅速的措施提供了方便。(责任编辑:A6)