系统健康监控
概述
DarraRT 运行在 Windows 工控机上, 依赖 CPU、内存、磁盘 IO、网卡、温度、电源六大基础资源。 任何一个资源趋向饱和都会间接影响 PLC 扫描抖动、EtherCAT 帧率稳定性、IDE 响应速度。
本文档阐述如何建立基线 → 告警 → 一键健康报告的完整监控链路, 并给出每项指标的推荐阈值。
DarraRT Service 内置 HealthMonitor 服务, 默认每 10 秒采样一次, 超过阈值写入
service_*.log 并触发报警。
适用场景
- 新产线上线前的基准健康体检(建立 baseline)
- 产线运行中的实时告警(阈值突破时弹窗/邮件)
- 故障后的事后健康报告导出(PDF, 用于售后支持)
- 跨机型对比(工控机 A vs 工控机 B)
前置条件与工具
| 工具 | 用途 | 安装位置 |
|---|---|---|
| DarraRT Service | 内置健康采样 | 产品自带 |
| Windows 性能监视器 | 手工交叉验证 | perfmon.msc |
| HWiNFO 64 | 硬件传感器 (温度/电压) | 免费版即可 |
| OpenHardwareMonitor | 开源替代 | 可选 |
| PowerShell 5.1+ | 脚本化采集 | Windows 自带 |
| Process Explorer | 进程句柄/线程 | SysInternals |
六大资源基线与阈值
1. CPU
| 指标 | 基线 | 告警阈值 | 说明 |
|---|---|---|---|
| 整体占用率 | < 30% | > 70% 持续 10s | 超出应检查是否有后台任务 |
| Service 进程 | < 5% | > 20% | Service 本身应极轻 |
| IDE 进程 | < 15% | > 50% | 操作时允许短暂突刺 |
| 内核态占用 | < 5% | > 15% | 内核态高=驱动异常 |
| 隔离核占用 | 100% 忙等 | n/a | 隔离核是有意独占 |
DarraRT 使用核心隔离 (Core Isolation), 由
DarraRT.sys将指定核独占给 EtherCAT PDO 线程。 任务管理器上显示的"100%"是正确状态, 不是异常。请用Process Explorer → CPU Graph过滤非隔离核查看真实占用。
2. 内存
| 指标 | 基线 | 告警阈值 | 说明 |
|---|---|---|---|
| 系统可用 | > 4GB | < 1GB | 剩余不足影响缓存 |
| Service 工作集 | < 200MB | > 800MB 持续增长 | 线性上涨=内存泄漏 |
| IDE 工作集 | < 500MB | > 2GB | 大工程允许 1-2GB |
| 分页文件 | < 50% | > 80% | 过度分页=实时性杀手 |
| 非分页池 | < 500MB | > 1.5GB | 驱动泄漏信号 |
内核驱动用非分页池 (
ExAllocatePoolWithTag) 分配内存。若非分页池持续增长, 多半是DarraRT_Eth.sys的 NDIS 帧缓冲未正确回收。用poolmon.exe -p -i按 Tag 查看。 DarraRT 的 Pool Tag 约定:
DRRC— Global 驱动DREC— Eth 驱动DRPC— PLC 驱动
3. 磁盘 IO
| 指标 | 基线 | 告警阈值 | 说明 |
|---|---|---|---|
| 日志盘写入 | < 10 MB/s | > 50 MB/s 持续 | 日志洪水 = 代码 bug |
| 日志盘空闲空间 | > 20% | < 5% | 日志轮转必需 |
| 队列深度 | < 2 | > 10 | HDD 工控机高风险 |
| 响应时间 (ms) | < 20ms | > 100ms | 机械盘应换 SSD |
强烈建议: 工控机必须用 SSD, 并将
%AppData%/DarraPLC/logs/所在盘单独规划至少 20GB。 DarraRT 默认开启日志轮转 (每文件 100MB, 保留 20 份), 若占用盘量超过基线, 说明某模块日志等级设错 (Trace/Debug 在生产环境打开)。
4. 网卡
| 指标 | 基线 | 告警阈值 | 说明 |
|---|---|---|---|
| EtherCAT 网卡带宽 | < 10% | > 80% | PDO 不应饱和 |
| 发送错误 | 0 | 任意 > 0 | 物理层异常 |
| 接收错误 (CRC) | 0 | 任意 > 0 | 线缆/端接不良 |
| 丢弃计数 | 0 | > 100/min | 缓冲区溢出 |
| PDO 帧率 | = 配置值 | 偏差 > 1% | DC 同步异常 |
DarraRT EtherCAT 网卡应专用, 不参与 TCP/UDP 业务流量。用
netsh interface show interface查看绑定状态, DarraRT_Eth 只绑定DarraRT_Eth协议, 不绑定 TCP/IPv4/v6。
5. 温度
| 部件 | 正常 | 告警 | 关键 |
|---|---|---|---|
| CPU Package | < 65°C | > 85°C | > 95°C 降频 |
| CPU 核 (p95) | < 70°C | > 90°C | 接近 Tjmax |
| 主板芯片组 | < 60°C | > 80°C | 散热片松动 |
| 内存 | < 60°C | > 85°C | 频率不稳 |
| SSD | < 55°C | > 70°C | 性能下降 |
温度超限会触发 CPU 降频 (Thermal Throttling), 进而导致扫描周期抖动飙升。 排查顺序: 温度 → 频率 → 周期抖动。如果只看抖动表象, 会误以为是软件问题。
6. 电源
| 指标 | 基线 | 告警 | 说明 |
|---|---|---|---|
| 电源方案 | 高性能 | 非"高性能" | 省电模式=抖动 |
| C-State | 禁用 | 启用 | BIOS 层面 |
| P-State / SpeedStep | 禁用 | 启用 | 动态调频=抖动 |
| UPS 电量 | > 80% | < 20% | 断电保护 |
以上 BIOS 设置是 DarraRT 实时性的强制前提。未关闭 C-State 的系统, 1ms 周期抖动 会从 20μs 恶化到 500μs 以上。详见 实时抖动分析。
诊断步骤
步骤 1: 查看 Service 健康日志
打开 Service 日志目录, 搜索 [HealthMonitor] 标签:
# 进入日志目录 (默认路径)
cd "C:\Program Files\DarraRT\Service\logs"
# 查看最近 1000 行健康监控日志
Select-String -Path "service_*.log" -Pattern "\[HealthMonitor\]" | Select-Object -Last 1000
预期输出:
2026-04-18 09:00:00 [Info] [HealthMonitor] CPU=18% Mem=2.3GB Disk=3MB/s Net=1.2MB/s Temp=62C
2026-04-18 09:00:10 [Info] [HealthMonitor] CPU=22% Mem=2.3GB Disk=3MB/s Net=1.2MB/s Temp=63C
判定规则: 连续 10 条都在阈值内 → 健康。出现 [Warn] 或 [Error] 条目 → 进入步骤 2。
步骤 2: 交叉验证 (Performance Monitor)
# 启动 perfmon
perfmon.msc
添加计数器:
Processor(_Total)\% Processor TimeMemory\Available MBytesPhysicalDisk(_Total)\Avg. Disk Queue LengthNetwork Interface(<EtherCAT 网卡>)\Bytes Total/secProcess(Darra.PLC.Service)\Working SetProcess(Darra.PLC.IDE)\Private Bytes
判定规则: perfmon 数据与 HealthMonitor 一致 → 采样正常; 不一致 → Service 计数器损坏,
重启 Service (先停 PLC → 再重启)。
步骤 3: 硬件传感器 (HWiNFO)
1. 打开 HWiNFO64 → Sensors
2. 关注: CPU Package Temperature / CPU Core Voltage / DIMM Temperature
3. 记录 Min / Avg / Max
4. 对比 BIOS 设置 (Tjmax / VID / TDP)
判定规则: 任何 Max 超过表格告警阈值 → 先解决硬件问题再看软件。
步骤 4: 一键健康报告
IDE 菜单:
诊断 → 健康报告 → 导出 PDF
报告包含:
- 最近 24h CPU/内存/磁盘/网卡曲线
- 温度极值表
- 驱动状态 (DarraRT/Eth/PLC 三项)
- 日志等级统计 (Error/Warn 次数)
- BIOS 关键项 (C-State/SpeedStep)
- 系统事件关键条目
判定规则: 报告首页"综合评分"≥ 85 → 可投入生产; 60~85 → 警告级, 限期优化; < 60 → 禁止投产。
异常模式速查表
| 现象 | 原因 | 定位方法 | 解决 |
|---|---|---|---|
| Service 工作集持续增长 | 日志/事件订阅未释放 | Process Explorer → .NET AppDomains | 检查 using / Dispose |
| CPU 非隔离核 > 80% | 后台 Windows Update / 杀软 | services.msc | 关闭/设置到非 PLC 核 |
| 网卡错误计数 > 0 | 线缆 / 端接 / 驱动 | Get-NetAdapterStatistics | 换线 / 重装驱动 |
| 磁盘延迟 > 100ms | HDD / 大量日志 | resmon.exe 磁盘页 | 升级 SSD / 降日志级 |
| 温度 > 85°C | 散热不足 / 风扇故障 | HWiNFO 风扇转速 | 清灰 / 换风扇 |
| 非分页池持续增长 | 驱动泄漏 | poolmon -p -i -bDREC | 定位 Tag → 查代码 |
高级技巧
- 多机型基线库: 在首次部署时导出健康报告存档 (
baseline_<SN>_<日期>.pdf), 故障时可与当前报告逐项差分, 快速发现"哪项恶化了"。 - 远程采集: Service 支持
HealthMonitor.ExportEndpoint = http://<server>/health推送 JSON, 在中控屏 HMI 上实时看板。 - 异常即刻快照: 当 CPU > 90% 持续 3 秒, Service 自动
ProcDump -ma Darra.PLC.Service.exe到logs/dumps/, 用 WinDbg/VS 打开可以看到完整线程栈。
相关文档
