ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

【实时Linux实战系列】实时系统监控与看门狗

2026/8/5 22:28:28 拓冰建站 浏览量
【实时Linux实战系列】实时系统监控与看门狗

在实时系统中,确保系统的稳定性和可靠性至关重要。实时任务的失效可能导致系统响应延迟或数据处理错误,进而影响整个系统的正常运行。为了提高系统的可靠性和稳定性,实时系统通常配备看门狗(Watchdog)机制,用于监控系统状态并在任务失效时进行复位。本文将介绍如何在实时Linux系统中配置和使用看门狗驱动、实现用户态心跳机制以及编写系统健康监测脚本,确保实时任务的失效能够被及时检测并复位。

核心概念

看门狗(Watchdog)

看门狗是一种硬件或软件机制,用于监控系统的运行状态。如果系统在规定的时间内没有响应,看门狗会触发复位操作,使系统恢复到正常状态。

看门狗驱动

看门狗驱动是内核中的一个模块,用于管理硬件看门狗设备。它提供了用户空间程序与硬件看门狗设备之间的接口。

用户态心跳机制

用户态心跳机制是指在用户空间程序中定期发送心跳信号,以告知看门狗设备系统仍在正常运行。如果心跳信号停止,看门狗将触发复位操作。

系统健康监测脚本

系统健康监测脚本是一种定期运行的脚本,用于检查系统的健康状态,如CPU使用率、内存使用情况、网络连接等。如果检测到异常,脚本可以触发看门狗复位操作。

环境准备

硬件环境

  • 计算机:支持Linux操作系统的计算机。

  • 开发板(可选):如果需要在嵌入式设备上运行,可以选择支持实时Linux的开发板,例如BeagleBone或Raspberry Pi。

软件环境

  • 操作系统:实时Linux发行版,例如带有PREEMPT_RT补丁的Linux内核。

  • 开发工具:GNU C编译器(GCC)、GDB调试器、Make工具等。

  • 版本信息

    • Linux内核版本:5.4或更高。

    • GCC版本:9.3或更高。

    • GDB版本:8.2或更高。

环境安装与配置

  1. 安装实时Linux内核

    • 下载带有PREEMPT_RT补丁的Linux内核源码:

    • wget https://www.kernel.org/pub/linux/kernel/v5.x/linux-5.4.tar.xz
      wget https://mirrors.edge.kernel.org/pub/linux/kernel/projects/rt/5.4/patch-5.4-rt23.patch.xz
    • 解压并应用补丁:

      tar -xf linux-5.4.tar.xz
      cd linux-5.4
      xz -d ../patch-5.4-rt23.patch.xz
      patch -p1 < ../patch-5.4-rt23.patch
    • 配置内核并编译:

    • make menuconfig
      make -j$(nproc)
      sudo make modules_install install
    • 安装开发工具

      • 安装GCC和GDB:

      •  
        sudo apt-get update
        sudo apt-get install build-essential gdb
    • 验证环境

      • 检查内核版本:

    • uname -r

      输出应包含-rt,例如5.4.0-rt23

    • 检查GCC版本:

    • gcc --version

      输出应显示版本号为9.3或更高。

实际案例与步骤

配置看门狗驱动

  1. 加载看门狗驱动

    • 加载内核中的看门狗驱动模块:

    •  
      sudo modprobe watchdog
  • 配置看门狗设备

    • 配置看门狗设备的超时时间:

    •  
      echo 60 > /dev/watchdog

    实现用户态心跳机制

    1. 编写心跳程序 创建一个名为heartbeat.c的文件,并输入以下代码:

    2. #include <stdio.h>
      #include <stdlib.h>
      #include <unistd.h>
      #include <fcntl.h>
      #include <sys/ioctl.h>
      #include <linux/watchdog.h>int main() {int fd = open("/dev/watchdog", O_WRONLY);if (fd < 0) {perror("open");exit(EXIT_FAILURE);}while (1) {ioctl(fd, WDIOC_KEEPALIVE, 0); // 发送心跳信号sleep(10); // 每10秒发送一次心跳}close(fd);return 0;
      }
    3. 编译和运行心跳程序

      • 编译代码:

    4. gcc -o heartbeat heartbeat.c
    5. 运行程序:

    6. sudo ./heartbeat

      编写系统健康监测脚本

      1. 编写健康监测脚本 创建一个名为health_check.sh的脚本文件,并输入以下内容:

      2. #!/bin/bash# 检查CPU使用率
        CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1}')
        if (( $(echo "$CPU_USAGE > 90" | bc -l) )); thenecho "CPU usage is too high: $CPU_USAGE%"echo "V" > /dev/watchdog  # 触发看门狗复位
        fi# 检查内存使用情况
        MEM_USAGE=$(free | grep Mem | awk '{print $3/$2 * 100.0}')
        if (( $(echo "$MEM_USAGE > 90" | bc -l) )); thenecho "Memory usage is too high: $MEM_USAGE%"echo "V" > /dev/watchdog  # 触发看门狗复位
        fi# 检查网络连接
        if ! ping -c 1 google.com &> /dev/null; thenecho "Network connection is down"echo "V" > /dev/watchdog  # 触发看门狗复位
        fi
      3. 设置脚本定时运行

        • 使用cron设置脚本定时运行:

      4. crontab -e
      5. 添加以下行,使脚本每分钟运行一次:

      6. * * * * * /path/to/health_check.sh

        常见问题与解答

        问题1:如何加载看门狗驱动?

        解决方案: 加载内核中的看门狗驱动模块:

        sudo modprobe watchdog

        问题2:如何配置看门狗设备的超时时间?

        解决方案: 配置看门狗设备的超时时间:

        echo 60 > /dev/watchdog

        问题3:如何实现用户态心跳机制?

        解决方案: 编写一个心跳程序,定期向看门狗设备发送心跳信号:

        ioctl(fd, WDIOC_KEEPALIVE, 0);

        问题4:如何编写系统健康监测脚本?

        解决方案: 编写一个脚本,定期检查系统的健康状态,如CPU使用率、内存使用情况、网络连接等:

        CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1}')
        if (( $(echo "$CPU_USAGE > 90" | bc -l) )); thenecho "CPU usage is too high: $CPU_USAGE%"echo "V" > /dev/watchdog  # 触发看门狗复位
        fi

        实践建议与最佳实践

        实用操作技巧

        • 定期测试看门狗:定期测试看门狗的复位功能,确保其正常工作。

        • 监控系统状态:使用系统健康监测脚本定期检查系统的健康状态,及时发现潜在问题。

        • 备份重要数据:在使用看门狗复位功能之前,建议备份重要数据,以防数据丢失。

        最佳实践

        • 合理配置看门狗超时时间:根据系统的实际需求合理配置看门狗的超时时间,避免过早或过晚触发复位操作。

        • 结合多种监控机制:结合使用用户态心跳机制和系统健康监测脚本,全面监控系统的运行状态。

        • 优化脚本性能:优化系统健康监测脚本的性能,减少脚本运行对系统性能的影响。

        总结

        通过本篇文章的学习,我们了解了如何在实时Linux系统中配置和使用看门狗驱动、实现用户态心跳机制以及编写系统健康监测脚本。这些技术能够确保实时任务的失效能够被及时检测并复位,从而提高系统的稳定性和可靠性。希望读者能够将所学知识应用到实际项目中,进一步提升系统的性能和稳定性。