应使用pidstat结合pgrep动态监控心跳进程,重点观察cpu、rss和上下文切换指标,配合-t、--human、-h等参数实现线程级、人性化、高精度时间戳监控,并通过日志交叉验证异常。

直接用 pidstat 监控高可用集群的心跳进程(比如 corosync、pacemaker、keepalived 或自定义的 heartbeat.sh 等),关键不是“泛泛看进程”,而是精准定位 + 持续观察核心指标 + 关联异常信号。心跳进程通常轻量但敏感,CPU 占用低、内存波动小、IO 几乎为零——所以必须盯住它是否“活着”、是否“卡住”、是否“被调度压制”。
用 pgrep 动态抓 PID,避免硬编码失效
心跳进程可能重启、多实例共存、或由不同用户启动(如 root 或 hacluster)。别手动 ps aux | grep keepalived 再抄 PID,容易漏或多。用 pgrep 精准匹配命令行:
- 对
keepalived:pidstat -p "$(pgrep -f 'keepalived.*-D')" -u -r -w 2
- 对
corosync(常无-D参数):pidstat -p "$(pgrep -x corosync)" -u -r 1
✅
pgrep -f匹配完整启动命令,防同名干扰;pgrep -x严格匹配进程名,更稳妥。若返回空,先运行pgrep -lf 'keepalived'确认实际命令和 PID。
重点监控三项指标,而非只看 CPU
心跳进程正常时 %CPU 常低于 0.5%,RSS 稳定,cswch/s(上下文切换)也极低。异常往往藏在细节里:
- CPU 异常飙升:可能是配置错误导致无限重试(如网络不通反复发包),或被其他高优先级任务抢占导致调度延迟堆积;
-
RSS 突增 +
minflt/s飙升:说明频繁缺页,可能内存碎片严重或 mmap 映射异常; -
cswch/s或nvcswch/s暴涨:进程频繁让出 CPU(如死循环等待、锁竞争),或被内核频繁调度(如 CPU 绑定冲突、nice 值过低); -
长时间
0.00输出:PID 已消失但pidstat还在跑?说明进程已挂,但监控没告警——需配合脚本检测输出是否中断。
加 -h 和 --human 让输出易读,加 -T CHILD 看子线程
心跳服务常派生子进程/线程处理网络或定时器。默认只看主进程,可能忽略真正卡住的子线程:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
pidstat -p "$(pgrep -x pacemaker)" -u -r -t --human 3
✅
-t显示线程级统计;--human把 KB 自动转 MB/GB;-T CHILD可进一步展开子任务(部分版本支持)。
结合时间戳与日志交叉验证
心跳异常常伴随系统日志(journalctl -u keepalived -n 20)或集群日志(/var/log/cluster/corosync.log)。开启高精度时间戳辅助定位:
pidstat -p "$(pgrep -x corosync)" -urH 0.5 | grep -E "(PID|%CPU|RSS)"
✅
-H输出纳秒级时间戳;采样间隔设0.5秒可捕捉短时抖动(但别低于0.1,否则刷屏且增加负载)。
不复杂但容易忽略。










