# [Know issue] DM Worker CPU 打满，重启后恢复

## Description

DM 集群拓扑，单个云主机部署 10 个 DM-worker 和 1 个 Master。上游无突增的数据插入与修改的情况下，DM- Worker 对应的 CPU 几乎跑满，导致数据同步延迟。通过 DM 集群重启后，CPU 恢复正常，数据同步恢复。

## Root Cause

DM-worker 报错卡住 DM-worker 同步，触发 auto-resume 操作频繁重试（符合预期），造成 CPU 负载较高。Dm-worker 卡住原因因为没有相关日志和监控无法定位原因。

## Diagnostic Steps

1. 确认 DM 集群拓扑，一般建议 DM-worker 的硬件配置，不符合预期可能会出现异常现象。
   
    ![image.png](/images/DM/dm-work-cpu-overload.png)

2. 通过 Grafana 的 Node Exporter -> CPU 面板，筛选问题的云主机，查看 CPU 负载情况，确认 CPU 负载；

3. 对应 DM-worker log 以及 DM-master log 查看是否存在 ‘warn'，‘error' 相关报错，潜在问题定位分析；

4. 如果 CPU 使用率持续增长阶段，通过 go-pprof 抓取异常时间点的 dm-worker 的情况，定位 CPU 消耗情况，包括 

    * cpu profile /debug/pprof/profile
    * dm goroutine /debug/pprof/goroutine?debug=2
    * memory profile /debug/pprof/heap
    * API 链接
      * [https://github.com/pingcap/dm/blob/v2.0.7/dm/worker/metrics.go](https://github.com/pingcap/dm/blob/v2.0.7/dm/worker/metrics.go)    
      * [https://github.com/pingcap/dm/blob/v2.0.7/dm/master/http_handler.go](https://github.com/pingcap/dm/blob/v2.0.7/dm/master/http_handler.go)  

5. 查看 DM 监控 Operate Error 面板的 auto-resume error 确认子任务自动恢复的出错次数

![image.png](/images/DM/dm-worker-cpu-overload-1.png)

## Resolution

* 升级 DM 集群至 v2.0.7 版本以上

## Workaround

* 重启 DM 集群后，DM 启动后通过任务恢复正常后，CPU 负载恢复正常。

## Affect Version

* ~ DM Release-2.0.7