使用SDK调用API请求服务端时出现Wait future timeout错误

当出现Wait future timeout错误时,请确保客户端未出现FullGC并且未在请求期间调用client.shutdown()方法,以及排查服务端延迟是否过高。

问题现象

使用SDK调用API请求服务端时出现Wait future timeout错误。

可能原因

从发出请求到返回结果的耗时超过了syncClientWaitFutureTimeoutInMillis的值。syncClientWaitFutureTimeoutInMillis的默认值为60000,单位为毫秒。

说明

正常情况下,syncClientWaitFutureTimeoutInMillis的值不建议设置的过小。您可以在ClientConfiguration中设置syncClientWaitFutureTimeoutInMillis的值。

出现此问题的可能原因如下:

  • 客户端出现FullGC或者在请求期间主动调用了client.shutdown()方法。

  • 服务端延迟过高,大于syncClientWaitFutureTimeoutInMillis的值。

解决方案

  • 确认客户端中是否出现FullGC问题。

    通过jmap、jcmd等工具排查JVM,确认JVM的内存占用情况,确认是否出现内存溢出OOM。

    • 如果存在不合理的内存使用或内存泄漏问题,请优化代码。

    • 如果内存使用合理但是机器资源不足,请扩容内存。

    • 如果机器空闲且内存占用较少,请调大JVM的堆内存,降低问题发生的概率。

    另外,当机器的负载较高、网络异常率高、CPU使用率高时,也会出现Wait future timeout错误,一般是请求可能还未发出就已超时。

  • 确认客户端中是否在请求期间主动调用了client.shutdown()方法导致callBack回调线程被关闭。

  • 通过表格存储控制台确认服务端延迟是否过高。具体步骤如下:

    1. 登录表格存储控制台

    2. 在页面顶部选择资源组和地域。

    3. 概览页面的实例列表中,单击实例名称。

    4. 实例详情页签的数据表列表区域,单击数据表名称。

    5. 表管理页面的监控指标页签中,选择表或索引,指定时间范围,并选择指标分组平均访问延迟,即可查看不同操作类型的平均访问延迟信息。

      如果服务端延迟大于syncClientWaitFutureTimeoutInMillis的值,请提交工单联系表格存储技术支持。

      fig_20220217_mointor