运控软件CPU占用爆高问题排查

作者:Chdon 发布时间: 2025-08-04 阅读量:22 评论数:0

一、背景

运控软件在正常运行中,CPU打到100% ;闲置时,CPU占用率仍然达到60% 。在系统限制时抓到的dump文件。

二、占用爆高分析

1. 使用!threadpool 查看实际CPU占用率

软件在闲置时,CPU占用率仍然达到了61%

2. 使用`!runaway 查看线程CPU时间片使用情况

除0号主线程(UI线程)外,存在4个线程CPU时间片占用异常

3. 切换到指定线程,使用k 命令查看线程栈

以5号线程为例,其他线程类似。

  • 使用k 命令查看当前线程栈,考虑为单开线程循环执行某任务。

  • 使用!name2ee 查看SecsGemTemplate 对应的模块地址。

  • 使用!savemodule 导出模块代码。

  • 反编译模块代码,查看SecsGemTemplate.OpenConcurrentQueue<IReceive>.get_Count对应代码逻辑。

  • 发现while循环中,未添加Thread.Sleep ,导致一直占用CPU时间片。

三、解决方案

单开线程,执行while循环时,需添加Thread.Sleep 释放CPU时间片占用。

评论