Skip to main content

任务通信超时排查

本文介绍数据同步任务在资源紧张的情况下,任务通信超时问题排查。

问题现象

任务产生延迟,同时伴随着日志中出现通信超时,日志中异常信息如下。

2022-11-01 09:39:06.844 [heartbeat-report-4-thd-0] ERROR rsocket - fetch rsocket async result timeout. current timeout: 10000 ms. route name:taskReceiveHeartBeat, request id:f15d010e-5985-11ed-9b1c-09d7a8ea0743
java.util.concurrent.TimeoutException: Waited 10000 milliseconds for com.google.common.util.concurrent.SettableFuture@5bc61885[status=PENDING]
at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:470)
at com.google.common.util.concurrent.AbstractFuture$TrustedFuture.get(AbstractFuture.java:92)
at com.clougence.cloudcanal.task.rsocket.impl.TaskRSocketServiceImpl.getAsyncResult(TaskRSocketServiceImpl.java:95)
at com.clougence.cloudcanal.task.rsocket.impl.TaskRSocketServiceImpl.requestNonBlock(TaskRSocketServiceImpl.java:71)
at com.clougence.cloudcanal.base.service.task.thread.AliveHeartbeatReportThread.run(AliveHeartbeatReportThread.java:61)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)

问题排查

问题确认

  1. 进入控制台页面,选择任务详情>更多(监控图表页),如下图所示。 image.png
  2. 选择任务资源监控>任务JVM GC数,如下图所示,如图表曲线上观察到 FGC 数量不为0,说明内存资源紧张。 image.png

问题原因

同步任务使用较小规格,或者单条数据过大参数设置不当导致任务内存 FGC 增多,从而影响任务对外通信。

解决方案

可通过调整任务规格优化参数处理。

调整任务规格

  1. 如下图所示,打开任务详情-功能列表-参数修改,搜索参数specId,选择更大的规格。 image.png

优化任务参数

  1. 进入控制台,选择任务详情>功能列表>参数修改
  2. 增量阶段参数调整 increRingBufferSizeincreBatchSize参数,将原有值调小,避免一次性同步太多数据。
  3. 全量阶段参数调整 fullRingBufferSizefullBatchSize参数,将原有值调小,避免一次性同步太多数据。
  4. 如果上述步骤无法自助解决问题,请加群提问,请描述问题背景并提供报错日志或截图。