watchdog 是一款优秀的系统监控工具。普通情况下,它看似无关紧要,但却能在危机关头力挽狂澜。因为它能够在系统资源即将耗尽或即将崩溃时主动重启系统,避免由于硬件罢工而导致的被动重启或宕机造成的数据损失和业务损失。这里将讨论软件watchdog ,而不是硬件watchdog 。
watchdog 实际上是一个用于系统主动重启的计时器,默认倒计时为60秒,系统在60秒内往 /dev/watchdog 设备中进行一次写操作,如果成功则归零计时器,重新倒计时。如果在60秒内,没有任何写操作,watchdog 便认为系统发生严重故障,主动重启系统,以求自救而不是等死。
在主动重启之前, 会执行以下一系列操作:
- a、关闭所有打开的文件
- b、如果sendmail应用存在,配置文件中提供了管理员的email地址,将发封email给管理员
- c、通知系统重启
- d、将重启信息记入系统日志kill掉所有进程将重启信息记入wtmp
- e、关闭倒计时,磁盘限额,交换分区
- f、卸载所有非根文件系统
- g、以只读方式重新装载根文件系统(这个十分重要,防止破坏系统,因为被动重启有可能破坏系统)
- h、关闭网络接口
- i、重启系统
内核级别的watchdog,通常是内核自带,除非编译,没有给用户配置的余地。另外还有用户接口,可以更方便的使用。
watchdog 会根据配置检测系统平均负载,剩余内存,网络是否通畅等,为此我们可以轻松设置系统可用资源的上限,当满足某一条件则会触动重启机制,这可以方便的保护机器。例如,我们设置当剩余虚拟内存页面低于x,或15分钟平均负载高于y时,系统将自动重启,配合heartbeat,可以把灾难降至最低,特别是高负载带来的系统宕机。
这里以scientific linux 6和ubuntu 10.04为例:
1、安装
- #yum install watchdog
或
- #apt-get install watchdog
2、配置模块
a、查看模块信息
#modinfo softdog #注意,由于是软件实现的watchdog,故称为softdog,而不是watchdog。
b、开机加载softdog模块(由于并非基础性模块,不用事先考虑系统启动顺序)
【centos 6 /scientific linux 6】:
- #cat /etc/sysconfig/modules/watchdog.modules
- #!/bin/sh
- if [ ! -c /dev/watchdog];then
- /sbin/modprobe softdog >/dev/null 2>&1
- fi
- #chmod +x /etc/sysconfig/modules/watchdog.modules
【ubuntu 10.04 】:
- #vi /etc/rc.local
- #/bin/sh -e
- modprobe softdog
- exit 0
重启系统后,检查模块是否加载
#lsmod |grep softdog
或者查看/dev 目录下是否存在/dev/watchdog 设备
#ls -l /dev |grep watchdog
3、配置watchdog
vi /etc/watchdog.conf
- min-memory = 10
- #注意,这里指内存页面数,而不是内存大小,内存大小等于页面大小乘以页面数目。
- #使用命令“ getconf PAGESIZE” 获得系统内存页面大小,我这里是4096K=4M,也就是说,这里设置的最低内存为4M x 10 = 40M
- #意即,当系统可用虚拟内存低于40M时,watchdog将主动重启。
- watchdog-device = /dev/watchdog
- admin = root #发信收件人,这里是管理员。需要sendmail支持。
- interval = 10 #每间隔10秒钟往/dev/watchdog设备中执行一次写操作。
- logtick = 60 #睡眠时间,持续写日志到syslog很耗磁盘空间和CPU资源,此选项会隔一段时间写一次,节省资源。
- realtime = yes #实时监控,将watchdog 封入内存,防止在系统高负载时watchdog 意外退出。
- priority = 1 #优先级
本文迁移自本人早先的百度空间文章
另见本人在linuxtone 关于watchdog的文章有更深入的内容。